2015-09-10 17 views
2

Я оцениваю соотношение двух гамма-функций. Обе оценки для gamma(x) и gamma(y) очень велики (> 10^300), но соотношение двух должно быть довольно небольшим.Соотношение оценки двух гамма-функций, когда отдельные функции возвращают значение inf

from scipy.special import gamma 
gamma(x)/gamma(y) 

К сожалению, есть точка, где gamma(x) слишком велико, а SciPy возвращает inf значение. Есть ли способ остановить это, увеличить порог или, наоборот, рассчитать это соотношение?

Благодаря

+0

Являются ли x, y реальными или сложными? – orlp

ответ

1

Предполагая, что х и у вещественны и положительны вы можете использовать следующее тождество:

a/b = e^(ln(a) - ln(b)) 

Я могу предложить использовать gmpy2 для вычисления произвольной точности. Он имеет gmpy2.lgamma, который возвращает логарифм функции гамма, и вы можете использовать gmpy2.exp для преобразования из формы логарифма в желаемое соотношение.

+0

'scipy.special' имеет' gammaln' (http://docs.scipy.org/doc/scipy/reference/generated/scipy.special.gammaln.html), поэтому 'exp (gammaln (a) - gammaln (b)) 'должен работать. –

+0

@WarrenWeckesser Нет, тип данных 'scipy.special' является' double', поэтому он не может обрабатывать большие числа, требуемые OP. – orlp

+0

Правильно, в этом смысл использовать 'gammaln'. OP говорит, что 'gamma (x)' больше 1e300, но не говорит, насколько больше. Предположим, что 'x' - это, скажем, 425, а' y' - 420. Оба параметра «gamma (x)» и «gamma (y)» намного превышают 1e300 (и намного превышают максимальное значение с плавающей запятой 64 бит), но 'exp (gammaln (x) - gammaln (y))' легко вычисляется с использованием 64-битной плавающей запятой, которая должна быть '1.3883e13'. Как далеко можно идти с 64-битной плавающей точкой, зависит от того, насколько велики 'x' и' y', и насколько велика величина 'gamma (x)/gamma (y)'. –

 Смежные вопросы

  • Нет связанных вопросов^_^