Как я могу получить значение гамма-функции в Python для большого сложного аргумента? - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь вычислить значение функции Beta для сложного аргумента. Метод scipy.special.beta не принимает сложный аргумент, поэтому я определил вместо него

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

Отлично работает для небольших значений, однако для больших значений вернет nan. Так что я копался в поведении Гамма функция

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 будет возвращено, и, очевидно, значение слишком мало для печати. ​​

Однако, хотя значение функции 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)))

где я пытался вычислить бета (n, 0,5) .

Может кто-нибудь помочь мне в этом вопросе? Заранее спасибо!

1 Ответ

0 голосов
/ 24 января 2019

Я не знаю насчет Сципи, но вы можете использовать sympy для оценки бета-функции. Он поддерживает сложные аргументы. Эта документация может помочь вам в этом.

Итак, ваш код будет выглядеть примерно так, если я вас правильно понял:

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

...