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)=\sin (x) \cos (y)
Passo 1
Resumindo: queremos aproximar a função
f(x,y)=\sin(x)\,\cos(y)
ao redor da origem usando o polinômio de Taylor de ordem máxima n. As entradas do programa serão os valores de x, y e o grau n. Vamos precisar da expansão em série de Taylor para funções de duas variáveis, que se escreve
Algoritmo para montar a aproximação de Taylor de grau n:
Recebe x, y, n.
Inicializa S=0.
Para i=0 até n
para j=0 até n
se \,i ímpar e j par então
calcula sinals = (-1)^{\frac{i-1}{2} + \frac{j}{2}}e acumulaS \;\mathrel{+}= \;s\;\frac{x^i}{i!}\;\frac{y^j}{j!}.
function[S, ea, er] = taylor2D_sincos(x,y,n)% Aproxima sin(x)*cos(y) pela série de Taylor em (0,0) até grau n
S = 0;
fori = 0:n
forj = 0:n
ifmod(i,2)==1 && mod(j,2)==0
k = (i-1)/2;
m = j/2;
s = (-1)^(k+m);
S = S + s*(x^i)/factorial(i)*(y^j)/factorial(j);
endendend
fex = sin(x)*cos(y);
ea = abs(S - fex);
if fex~=0
er = ea/abs(fex);
else
er = NaN;
endend
Passo 5
Para analisar automaticamente até qual n vale a pena:
Escolher um par (x,y) de teste.
Para n=1 até N_{\max} (por ex. 20) chamar
[S, ea(n), er(n)] = taylor2D_sincos(x,y,n);
Traçar \log_{10}(ea) e \log_{10}(er) em função de n.
Identificar o ponto em que as curvas estagnam perto da precisão de máquina (\approx10^{-16}).
Passo 6
Reflexão:
A cada aumento de n, o erro decresce cerca de uma ordem de grandeza enquanto o termo de Taylor dominante for maior que o ruído numérico.
Para valores moderados de x,y (digamos \lvert x\rvert,\lvert y\rvert\le1), verifica-se que já em torno de n=8 ou n=10 o erro absoluto atinge a casa de 10^{-14}–10^{-16}, próximo da precisão dupla.
Aumentar n além disso só acrescenta custo computacional e piora o condicionamento (por cancelamentos), sem ganho prático.
Resposta
A implementação em MATLAB está acima. Em experimentos típicos com \lvert x\rvert,\lvert y\rvert\le1, basta escolher n\approx8–10 para que o erro absoluto fique na ordem da precisão de máquina, de modo que aumentar n não compensa.