Escrever um programa no MatLab com o objetivo de calcular aproximações de uma função f(x, y), usando o polinômio de Taylor para f(x, y) na origem.
O valor de x e y e o número de termos do polinômio de Taylor, n, são dados de entrada.
Analisar os resultados obtidos pelos
  • Erro absoluto
  • Erro relativo
  • Fazer reflexões
A partir de qual n o erro é tão pequeno que não compensa aumentar seu valor?
O projeto deve ser feito em grupo de no máximo 5 alunos, cada função só pode ser implementada por um grupo.
Data da entrega até dia 21/08/2025 até às 18:00, pelo drive:
https://drive.google.com/drive/folders/lrBwu02ViFBbwi7BIEeD2iNoHhPwt107C?usp=sharing
Funções:
f(x, y)=e^{x} \cos (y)

Passo 1

O enunciado pede um programa em MATLAB que, para dados de entrada x, y e um número de termos n, construa o polinômio de Taylor de ordem n em torno da origem para
f(x,y)=e^x\cos(y),
calcule a aproximação, depois o erro absoluto e o erro relativo em relação ao valor exato e^x\cos(y), e finalmente determine empiricamente a partir de qual n o erro para valores típicos de x,y já está tão pequeno que não compensa aumentar n. Vamos precisar da expansão em série de Taylor de e^x e de \cos(y) e de um laço ou somatório em MATLAB.

Passo 2

Derivamos as séries de Taylor centradas em zero:
e^x=\sum_{i=0}^{\infty}\frac{x^i}{i!}, \qquad \cos(y)=\sum_{m=0}^{\infty}(-1)^m\frac{y^{2m}}{(2m)!}.
Para truncar cada série em n termos, definimos
S_1(n)=\sum_{i=0}^{n}\frac{x^i}{i!}, \quad S_2(n)=\sum_{m=0}^{n}(-1)^m\frac{y^{2m}}{(2m)!},
e então tomamos como aproximação
P_n(x,y)=S_1(n)\times S_2(n).

Passo 3

Esboço de implementação em MATLAB (num arquivo taylor2d.m):
function [aprox, \(err_abs\), \(err_rel\)] = taylor2d(x,y,n)
 % calcula S\(1=\) soma de \(e^x\) até ordem n
 S\(1=0\);
 for i \(=0\):n
 S\(1=\) S\(1+ x^i\)/factorial(i);
 end
 % calcula S\(2=\) soma de cos(y) até ordem n
 S\(2=0\);
 for m \(=0\):n
 S\(2=\) S\(2+\) (-1)^m * y^(2*m) / factorial(2*m);
 end
 % aproximação do produto
 aprox = S1 * S2;
 % valor exato
 fex = exp(x)*cos(y);
 % erros
 \(err_abs\) = abs(fex - aprox);
 \(err_rel\) = \(err_abs\) / abs(fex);
end

Passo 4

Para testar variações de n e descobrir quando o erro estaciona, escreva um script testa_taylor.m:
x \(=1.0\); y \(=0.5\); % exemplos de ponto
maxn \(=30\); % até onde vamos testar
erros = zeros(maxn\(+1,2\));
for n \(=0\):maxn
 [~, ea, er] = taylor2d(x,y,n);
 erros(n\(+1\),:) = [ea, er];
end
% plote erros em função de n
semilogy(0:maxn, erros(:,1),'o-', 0:maxn, erros(:,2),'x-');
legend('Erro absoluto','Erro relativo');
xlabel('n'); ylabel('erro');
grid on;
Com esse gráfico fica fácil ver como o erro decai conforme n cresce.

Passo 5

Ao observar o semilogy dos erros, você verá que:
  • Para n\lesssim 5, o erro cai rapidamente à medida que n aumenta.
  • A partir de n\approx10, o erro absoluto já fica em torno de 10^{-8} a 10^{-10} (para (x,y)=(1,0,5)).
  • Depois de n\approx15, o erro atinge o patamar da precisão de máquina \sim10^{-15} e praticamente não diminui mais.
Logo, para valores típicos de x,y na ordem de 1, não compensa usar n>15, pois estamos no limite da precisão numérica de MATLAB.

Resposta

Para x e y de ordem unitária, o erro atinge a precisão de máquina por volta de n=15, de modo que não vale a pena aumentar n além disso.

Exercícios relacionados