【问题标题】:How do I get the value of gamma function in Python for large complex argument?如何在 Python 中为大型复杂参数获取 gamma 函数的值?
【发布时间】:2019-01-23 21:18:03
【问题描述】:

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

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

【问题讨论】:

    标签: python scipy gamma-function


    【解决方案1】:

    我不了解 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

    【讨论】:

    • 效果很好!唯一的问题是,我如何确保函数betaj 而不是I 返回虚数?似乎很难操纵结果。
    • 简单:通过s = str(beta..)) 转换为str 并执行s.replace("I", "j")。脏但有效。或者只是 complex(beta(...)) 这将转换为 python 复杂类型。
    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 2022-01-10
    相关资源
    最近更新 更多