Escreva um programa para calcular uma aproximação do valor de
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
. Ao final, gere um gráfico ilustrando a evolução do erro relativo ao longo das iteraçōes.
Passo 1
O enunciado pede um programa que aproxime o valor de
usando a série infinita
solicitando ao usuário o número de iterações
, calculando a estimativa de
a cada iteração e o erro relativo em relação ao valor real de
, e por fim gerando um gráfico da evolução do erro.
Passo 2
Definimos as variáveis necessárias:
– Um inteiro fornecido pelo usuário.
– Uma variável .
– Duas listas,
– Um inteiro
– Uma variável
produto
iniciada com
– Duas listas,
iteracoes
e erros
, para armazenar o índice de cada iteração e o erro relativo correspondente.Passo 3
No laço de
até
:
- Calculamos o termo
- Atualizamos
produto *= termo
. - Estimamos
como pi_estim = 2 * produto
. - Calculamos o erro relativo
- Armazenamos
n
emiteracoes
eerro
emerros
.
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()