Escreva um programa para calcular uma aproximação do valor de \pi utilizando a seguinte série infinita, representada na Equação 11.9. O programa deve solicitar ao usuário o número de iteraçōes desejadas. Para cada iteraçāo, calcule o erro relativo em relaçāo ao valor real de \pi. Ao final, gere um gráfico ilustrando a evolução do erro relativo ao longo das iteraçōes.
\pi=2 \prod_{n=1}^{\infty} \frac{(2 n)^{2}}{(2 n-1)(2 n+1)}

Passo 1

O enunciado pede um programa que aproxime o valor de \pi usando a série infinita
\pi = 2 \prod_{n=1}^{\infty} \frac{(2n)^2}{(2n-1)(2n+1)},
solicitando ao usuário o número de iterações N, calculando a estimativa de \pi a cada iteração e o erro relativo em relação ao valor real de \pi, e por fim gerando um gráfico da evolução do erro.

Passo 2

Definimos as variáveis necessárias:
– Um inteiro N fornecido pelo usuário.
– Uma variável produto iniciada com 1.
– Duas listas, iteracoes e erros, para armazenar o índice de cada iteração e o erro relativo correspondente.

Passo 3

No laço de 1 até N:
  1. Calculamos o termo
\text{termo} = \frac{(2n)^2}{(2n-1)(2n+1)}.
  1. Atualizamos produto *= termo.
  2. Estimamos \pi como pi_estim = 2 * produto.
  3. Calculamos o erro relativo
\text{erro} = \frac{\bigl|\pi_{\text{estim}} - \pi\bigr|}{\pi}.
  1. Armazenamos n em iteracoes e erro em erros.

Passo 4

Após o laço, usamos o Matplotlib para plotar erros versus iteracoes, colocando títulos e rótulos apropriados, e exibimos o gráfico.

Resposta

import math
import matplotlib.pyplot as plt

def \(aproximar_pi_por_produto\)(N):
 produto \(=1.0\)
 iteracoes = []
 erros = []
 for n in range(1, N\(+1\)):
 termo = (2*n)**2 / ((2*n - 1) * (2*n \(+1\)))
 produto *= termo
 \(pi_estim =2\) * produto
 erro = abs(\(pi_estim\) - math.pi) / math.pi
 iteracoes.append(n)
 erros.append(erro)
 return iteracoes, erros

def main():
 try:
 N = int(input("Número de iterações desejadas: "))
 if N <\(=0\):
 raise ValueError
 except ValueError:
 print("Por favor, insira um inteiro positivo.")
 return

 iteracoes, erros = \(aproximar_pi_por_produto\)(N)

 plt.figure(figsize=(8, 5))
 plt.plot(iteracoes, erros, marker='o', linestyle='-')
 plt.yscale('log')
 plt.title("Evolução do Erro Relativo na Aproximação de π")
 plt.xlabel("Iteração")
 plt.ylabel("Erro Relativo")
 plt.grid(True, which='both', ls='--', lw\(=0.5\))
 plt.\(tight_layout\)()
 plt.show()

if __name__ \(==\) "__main__":
 main()

Exercícios relacionados