2

我正在尝试计算复杂参数的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)

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

但是,虽然Gamma函数的值非常小,但对应的Beta函数的值却并不大。因此,进行计算仍然有意义。但我想不出办法。

我试过math.gamma了,但它不接受复杂的论点。我尝试了这个答案-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)的地方。

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

4

1 回答 1

2

我不了解 scipy,但您可以使用sympy来评估 beta 函数。它支持复杂的论点。文档可能会对您有所帮助。

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

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

于 2019-01-23T21:31:30.423 回答