Escrever um programa no MatLab com o objetivo de calcular aproximações de uma função
, usando o polinômio de Taylor para
na origem.
O valor de
e
e o número de termos do polinômio de Taylor,
, são dados de entrada.
Analisar os resultados obtidos pelos
- Erro absoluto
- Erro relativo
- Fazer reflexões
A partir de qual
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:
https://drive.google.com/drive/folders/lrBwu02ViFBbwi7BIEeD2iNoHhPwt107C?usp=sharing
Passo 1
O enunciado pede um programa em MATLAB que, para dados de entrada
,
e um número de termos
, construa o polinômio de Taylor de ordem
em torno da origem para
calcule a aproximação, depois o erro absoluto e o erro relativo em relação ao valor exato
, e finalmente determine empiricamente a partir de qual
o erro para valores típicos de
já está tão pequeno que não compensa aumentar
. Vamos precisar da expansão em série de Taylor de
e de
e de um laço ou somatório em MATLAB.
Passo 2
Derivamos as séries de Taylor centradas em zero:
Para truncar cada série em
termos, definimos
e então tomamos como aproximação
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
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
cresce.
Passo 5
Ao observar o semilogy dos erros, você verá que:
- Para
, o erro cai rapidamente à medida que aumenta. - A partir de
, o erro absoluto já fica em torno de a (para ). - Depois de
, o erro atinge o patamar da precisão de máquina e praticamente não diminui mais.
Logo, para valores típicos de
na ordem de
, não compensa usar
, pois estamos no limite da precisão numérica de MATLAB.
Resposta
Para
e
de ordem unitária, o erro atinge a precisão de máquina por volta de
, de modo que não vale a pena aumentar
além disso.