Problem with a gamma function/error message

  • Context: Python 
  • Thread starter Thread starter ChrisVer
  • Start date Start date
  • Tags Tags
    Gamma
Click For Summary

Discussion Overview

The discussion revolves around a Python script that encounters an error when evaluating a function involving the gamma function for large values of n, specifically n=172 and above. Participants explore the behavior of the function and potential solutions to the encountered error.

Discussion Character

  • Technical explanation, Debate/contested, Mathematical reasoning

Main Points Raised

  • One participant reports a RuntimeWarning when calculating f(n) for n=172, suggesting a potential division by zero issue.
  • Another participant notes that gamma(172) is a very large number, which may exceed the limits of floating point precision, leading to invalid values in calculations.
  • A different viewpoint suggests avoiding the built-in gamma function for large arguments due to inaccuracies in dividing large numbers, proposing a recursive approach to calculate f(n) instead.
  • One participant recommends using arbitrary precision arithmetic to handle large numbers more accurately, referencing a specific library.

Areas of Agreement / Disagreement

Participants express differing opinions on the best approach to handle large values in calculations, with no consensus on a single solution. Some agree on the limitations of floating point precision, while others propose alternative methods without resolving the overall issue.

Contextual Notes

Limitations include the potential for numerical instability when dealing with large gamma function values and the dependence on the precision of the numerical methods used.

ChrisVer
Science Advisor
Messages
3,372
Reaction score
465
I wrote the following python script in order to try and look how $$\sum_{i=1}^\infty f(n) = \sum_{i=1}^\infty \frac{\Gamma(n+1/2)}{n^2 \Gamma(n)}$$ behaves. However it appears to have some problem with my function f(n) for n=172 and above throwing this error:
RuntimeWarning: invalid value encountered in double_scalars
return gamma(n+0.5)/(n**2 * gamma(n))
I thought that there was a problem with the function [as division with zero] and so I tried wolframalpha which returns me a non zero value for \Gamma(172) and also a non-infinite value for f(172).
I even tried a user-defined gamma function I had built in the past, and I got the same result for n=172... [it's highly unlike that my method's the same as scipy's]

Python:
from scipy.special import gamma

def f(n):
    return gamma(n+0.5)/(n**2 * gamma(n))

def sume(f,N):
    result=0.0
    for i in range(1,N+1): result+= f(i)
    return result

print f(172)
'''
for i in range(100,200):
    print i," : ",sume(f,i)
'''
 
Technology news on Phys.org
gamma(172) = 171! is a huge number. It is probably just too large for the floating point double precision number format of the computer. The limit is about 1.8x10308. gamma(172) is about 1.2x10309. So that is where the number gets too large for the computer to handle.
 
  • Like
Likes   Reactions: ChrisVer
I wouldn't use the built-in gamma function for large arguments. Dividing two huge numbers is usually very inaccurate.

I would instead just calculate the expression inside the summation recursively

f(n) = \dfrac{\Gamma(n+\frac{1}{2})}{n^2 \Gamma(n)}

So f(n+1) = \dfrac{\Gamma(n+\frac{1}{2}+1)}{(n+1)^2 \Gamma(n+1)}

Then you use that \Gamma(x+1) = x \Gamma(x) to write this as follows:

So f(n+1) = \dfrac{(n+\frac{1}{2})\Gamma(n+\frac{1}{2})}{(n+1)^2 n \Gamma(n)} = \dfrac{n(n+\frac{1}{2})}{(n+1)^2} f(n)
 
  • Like
Likes   Reactions: FactChecker and ChrisVer

Similar threads

  • · Replies 6 ·
Replies
6
Views
3K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 15 ·
Replies
15
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 11 ·
Replies
11
Views
1K
  • · Replies 9 ·
Replies
9
Views
3K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 7 ·
Replies
7
Views
5K
  • · Replies 3 ·
Replies
3
Views
2K