按照@Andras Deak的回答,您可以分析地找出高x扩展,然后使用一些简单的平滑在它和scipy函数之间进行插值.实际上有两个术语在高x扩展中取消,所以你必须要小心一点.
这是我得到的答案:
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import wofz
def Z(x):
return wofz(x)
## first derivative of wofz (analytically)
def Zp(x):
return -2/1j/np.pi**0.5 - 2*x*Z(x)
def dawsn_expansion(x):
# Accurate to order x^-9, or, relative to the first term x^-8
# So when x > 100, this will be as accurate as you can get with
# double floating point precision.
y = 0.5 * x**-2
return 1/(2*x) * (1 + y * (1 + 3*y * (1 + 5*y * (1 + 7*y))))
def dawsn_expansion_drop_first(x):
y = 0.5 * x**-2
return 1/(2*x) * (0 + y * (1 + 3*y * (1 + 5*y * (1 + 7*y))))
def dawsn_expansion_drop_first_two(x):
y = 0.5 * x**-2