Python 单个函数返回inf值时两个gamma函数的估计比率
我在估计两个伽马函数的比值。Python 单个函数返回inf值时两个gamma函数的估计比率,python,scipy,inf,gamma,Python,Scipy,Inf,Gamma,我在估计两个伽马函数的比值。gamma(x)和gamma(y)的估计值都非常大(>10^300),但两者的比率应该相当小 from scipy.special import gamma gamma(x) / gamma(y) 不幸的是,gamma(x)太大,scipy返回一个inf值。有没有办法阻止这种情况,提高阈值,或者计算这个比率 谢谢假设x和y是真的且为正,您可以使用以下标识: a / b = e^(ln(a) - ln(b)) 我建议使用gmpy2进行任意精度的计算。它有gmpy2.
gamma(x)
和gamma(y)
的估计值都非常大(>10^300),但两者的比率应该相当小
from scipy.special import gamma
gamma(x) / gamma(y)
不幸的是,gamma(x)
太大,scipy返回一个inf
值。有没有办法阻止这种情况,提高阈值,或者计算这个比率
谢谢假设x和y是真的且为正,您可以使用以下标识:
a / b = e^(ln(a) - ln(b))
我建议使用
gmpy2
进行任意精度的计算。它有gmpy2.lgama
,它返回伽马函数的对数,您可以使用gmpy2.exp
将对数形式转换为所需的比率。是x,y实数还是复数?scipy.special
有gammaln
(),因此exp(gammaln(a)-gammaln(b))
应该可以工作。@WarrenWeckesser No,scipy.special
的数据类型是double
,因此它无法处理OP所需的大数字。对,这就是使用gammaln
的要点。OP说伽马(x)大于1e300,但没有说要大多少。假设x
是425,而y
是420。gamma(x)
和gamma(y)
都大大大于1e300(远远超过最大64位浮点值),但是exp(gammaln(x)-gammaln(y))
很容易使用64位浮点计算1.3883e13
。64位浮点数的使用范围取决于x
和y
的实际大小,以及gamma(x)/gamma(y)
的比率有多大。@WarrenWeckesser哦,我假设x
大约是10^300。误读。如果您的x
和y
适合双人,请随意使用scipy功能。