Я работаю над проблемой упрощенного переноса излучения, и я получаю интеграл от формы
\ 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} $ может быть числовыми векторами одинаковой длины или где один является скаляром? (Я могу обсудить, как это вписывается в проблему, если бы прояснить вещи.)Scipy - Противоположность неполной гамма-функции
Две простые обходные использовать scipy.integrate.quad
или scipy.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)
Ни Обходной особенно медленно или особенно быстро, но более высокий подход был бы весьма полезен.
Если я читаю этот вопрос правильно, OP уже знаком с этой функцией. – DSM
Да, ты прав. – ErikR