我正在尝试为复杂参数计算Beta函数的值。方法scipy.special.beta不接受复杂的参数,因此我定义了

beta = lambda a, b: (gamma(a) * gamma(b)) / gamma(a + b)


对于较小的值,它工作正常,但是对于较大的值,它将返回nan。所以我研究了Gamma函数的行为

from scipy.special import gamma
import numpy
radius = 165
phi = (3.0 * numpy.pi) / 4.0
n = 1.9 + numpy.exp(phi * 1j) * radius
print gamma(n)


将返回0j,并且显然该值太小而无法打印。

但是,尽管Gamma函数的值非常小,但是相应的Beta函数的值却并不完全。因此进行计算仍然有意义。但是我找不到办法。

我尝试了math.gamma,但是它不接受复杂的参数。我尝试了此answer中提供的方法,它将为-0j返回

n = 1.9 + numpy.exp(phi * 1j) * radius
numpy.exp(numpy.log(gamma(n)) + numpy.log(gamma(0.5)) - numpy.log(gamma(n + 0.5)))


我试图计算beta(n,0.5)的地方。

有人可以帮我解决这个问题吗?提前致谢!

最佳答案

我不了解scipy,但是您可以使用sympy评估beta函数。它支持复杂的参数。 This文档可能会帮助您。

因此,如果我正确理解您的代码,您的代码将大致如下所示:

from sympy.functions.special.beta_functions import beta
import numpy
radius = 165
phi = (3.0 * numpy.pi) / 4.0
n = 1.9 + numpy.exp(phi * 1j) * radius

print(beta(n, 0.5))


>>> 0.0534468376932947-0.127743871500741 * I

关于python - 如何获取大型复杂参数在Python中的gamma函数值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54335790/

10-12 16:53