Problem with a gamma function/error message

  • Context: Python 
  • Thread starter Thread starter ChrisVer
  • Start date Start date
  • Tags Tags
    Gamma
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
3 replies · 2K views
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 [itex]\Gamma(172)[/itex] 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)
'''
 
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

[itex]f(n) = \dfrac{\Gamma(n+\frac{1}{2})}{n^2 \Gamma(n)}[/itex]

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

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

So [itex]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)[/itex]
 
  • Like
Likes   Reactions: FactChecker and ChrisVer