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

时间:2018-07-31 08:38:12

标签: python scipy gamma-function

我正在尝试计算upper incomplete gamma function中定义的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函数来执行此操作时似乎没有问题。

1 个答案:

答案 0 :(得分:2)

当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的返回类型是其自己的mpc对象类型,但是可以如上所述将其转换回NumPy。