A série de Taylor (ou Maclaurin) para \ln (1+x), válida para |x|<1, é apresentada na Equação 11.18. Escreva um programa em Python que utilize essa série para aproximar o valor de \ln (1+x) para um dado valor de x, calculando o erro absoluto em cada iteração e exibindo esses erros em um gráfico.
válida para |x|<1. Precisamos implementar em Python a soma parcial até um número máximo de termos, calcular o erro absoluto a cada iteração comparando com o valor exato obtido por math.log(1+x) e, por fim, exibir esses erros num gráfico.
Passo 2
Para cada N de 1 até N_{\max}, definimos a soma parcial
S_N = \sum_{n=1}^{N}(-1)^{n+1}\frac{x^n}{n}
e o erro absoluto
\text{erro}_N = \bigl|\ln(1+x) - S_N\bigr|.
Vamos armazenar \text{erro}_N em uma lista para depois plotar \text{erro}_N versus N.
Passo 3
Em Python, usaremos um laço for n in range(1, N_max+1) para acumular termo a termo na variável soma. A cada iteração calculamos
termo = (-1)**(n\(+1\)) * x**n / n
soma \(+=\) termo
erro = abs(math.log(\(1+\)x) - soma)
e guardamos erro em uma lista.
Passo 4
Para plotar, usaremos matplotlib.pyplot. O eixo horizontal será o índice do termo N e o eixo vertical será o erro absoluto correspondente. Bastam chamadas a plt.plot, plt.yscale('log') (opcional para visualizar melhor) e plt.show().
Resposta
import math
import matplotlib.pyplot as plt
def \(aproximar_ln1p\)(x, \(N_max\)):
"""
Aproxima ln(\(1+\)x) pela série de Maclaurin até \(N_max\) termos.
Retorna listas de N (1..\(N_max\)), \(soma_parcial\) e \(erro_absoluto\).
"""
soma \(=0.0\)
erros = []
termos = []
for n inrange(1, \(N_max +1\)):
termo = (-1)**(n\(+1\)) * x**n / n
soma \(+=\) termo
erro = abs(math.log(\(1+\) x) - soma)
termos.append(n)
erros.append(erro)
return termos, erros
def \(plotar_erros\)(x, \(N_max =50\)):
termos, erros = \(aproximar_ln1p\)(x, \(N_max\))
plt.figure(figsize=(8, 5))
plt.plot(termos, erros, marker='o', linestyle='-')
plt.yscale('log') # escala log para ver melhor o decaimento do erro
plt.title(f"Erro absoluto na aproximação de ln(1+{x}) por série de Taylor")
plt.xlabel("Número de termos N")
plt.ylabel("Erro absoluto")
plt.grid(True, which='both', ls='--')
plt.show()
if __name__ \(==\) "__main__":
x \(=0.5\) # escolha um valor de x em (-1,1)
\(N_max =50\) # número máximo de termos
\(plotar_erros\)(x, \(N_max\))