对于大型复杂参数,如何在 Python 中获取伽玛函数的值?
How do I get the value of gamma function in Python for large complex argument?
我正在尝试为复杂参数计算 Beta 函数的值。方法 scipy.special.beta
不接受复杂参数,所以我改为定义
beta = lambda a, b: (gamma(a) * gamma(b)) / gamma(a + b)
它适用于较小的值,但是,对于较大的值,它会 return 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)
A 0j
将被 returned 并且显然该值太小而无法打印。
不过,Gamma函数的值虽然超小,但对应的Beta函数的值却不大。所以做计算还是有意义的。但是我想不出办法。
我试过math.gamma
,但它不接受复杂参数。我尝试了这个中提供的方法,它将return -0j
for
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 for the evaluation of the beta function. It supports complex arguments. 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
我正在尝试为复杂参数计算 Beta 函数的值。方法 scipy.special.beta
不接受复杂参数,所以我改为定义
beta = lambda a, b: (gamma(a) * gamma(b)) / gamma(a + b)
它适用于较小的值,但是,对于较大的值,它会 return 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)
A 0j
将被 returned 并且显然该值太小而无法打印。
不过,Gamma函数的值虽然超小,但对应的Beta函数的值却不大。所以做计算还是有意义的。但是我想不出办法。
我试过math.gamma
,但它不接受复杂参数。我尝试了这个-0j
for
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 for the evaluation of the beta function. It supports complex arguments. 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