我想计算一下wolfram alpha所谓的不完整伽玛函数(see here):
`gamma[0, 0.1]`
wolfram alpha输出为1.822
。 scipy
给我的唯一一个类似于scipy.special.gammainc
的东西,但它与wolfram alpha定义其不完整伽玛函数的方式不同definition。
毫不奇怪
import scipy
scipy.special.gammainc(0, 0.1)
给了我nan
。 scipy
是否支持我正在寻找的内容?
答案 0 :(得分:5)
根据http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.special.gammainc.html,第一个参数必须是正数,而你是零;这就是你获得NaN的原因。
也就是说,假设我们尝试计算Gamma[0.01,0.1]
。在这种情况下,WolframAlpha返回1.80324
:
根据http://mathworld.wolfram.com/IncompleteGammaFunction.html,这是上部不完整Gamma函数,而Scipy输出的是WolframAlpha称之为较低不完全Gamma函数的缩放版本。通过使用公式10中的标识,可以看出在> 0的情况下,您可以使用以下内容:
from scipy.special import gammainc
from scipy.special import gamma
gamma(0.01)*(1 - gammainc(0.01,0.1))
与WolframAlpha一致返回1.8032413569025461
。
简而言之,WolframAlpha中的Gamma[a,x]
对应于Scipy中的gamma(a)*(1-gammainc(a,x))
,前提是a>0
。
答案 1 :(得分:2)
很遗憾,scipys gammaincc不支持a=0
的值。但是您可以定义自己的inc_gamma
:
from scipy.special import gamma, gammaincc, exp1
def inc_gamma(a, x):
return exp1(x) if a == 0 else gamma(a)*gammaincc(a, x)
然后inc_gamma(0, 0.1)
将给您1.8229239584193906
。