scipy.special.gammainc 不接受否定输入

scipy.special.gammainc does not accept negative input

我已经使用 SageMath 对表达式进行了符号积分。结果包含带有两个输入参数的 gamma 函数:

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

显然这被称为不完全伽马函数。现在我想在 Python 代码中使用这个表达式。我已将不完整的伽玛函数追踪到 scipy.special.gammainc。不幸的是,这个函数不允许负输入参数,我必须使用 -1 作为第一个输入参数。我该如何解决这个问题?

不能输入负数是有原因的,因为负整数的阶乘无法计算,因为对于n⟩=⟩0,递归关系是:

(n-1)! = n!/n  

这将导致除以零。
也许您应该将您的问题改写为您要实现的目标类型,然后交叉 post https://math.stackexchange.com/

下不完全伽玛函数可以根据Wikipedia. This integral can be related to the generalised form of the exponential integral定义为不正确的积分。两个页面都给出了两者之间的关系:

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)

有一个小警告。 SageMath 的 gamma_inc 函数接受负的第一个输入参数,而 scipy.specialgammainc 函数不接受。但是,scipy.special 中的 expn 函数没有此限制,因为它可以计算 n>=2 对应于 gamma_inc.

的第一个负输入参数

所以OP的答案是使用维基百科关系将下不完全伽马函数替换为广义指数积分并使用scipy.special.expn在Python中进行评估。