Prof. Doherty Andrade — www.metodosnumericos.com.br
Mesmo sem formação acadêmica ele fez grandes contribuições
em diversas áreas da matemática, teoria dos números, séries infinitas, frações contínuas,
entre outros, incluindo problemas considerados insolúveis.
Assista ao filme “O homem que viu o infinito” que conta sua história.
\frac{1}{\pi} = \frac{2 \sqrt{2}}{99^2} \sum_{k = 0}^{\infty} \frac{(4k)!}{k!^4} \cdot \frac{1103 + 26390k}{396^{4k}}
$$
Para encontrar uma aproximação para $\pi$ usamos um número finito de termos da série, a seguir usando os três primeiros termos da série para obter uma boa aproximação para $\pi$:
$$
\pi \approx \frac{99^2}{2 \sqrt{2}} \frac{1}{\left( 1103 + 4! \frac{1103 + 26390}{396^{4}} + \frac{8!}{2^4} \frac{1103 + 26390(2)}{396^{8}} \right)}
$$
A soma parcial com apenas 3 termos já fornece uma boa aproximação para $\pi$. Veja o comando em Python:
99**2 / (2 * 2**0.5) / (1103 + 4*3*2 * (26390 + 1103) / 396**4+ 8*7*6*5*4*3*2 / 2**4 * (26390*2 + 1103) / 396**8)
3.141592653589793
Podemos melhorar um pouco mais escrevendo um script para calcular somas parciais tomando um número $n$ qualquer de termos.
Para isso, vamos precisar de numpy.
import numpy as np
from numpy import sqrt
import math
n = 10
(99**2)/(2*sqrt(2))*(1/(sum([math.factorial(4*k)*(1103+26390*k)/(math.factorial(k)**4*396**(4*k)) for k in range(0,n+1)])))
3.141592653589793
Vamos definir uma função que retorna a $n$-ésima soma parcial da série de Ramanujan. Para usar a função basta escrever ramanujan(n), onde $n$ é o número de termos a serem considerados na série.
Vamos fixar os resultados em 50 dígitos decimais.
from decimal import *
getcontext().prec = 50
def ramanujan(n):
return (99**2)/(2*sqrt(2))*(1/(sum([math.factorial(4*k)*(1103+26390*k)/(math.factorial(k)**4*396**(4*k))
for k in range(0,n+1)])))
Decimal(ramanujan(20))
Decimal('3.141592653589793115997963468544185161590576171875')