Como visto na questão 6, uma função senoidal pode ser calculada por meio de uma série infinita. Escreva um programa em Scilab, Octave ou Python que implementa a fórmula da questão 10, de modo que ela calcule e imprima os valores de
à medida que cada termo da série é adicionado. Em outras palavras, calcule e imprima em sequência os valores para
até o termo de ordem n de sua escolha. Para cada um dos resultados anteriores, calcule e exiba o erro relativo percentual como
Passo 1
O enunciado pede que a gente escreva um programa (em Python, Octave ou Scilab) que aproxime
usando a série de Taylor e, a cada termo adicionado, imprima o valor parcial da soma e o erro relativo percentual em relação ao valor exato de
.
Passo 2
O conteúdo é a série de Taylor para função cosseno em torno de zero:
Para truncar até a ordem
, somamos os termos de
a
.
Passo 3
Para não recalcular fatoriais a cada iteração, usamos a relação de recorrência entre termos consecutivos:
Então mantemos uma variável e uma variável
termo
que é
aprox
que acumula a soma dos termos.Passo 4
O erro relativo percentual é dado por
onde usamos
math.cos(x)
como valor “exato” de referência. Se math.cos(x)
for zero, marcamos o erro como indefinido.Passo 5
Abaixo está um exemplo de implementação em Python. Ele lê do usuário o valor de
(em radianos) e o número de termos
, e imprime a aproximação e o erro a cada iteração.
import math
def cos_series(x, n):
"""
Aproxima \(\cos(x)\) até o termo de ordem \(2n\) da série de Taylor.
Em cada passo, imprime a soma parcial e o erro relativo percentual.
"""
aprox = 0.0
termo = 1.0 # t_0 = 1
cos_exato = math.cos(x)
for k in range(0, n+1):
if k == 0:
termo = 1.0
else:
# relação de recorrência: \(t_k = t_{k-1} \cdot (-1) \cdot \frac{x^2}{(2k-1)(2k)}\)
termo *= -1.0 * x * x / ((2 * k - 1) * (2 * k))
aprox += termo
if cos_exato != 0.0:
erro = (cos_exato - aprox) / cos_exato * 100.0
else:
erro = float('nan')
print(f"k={k:2d} | aprox = {aprox:.12f} | erro relativo = {erro:.6f}%")
if __name__ == "__main__":
# Leitura de dados
x = float(input("Digite o valor de x (radianos): "))
n = int(input("Digite o número de termos n: "))
print("\nCalculando série de Taylor para cos(x):\n")
cos_series(x, n)
Resposta
O programa acima implementa a fórmula pedida, imprimindo a cada termo da série de Taylor o valor parcial de
e o erro relativo percentual.