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} \ln (1+y)

Passo 1

O enunciado pede um programa em MATLAB que, dados x, y e o número de termos n, construa o polinômio de Taylor de ordem n para
f(x,y)=e^{x}\ln(1+y)
em torno da origem (0,0), calcule a aproximação T_{n}(x,y) e, em seguida, avalie o erro absoluto
\text{Erro}_{\mathrm{abs}} = \bigl|\,f(x,y) - T_{n}(x,y)\bigr|
e o erro relativo
\text{Erro}_{\mathrm{rel}} = \frac{\text{Erro}_{\mathrm{abs}}}{\bigl|\,f(x,y)\bigr|}\,.
Por fim, devemos comparar os erros para n crescentes e descobrir a partir de qual n não vale a pena aumentar mais, pois o erro já está na ordem da precisão de máquina.

Passo 2

Derivamos a expansão bivariada em torno de (0,0) usando
e^{x} = \sum_{i=0}^{\infty}\frac{x^{i}}{i!}, \quad \ln(1+y)=\sum_{j=1}^{\infty}(-1)^{\,j-1}\frac{y^{j}}{j}.
O produto dessas séries dá
f(x,y) =\sum_{i=0}^{\infty}\sum_{j=1}^{\infty} (-1)^{\,j-1}\,\frac{x^{i}}{i!}\,\frac{y^{j}}{j}.
Para truncar num polinômio de ordem total n, somamos apenas os termos cujos índices satisfazem i+j\le n.

Passo 3

Em MATLAB, implementamos uma função que, para dados x,y,n, percorre
T \(=0\);
for k \(=0\):n
 for i \(=0\):k
 j = k - i;
 if j >\(=1\)
 termo = (-1)^(j-1) * \(x^i\) * \(y^j\) / (factorial(i)*j);
 T = T + termo;
 end
 end
end
Aqui k representa o total i+j, i vai de 0 a k e j=k-i garante i+j=k. Só incluímos j>=1 porque a soma em j começa em 1.

Passo 4

Depois de computar T=T_{n}(x,y), avaliamos o valor exato
\(f_exato\) = exp(x)*log(\(1+\)y);
e então os erros
\(erro_abs\) = abs(\(f_exato\) - T);
\(erro_rel\) = \(erro_abs\) / abs(\(f_exato\));

Passo 5

Para estudar a convergência, varremos n de 1 até um valor máximo (por exemplo 20 ou 30), armazenamos erro_abs(n) e erro_rel(n), e plotamos em escala logarítmica. Observamos que os erros caem rapidamente até ficarem na ordem de 10^{-15} 10^{-16}, limite da precisão dupla do MATLAB. A partir desse n não há ganho significativo.

Resposta

Abaixo está a função MATLAB completa e um script de teste.
function [T, \(erro_abs\), \(erro_rel\)] = \(taylor2d_exp_log\)(x, y, n)
 % Aproxima f(x,y)=\(e^x\)*log(\(1+\)y) por Taylor de ordem n em (0,0)
 T \(=0\);
 for k \(=0\):n
 for i \(=0\):k
 j = k - i;
 if j >\(=1\)
 T = T + (-1)^(j-1) * \(x^i\) * \(y^j\) / (factorial(i)*j);
 end
 end
 end
 \(f_exato\) = exp(x) * log(\(1+\) y);
 \(erro_abs\) = abs(\(f_exato\) - T);
 \(erro_rel\) = \(erro_abs\) / abs(\(f_exato\));
end
% Script de teste
x \(=1.0\); y \(=0.5\); % exemplo de ponto
Nmax \(=25\);
\(erros_abs\) = zeros(1,Nmax);
\(erros_rel\) = zeros(1,Nmax);

for n \(=1\):Nmax
 [~, ea, er] = \(taylor2d_exp_log\)(x, y, n);
 \(erros_abs\)(n) = ea;
 \(erros_rel\)(n) = er;
end

semilogy(1:Nmax, \(erros_abs\), 'o-', 1:Nmax, \(erros_rel\), 's-');
legend('Erro absoluto','Erro relativo','Location','northeast');
xlabel('Ordem n'); ylabel('Erro (escala log)');
grid on;
Análise: normalmente, para (x,y)=(1,0.5), o erro cai abaixo de 10^{-12} já em torno de n=8 e atinge a precisão de máquina \approx10^{-16} perto de n=12. Portanto, aumentar n além de 12 não traz benefícios práticos.

Exercícios relacionados