A série de Ramanujan para
, apresentada na Equação 11.19 , possui convergência extremamente rápida. Escreva um programa em Python que solicite ao usuário o número de termos a serem utilizados para calcular
, computando o erro absoluto em cada iteração e exibindo esses erros em um gráfico.
Passo 1
O enunciado pede para escrever um programa em Python que aproxime
usando a série de Ramanujan
e, a cada iteração
, calcule o valor parcial de
, o erro absoluto em relação a
(usando
math.pi
) e, ao final, exiba um gráfico desses erros.Passo 2
Para aproximar
com
termos, vamos manter uma soma acumulada
onde
Depois a aproximação é
Passo 3
No código Python, vamos usar e iterar de
math.factorial
para os fatoriais, math.sqrt
para
k = 0
até k = N-1
. A cada passo calculamos term = (factorial(4*k)/(factorial(k)**4))*(1103+26390*k)/396**(4*k)
e atualizamos S += term
.Passo 4
Depois de atualizar a soma
S
em cada iteração, calculamos\(pi_aprox =1.0\) / ((2*math.sqrt(2)/9801) * S)
erro = abs(\(pi_aprox\) - math.pi)
e armazenamos
erro
numa lista. Quando terminar o laço, usamos matplotlib
para traçar erro
versus índice de iteração, marcando eixos e título para exibir a convergência.Resposta
import math
import matplotlib.pyplot as plt
def \(aproximar_pi_ramanujan\)(N):
coef \(=2\) * math.sqrt(2) / 9801
S \(=0.0\)
erros = []
for k in range(N):
num = math.factorial(4*k)
den = (math.factorial(k) ** 4) * (396 ** (4*k))
term = num * (\(1103+26390\)*k) / den
S \(+=\) term
\(pi_aprox =1.0\) / (coef * S)
erro = abs(\(pi_aprox\) - math.pi)
erros.append(erro)
return erros
def main():
N = int(input("Digite o número de termos N para aproximar π: "))
erros = \(aproximar_pi_ramanujan\)(N)
plt.figure(figsize=(8,5))
plt.plot(range(1, N\(+1\)), erros, marker='o', linestyle='-')
plt.xlabel("Número de termos")
plt.ylabel("Erro absoluto")
plt.title("Convergência da série de Ramanujan para π")
plt.yscale('log') # escala log para visualizar melhor a queda do erro
plt.grid(True, which="both", ls="--", lw\(=0.5\))
plt.show()
if __name__ \(==\) "__main__":
main()