我正在使用Python库mpmath,特别是在评估不完整的Gamma函数。 这是根查找例程的一部分,但对于某些复值参数的组合,其评估非常缓慢。
import mpmath as mp
from mpmath import gammainc
def Gamma(a,z0,z1):
return gammainc(a,a=z0,b=z1,regularized=False)
这里 mpmath.gammainc
函数的评估被卡住了:
>> Gamma(mp.mpc(12.5+17.5j), mp.mpf(0.0), mp.mpf(-12.5))
另一方面,Mathematica 几乎瞬间返回了结果。
In[1]:= Gamma[12.5 + 17.5 I, 0, -12.5]
Out[1]:= 2.38012*10^-7 + 5.54827*10^-7 I
在其他情况下,对于不同的参数,
mpmath
和 Mathematica
返回相同的输出结果:
Mathematica
In[2]: Gamma[3.5 I, 0, 10]
Out[2]:= 0.0054741 + 0.000409846 I
Python mpmath
>> Gamma(3.5j,0,10)
mpc(real='0.0054741038497352953', imag='0.00040984640431357779')
您是否有关于这种行为的原因的一些想法?这可以被视为mpmath
的问题还是数学上的积分问题?
不幸的是,scipy
没有提供复杂参数的gamma
函数实现,所以这不是一个选择。
gammainc(12.5+17.5j, 0.0, -12.5)
并在一段时间后中断计算,堆栈跟踪主要由三行组成:"expintegrals.py,第163行,expintegrals.py,第166行,expintegrals.py,第241行",反复出现。可能是无限循环而不是递归。 - user6655984