A expansāo em série de Taylor da funçāo
é representada pela Equação 11.10. Desenvolva um programa em Python para calcular a aproximação de
com base nessa série, interrompendo as iteraçōes quando for atingido um erro absoluto mínimo pré-definido. Para melhor visualizaçāo do desempenho da aproximaçāo, gere um gráfico que mostre a evolugäo do erro absoluto a cada iteração.
Passo 1
O enunciado pede um programa em Python que use a expansão em série de Taylor
para aproximar
, interrompendo as iterações quando o erro absoluto entre a soma parcial e o valor exato (obtido por
math.exp(x)
) ficar abaixo de uma tolerância fornecida. Além disso, precisamos gerar um gráfico mostrando a evolução desse erro a cada iteração.Passo 2
Para implementar isso, vamos:
- Ler do usuário o valor de
e a tolerância . - Inicializar a soma parcial
(correspondente a ) e o primeiro termo . - Calcular o erro absoluto inicial
usando math.exp(x)
. - Iterar para
atualizando
até que
.
5. Em cada iteração, armazenar o erro em uma lista para depois plotar.
5. Em cada iteração, armazenar o erro em uma lista para depois plotar.
Passo 3
Depois de obter a lista é o número da iteração e o eixo
é o erro absoluto. Podemos usar escala semilogarítmica em
para ver melhor a queda do erro.
errors
com o erro absoluto em cada iteração, vamos usar Matplotlib para gerar um gráfico onde o eixo
Resposta
import math
import matplotlib.pyplot as plt
def \(approx_exp\)(x, tol):
term \(=1.0\) # T\(0= x^0\) / 0! \(=1\)
S = term # soma parcial S\(0=1\)
errors = [abs(math.exp(x) - S)]
n \(=1\)
# itera até o erro ficar abaixo de tol
while errors[-1] > tol:
term *= x / n # Tn = \(T_{n-1}\) * x/n
S \(+=\) term # \(S_n\) = \(S_{n-1}\) + \(T_n\)
errors.append(abs(math.exp(x) - S))
n \(+=1\)
return S, errors
def main():
x = float(input("Digite o valor de x: "))
tol = float(input("Digite a tolerância: "))
S, errors = \(approx_exp\)(x, tol)
print(f"Aproximação de e^{x} = {S:.12f}")
print(f"Número de termos usados = {len(errors)}")
# plot do erro em escala logarítmica vertical
plt.semilogy(range(len(errors)), errors, marker='o')
plt.xlabel("Iteração")
plt.ylabel("Erro absoluto")
plt.title(f"Convergência da série de Taylor para e^{x}")
plt.grid(True, which="both", ls="--")
plt.show()
if __name__ \(==\) "__main__":
main()