Escrevam um programa para estimar diferentes valores de uma função representada por uma série de potências. Definam a função e a série de potências a serem implementadas (consultem os livros da disciplina de Cálculo Diferencial e Integral III ou outras referências). Implementem a rotina e façam a estimativa para dois valores distintos de x. Para cada valor de x escolhido, representem no mesmo gráfico as curvas dos erros estimado e verdadeiro.
Passo 1
O enunciado pede um programa que aproxime valores de uma função dada por uma série de potências, calcule o erro verdadeiro e forneça uma estimativa desse erro (por exemplo, pelo resto de Lagrange), para dois valores distintos de x, e plote, em cada caso, as curvas de erro verdadeiro e erro estimado no mesmo gráfico.
Passo 2
Escolhemos como exemplo a função exponencial
f(x)=e^x
cuja expansão em série de potências em torno de 0 é
e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!}\,.
O resto de Lagrange após N termos satisfaz
R_N(x)\le \frac{|x|^{N+1}}{(N+1)!}\,e^{|x|}\,,
que usamos como estimativa de erro.
Passo 3
Definimos duas rotinas em Python:
partial_sum(x,N): calcula a soma parcial \displaystyle S_N(x)=\sum_{n=0}^{N}\frac{x^n}{n!}.
Em seguida, para cada x escolhido, computamos para N=0,1,2,\dots,N_{\max}:
Erro verdadeiro: \bigl|S_N(x)-e^x\bigr|.
Erro estimado: B_N(x).
Passo 4
Implemente o seguinte script em Python (usando numpy, math e matplotlib):
import numpy as np
import math
import matplotlib.pyplot as plt
def \(partial_sum\)(x, N):
s \(=0.0\)
for n inrange(N\(+1\)):
s \(+=\) x**n / math.factorial(n)
return s
def \(remainder_estimate\)(x, N):
returnabs(x)**(N\(+1\))/math.factorial(N\(+1\))*math.exp(abs(x))
# Valores de x para testar
\(x_values\) = [1.0, 3.0]
\[N_max =20\]
for x in \(x_values\):
Ns = np.arange(0, \(N_max +1\))
\(true_errors\) = [abs(\(partial_sum\)(x, N) - math.exp(x)) for N in Ns]
\(est_errors\) = [\(remainder_estimate\)(x, N) for N in Ns]
plt.figure()
plt.semilogy(Ns, \(true_errors\), 'o-', label='Erro verdadeiro')
plt.semilogy(Ns, \(est_errors\), 's--', label='Estimativa de erro')
plt.title(f'Erro em aproximação de \(e^x\) para \(x={x}\)')
plt.xlabel('\(N\) (número de termos)')
plt.ylabel('Erro (escala log)')
plt.legend()
plt.grid(True)
plt.show()
Resposta
O código acima implementa a soma parcial da série de e^x, calcula o erro verdadeiro e a estimativa de erro pelo resto de Lagrange, e gera dois gráficos (um para cada x escolhido) exibindo, em escala logarítmica, as curvas de erro verdadeiro e de erro estimado no mesmo plot.