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:
  1. partial_sum(x,N): calcula a soma parcial
    \displaystyle S_N(x)=\sum_{n=0}^{N}\frac{x^n}{n!}.
  2. remainder_estimate(x,N): retorna
    \displaystyle B_N(x)=\frac{|x|^{N+1}}{(N+1)!}\,e^{|x|}.
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 in range(N\(+1\)):
 s \(+=\) x**n / math.factorial(n)
 return s

def \(remainder_estimate\)(x, N):
 return abs(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.

Exercícios relacionados