Scipy - 与不完整的伽玛函数相反

时间:2014-12-17 03:39:18

标签: scipy integral

我正在处理一个超简化的辐射传输问题,我最终得到了一个形式的积分 \ int_ {x_0} ^ {x_1} e ^ {+ t} t ^ a dt
在我的一个方程式中。是否有:
1.这个功能的特殊名称,我还没有找到?它与不完整的伽玛函数明显相关 \ frac {1} {\ Gamma(a)} \ int_0 ^ {x} e ^ { - t} t ^ {a-1} dt
这是在scipy.special.gammainc下实施的。我已经在我的代码的早期部分中使用了它 2.这种函数的合理快速实现,其中指数$ a $是固定的但是积分边界$ x_ {0,1} $是可变的吗?优选地,$ x_ {0,1} $可以是相同长度的numpy向量,或者其中一个是标量? (如果能澄清问题,我可以讨论如何解决这个问题。)

两种简单的解决方法是使用scipy.integrate.quadscipy.integrate.cumtrapz

from scipy.integrate import quad  
from scipy.integrate import cumtrapz  
from numpy import exp, empty_like, linspace, ones

a = 0.286 * 4.0
fIntegrand = lambda t: exp(t) * t**a

def FIntegrated1(x0,x1):
    # Use quad to do integrals one by one
    F = empty_like(x0)
    for i in xrange(x0.size):
        F[i] = quad(fIntegrand, x0[i], x1[i])[0]
    return F

def FIntegrated2(x):
    # Use cumtrapz
    # x is a numpy array from x0 to maximum x1 to be calculated
    F = cumtrapz(fIntegrand, x=x, initial=0.0)
    return F

# Test out with typical values
x = linspace(.5,8,50)
x1 = x[1:]
x0 = ones(x1.shape) * .5
F1 = FIntegrated1(x0,x1)
F2 = FIntegrated2(x)

两种解决办法都不是特别慢或特别快,但更好的方法会受到赞赏。

1 个答案:

答案 0 :(得分:0)

scipy中(较低的)不完整伽玛函数的文档:(link)