scipy.special.gammain c не принимает отрицательный ввод - PullRequest
0 голосов
/ 15 января 2020

Я использовал SageMath для символической интеграции выражения. Результат содержит функцию gamma с двумя входными параметрами:

gamma(-1, 2*((x - xp)^2 + (y - yp)^2)/s^2)

Видимо, это называется неполной гамма-функцией. Теперь я хочу использовать это выражение в Python коде. Я отследил неполную гамма-функцию до scipy.special.gammainc. К сожалению, эта функция не допускает отрицательных входных параметров, и я должен использовать -1 в качестве первого входного параметра. Как я могу обойти это?

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Нижняя неполная гамма-функция может быть определена в терминах неправильного интеграла в соответствии с Wikipedia . Этот интеграл может быть связан с обобщенной формой экспоненциального интеграла . На обеих страницах дано это соотношение между ними:

E_n(x) = x^(n-1)*gamma(1-n, x)

Так что для случая в OP у нас будет n=2, что соответствует -1 в качестве первого входного параметра для гамма-функции. Я численно проверил в SageMath, что вышеприведенное соотношение выполняется. Соответствующие функции в SageMath:

1. gamma(n, x) == gamma_inc(n, x)
2. E_n(x) == exp_integral_e(n, x)

, которые в соответствии с отношением Википедии дают нам (помимо ошибок округления):

exp_integral_e(n, x) == x^(n-1)*gamma_inc(1-n, x)

Соответствующие функции Python:

1. gamma(n, x) == scipy.special.gammainc(n, x)
2. E_n(x) == scipy.special.expn(n, x)

Что в соответствии с отношением Википедии дает нам (помимо ошибок округления):

expn(n, x) == x**(n-1)*gammainc(1-n, x)

Есть одно небольшое предостережение. Функция gamma_inc из SageMath принимает отрицательный первый входной параметр, а функция gammainc из scipy.special - нет. Однако функция expn из scipy.special не имеет этого ограничения, поскольку ее можно оценить для n>=2, соответствующего отрицательному первому входному параметру для gamma_inc.

Таким образом, ответ на OP использовать отношение Википедии для замены нижней неполной гамма-функции обобщенным экспоненциальным интегралом и использовать scipy.special.expn для оценки в Python.

0 голосов
/ 15 января 2020

Существует причина, по которой вы не можете ввести отрицательное число, так как факториалы отрицательных целых чисел не могут быть вычислены, поскольку для n = 0 отношение рекуррентности:

(n-1)! = n!/n  

Это приведет к делению на ноль.
Возможно, вам следует перефразировать свой вопрос в тип цели, которую вы пытаетесь достичь sh, а затем пересечь пост https://math.stackexchange.com/

...