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
f(x,y)\approx\sum_{i=0}^{n}\sum_{j=0}^{n}\frac{1}{i!\,j!}\,\frac{\partial^{\,i+j}f}{\partial x^i\partial y^j}(0,0)\;x^i\,y^j,
e depois comparar com o valor exato para calcular erro absoluto e erro relativo.

Passo 2

Observe que f(x,y)=g(x)\,h(y) com g(x)=\sin(x) e h(y)=\cos(y). Assim
\frac{\partial^{\,i+j}f}{\partial x^i\partial y^j}(0,0) =g^{(i)}(0)\;h^{(j)}(0).
Dos ciclos de derivadas de \sin e \cos segue-se:
  • g^{(i)}(0)=0 se i é par, e g^{(4k+1)}(0)=1,\;g^{(4k+3)}(0)=-1.
  • h^{(j)}(0)=0 se j é ímpar, e h^{(2m)}(0)=(-1)^m.
    Logo o termo não nulo ocorre apenas quando i é ímpar e j é par, e
\frac{\partial^{\,i+j}f}{\partial x^i\partial y^j}(0,0) =\begin{cases} (-1)^{k+m},&i=2k+1,\;j=2m,\\\\ 0,&\text{caso contrário.} \end{cases}á

Passo 3

Algoritmo para montar a aproximação de Taylor de grau n:
  1. Recebe x, y, n.
  2. Inicializa S=0.
  3. Para i=0 até n
    para j=0 até n
    se \,i ímpar e j par então
    calcula sinal s = (-1)^{\frac{i-1}{2} + \frac{j}{2}}e acumula S \;\mathrel{+}= \;s\;\frac{x^i}{i!}\;\frac{y^j}{j!}.
  4. Fim dos dois laços.
  5. A aproximação é \displaystyle S.
Depois computamos
\text{erro absoluto} = \bigl|\,S - f(x,y)\bigr|, \quad \text{erro relativo} = \frac{\bigl|\,S - f(x,y)\bigr|}{\bigl|f(x,y)\bigr|}.

Passo 4

Implementação em MATLAB:
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;
  for i = 0:n
    for j = 0:n
      if mod(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);
      end
    end
  end
  fex = sin(x)*cos(y);
  ea  = abs(S - fex);
  if fex~=0
    er = ea/abs(fex);
  else
    er = NaN;
  end
end

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.

Exercícios relacionados