不完全伽玛函数不接受复数值输入

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。