scipy中不完整的Gamma功能

时间:2016-08-02 06:29:44

标签: python scipy

我想计算一下wolfram alpha所谓的不完整伽玛函数(see here)

`gamma[0, 0.1]`

wolfram alpha输出为1.822scipy给我的唯一一个类似于scipy.special.gammainc的东西,但它与wolfram alpha定义其不完整伽玛函数的方式不同definition

毫不奇怪

import scipy
scipy.special.gammainc(0, 0.1)

给了我nanscipy是否支持我正在寻找的内容?

2 个答案:

答案 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

enter image description here

根据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