不完全伽玛函数不接受复数值输入
Incomplete gamma function does not accept complex value inputs
我正在尝试计算 upper incomplete gamma function defined like in this post。如果我使用
from scipy.special import gamma,gammainc
from numpy import linspace
a = 0
z = (2+3j)*np.linspace(0,10)
gamma(a)*(1-gammainc(a,z))
其中 z
是一个复向量我得到一个错误
TypeError: ufunc 'gammainc' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
是否有替代函数来进行计算?当我尝试使用 WolframAlpha 的 Gamma
函数执行此操作时,似乎没有问题。
当 SciPy 不足以实现棘手的特殊功能时,mpmath 通常会派上用场。比较
>>> mpmath.gammainc(0, 2+3j)
mpc(real='-0.024826207944199364', imag='0.020316674911044622')
与 Wolfram Alpha 相同。
写在Python,比SciPy慢;它也没有矢量化。因此,对于您的数据,它会像
import mpmath
result = np.array([mpmath.gammainc(w) for w in z[1:]], dtype=np.complex)
请注意,我避免将 0
作为参数传递(这是一个极点)。 mpmath.gammainc
的 return 类型是它自己的 mpc
对象类型,但可以像上面那样转换回 NumPy。
我正在尝试计算 upper incomplete gamma function defined like in this post。如果我使用
from scipy.special import gamma,gammainc
from numpy import linspace
a = 0
z = (2+3j)*np.linspace(0,10)
gamma(a)*(1-gammainc(a,z))
其中 z
是一个复向量我得到一个错误
TypeError: ufunc 'gammainc' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
是否有替代函数来进行计算?当我尝试使用 WolframAlpha 的 Gamma
函数执行此操作时,似乎没有问题。
当 SciPy 不足以实现棘手的特殊功能时,mpmath 通常会派上用场。比较
>>> mpmath.gammainc(0, 2+3j)
mpc(real='-0.024826207944199364', imag='0.020316674911044622')
与 Wolfram Alpha 相同。
写在Python,比SciPy慢;它也没有矢量化。因此,对于您的数据,它会像
import mpmath
result = np.array([mpmath.gammainc(w) for w in z[1:]], dtype=np.complex)
请注意,我避免将 0
作为参数传递(这是一个极点)。 mpmath.gammainc
的 return 类型是它自己的 mpc
对象类型,但可以像上面那样转换回 NumPy。