Escolar Documentos
Profissional Documentos
Cultura Documentos
Bibliografia
Eteven C. Chapra
Applied Numerical Methods with Matlab for Engineers and Scientists – 3rd Edition
McGraw-Hill, 2012
Objetivos
Para mostrar como usar a série de Taylor para determinar o erro de truncamento na diferenciação numérica
por meio de métodos iterativos, considere novamente o problema do bungee jumper e vamos expandir a velocidade
por meio da série de Taylor.
𝑣𝑣 ′ (𝑡𝑡𝑖𝑖 ) 𝑣𝑣 ′′ (𝑡𝑡𝑖𝑖 )
𝑣𝑣(𝑡𝑡𝑖𝑖+1 ) = 𝑣𝑣(𝑡𝑡𝑖𝑖 ) + (𝑡𝑡𝑖𝑖+1 − 𝑡𝑡𝑖𝑖 )1 + (𝑡𝑡𝑖𝑖+1 − 𝑡𝑡𝑖𝑖 )2 + ⋯ + 𝑅𝑅𝑛𝑛
1! 2!
𝑣𝑣 ′ (𝑡𝑡𝑖𝑖 )
𝑣𝑣(𝑡𝑡𝑖𝑖+1 ) = 𝑣𝑣(𝑡𝑡𝑖𝑖 ) + (𝑡𝑡𝑖𝑖+1 − 𝑡𝑡𝑖𝑖 )1 + 𝑅𝑅1
1!
A primeira parte (azul) é exatamente a mesma relação que foi usada no método de Euler para aproximar a
derivada. No entanto, devido à abordagem da série Taylor, obtivemos agora uma estimativa do erro de truncamento
(amarelo) associado a essa aproximação da derivada. O erro pode ser calculado, sabendo-se que
𝑣𝑣 ′′ (𝜉𝜉)
𝑅𝑅1 = (𝑡𝑡𝑖𝑖+1 − 𝑡𝑡𝑖𝑖 )2
2!
Logo, a estimativa da derivada (azul) tem um erro de truncamento da ordem (𝑡𝑡𝑖𝑖+1 − 𝑡𝑡𝑖𝑖 ). Em outras palavras,
o erro da aproximação derivada é proporcional ao tamanho do passo ℎ. Consequentemente, se reduzirmos pela
metade o tamanho do passo, reduz-se pela metade o erro da derivada.
𝑅𝑅1
= 𝑂𝑂(𝑡𝑡𝑖𝑖+1 − 𝑡𝑡𝑖𝑖 )
𝑡𝑡𝑖𝑖+1 − 𝑡𝑡𝑖𝑖
Diferenciação Numérica
A equação
𝑣𝑣(𝑡𝑡𝑖𝑖+1 ) − 𝑣𝑣(𝑡𝑡𝑖𝑖 ) 𝑅𝑅1
𝑣𝑣 ′ (𝑡𝑡𝑖𝑖 ) = −
𝑡𝑡𝑖𝑖+1 − 𝑡𝑡𝑖𝑖 𝑡𝑡𝑖𝑖+1 − 𝑡𝑡𝑖𝑖
Pode ser escrita de forma mais geral para a derivada 𝑓𝑓 ′ (𝑥𝑥𝑖𝑖 ) de uma função 𝑓𝑓(𝑥𝑥𝑖𝑖 )
em que ℎ é o tamanho do passo e essa expressão é denominada Forward Difference, pois utiliza dados em (𝑖𝑖 + 1)
para estimar a derivada em (𝑖𝑖).
Essa Forward Difference é apenas uma das muitas que podem ser desenvolvidas a partir da série Taylor para
aproximar derivadas numericamente. Por exemplo, aproximações Backward Difference e Centered Difference podem
ser desenvolvidas de maneira semelhante. Aproximações mais precisas da primeira derivada podem ser desenvolvidas
incluindo termos de ordem superior da série Taylor. Finalmente, essas versões também podem ser desenvolvidas para
derivadas de ordens superiores.
No caso da aproximação Backward Difference a série de Taylor é usada para prever o valor um passo atrás
𝑓𝑓 ′′ (𝑥𝑥𝑖𝑖 ) 𝑓𝑓 (3)(𝑥𝑥𝑖𝑖 )
𝑓𝑓(𝑥𝑥𝑖𝑖−1 ) = 𝑓𝑓(𝑥𝑥𝑖𝑖 ) + 𝑓𝑓 ′ (𝑥𝑥𝑖𝑖 )(𝑥𝑥𝑖𝑖−1 − 𝑥𝑥𝑖𝑖 )1 + (𝑥𝑥𝑖𝑖−1 − 𝑥𝑥𝑖𝑖 )2 + (𝑥𝑥𝑖𝑖−1 − 𝑥𝑥𝑖𝑖 )3 + ⋯
2! 3!
Na definição usada, ℎ = (𝑥𝑥𝑖𝑖+1 − 𝑥𝑥𝑖𝑖 ) que para esse caso resulta ℎ = (𝑥𝑥𝑖𝑖 − 𝑥𝑥𝑖𝑖−1 )
𝑓𝑓 ′′ (𝑥𝑥𝑖𝑖 ) 𝑓𝑓 (3)(𝑥𝑥𝑖𝑖 )
𝑓𝑓(𝑥𝑥𝑖𝑖−1 ) = 𝑓𝑓(𝑥𝑥𝑖𝑖 ) − 𝑓𝑓 ′ (𝑥𝑥𝑖𝑖 )(𝑥𝑥𝑖𝑖 − 𝑥𝑥𝑖𝑖−1 )1 + (𝑥𝑥𝑖𝑖 − 𝑥𝑥𝑖𝑖−1 )2 − (𝑥𝑥𝑖𝑖 − 𝑥𝑥𝑖𝑖−1 )3 + ⋯
2! 3!
𝑓𝑓 ′′ (𝑥𝑥𝑖𝑖 ) 𝑓𝑓 (3) (𝑥𝑥𝑖𝑖 )
𝑓𝑓(𝑥𝑥𝑖𝑖−1 ) = 𝑓𝑓(𝑥𝑥𝑖𝑖 ) − 𝑓𝑓 ′ (𝑥𝑥𝑖𝑖 )(ℎ)1 + (ℎ)2 − (ℎ)3 + ⋯
2! 3!
𝑓𝑓 (𝑥𝑥𝑖𝑖 ) − 𝑓𝑓 (𝑥𝑥𝑖𝑖−1 )
𝑓𝑓 ′(𝑥𝑥𝑖𝑖 ) ≅
ℎ
𝑓𝑓′′ (𝜉𝜉)
𝑓𝑓(𝑥𝑥𝑖𝑖−1 ) = 𝑓𝑓(𝑥𝑥𝑖𝑖 ) − 𝑓𝑓 ′ (𝑥𝑥𝑖𝑖 )(ℎ)1 + 𝑅𝑅1 para 𝑅𝑅1 = (ℎ)2
2!
E o erro de truncamento da Backward Difference é da ordem 𝑂𝑂(ℎ), mesma magnitude que a Forward Difference
No caso da aproximação Centered Difference, a série de Taylor de 𝑓𝑓(𝑥𝑥𝑖𝑖+1 ) e de 𝑓𝑓(𝑥𝑥𝑖𝑖−1 ) são subtraídas para
serem combinadas
𝑓𝑓 ′′ (𝑥𝑥𝑖𝑖 ) 𝑓𝑓 (3) (𝑥𝑥𝑖𝑖 )
𝑓𝑓(𝑥𝑥𝑖𝑖+1 ) = 𝑓𝑓(𝑥𝑥𝑖𝑖 ) + 𝑓𝑓 ′ (𝑥𝑥𝑖𝑖 )(ℎ)1 + (ℎ)2 + (ℎ)3 + ⋯
2! 3!
𝑓𝑓 ′′ (𝑥𝑥𝑖𝑖 ) 𝑓𝑓 (3) (𝑥𝑥𝑖𝑖 )
𝑓𝑓(𝑥𝑥𝑖𝑖−1 ) = 𝑓𝑓(𝑥𝑥𝑖𝑖 ) − 𝑓𝑓 ′ (𝑥𝑥𝑖𝑖 )(ℎ)1 + (ℎ)2 − (ℎ)3 + ⋯
2! 3!
resultando
𝑓𝑓 (3) (𝑥𝑥𝑖𝑖 ) 𝑓𝑓 (5) (𝑥𝑥𝑖𝑖 )
𝑓𝑓(𝑥𝑥𝑖𝑖+1 ) = 𝑓𝑓(𝑥𝑥𝑖𝑖−1 ) + 2𝑓𝑓 ′ (𝑥𝑥𝑖𝑖 )(ℎ)1 + 2 (ℎ)3 + 2 (ℎ)5 ⋯
3! 5!
Isolando 𝑓𝑓 ′ (𝑥𝑥𝑖𝑖 ), obtém-se
ou
𝑓𝑓(𝑥𝑥𝑖𝑖+1 ) − 𝑓𝑓(𝑥𝑥𝑖𝑖−1 )
𝑓𝑓 ′ (𝑥𝑥𝑖𝑖 ) = − 𝑂𝑂(ℎ2 )
2ℎ
Essa equação é uma representação de diferenças finitas centrais da primeira derivada. Observe que o erro de
truncamento é da ordem de ℎ2 , em contraste com as aproximações para frente e para trás que eram da ordem de ℎ1 .
Consequentemente, a análise das séries de Taylor fornece as informações práticas de que a diferença central é uma
representação mais exata da derivada. Por exemplo, se reduzirmos pela metade o tamanho do passo usando uma
diferença para a frente ou para trás, reduziremos pela metade o erro de truncamento, enquanto que, para a diferença
central, o erro será reduzido em quatro vezes.
Além da primeira derivada, a expansão da série Taylor pode ser usada para calcular estimativas numéricas de
derivadas de ordem superior. Para determinar, por exemplo, a aproximação Forward Difference da derivada segunda,
escrevemos uma expansão da série de Taylor para a frente de 𝑓𝑓(𝑥𝑥𝑖𝑖+2 ) e de 𝑓𝑓(𝑥𝑥𝑖𝑖+1 ) em termos de 𝑓𝑓(𝑥𝑥𝑖𝑖 )
𝑓𝑓 ′′ (𝑥𝑥𝑖𝑖 )
𝑓𝑓(𝑥𝑥𝑖𝑖+2 ) = 𝑓𝑓(𝑥𝑥𝑖𝑖 ) + 𝑓𝑓 ′ (𝑥𝑥𝑖𝑖 )(2ℎ)1 + (2ℎ)2 + ⋯
2!
Retomando a expansão
𝑓𝑓 ′′ (𝑥𝑥𝑖𝑖 )
𝑓𝑓(𝑥𝑥𝑖𝑖+1 ) = 𝑓𝑓(𝑥𝑥𝑖𝑖 ) + 𝑓𝑓 ′ (𝑥𝑥𝑖𝑖 )(ℎ)1 + (ℎ)2 + ⋯
2!
e isolando 𝑓𝑓 ′′ (𝑥𝑥𝑖𝑖 )
ou seja, a estimativa central da derivada 2ª é obtida por meio das estimativas para frente e para trás da 1ª derivada,
como a derivada das derivadas.
O erro numérico total é a soma dos erros de truncamento e arredondamento. Em geral, a única maneira de
minimizar os erros de arredondamento é aumentar o número de algarismos significativos do computador. Por outro
lado mostrou-se que o erro de truncamento pode ser reduzido diminuindo o tamanho do passo. Uma diminuição no
tamanho do passo pode levar a problemas de arredondamento enquanto que os erros de truncamento diminuem.
O desafio é determinar o tamanho apropriado do passo para um cálculo específico. Deveríamos escolher um
tamanho de passo “grande” o suficiente para diminuir a quantidade de cálculos por causa dos erros de
arredondamento, mas sem incorrer em um grande erro de truncamento.
Ao usar o MATLAB, os erros de arredondamento são relativamente incomuns por causa da precisão de 15 a
16 dígitos, mas vamos analisar como fica o erro total quando calculamos a diferenciação numérica por meio de
diferenças finitas central. Considere então novamente a expansão por série de Taylor obtida para a primeira derivada
Em verde temos o valor exato da primeira derivada. Em azul temos a aproximação da primeira derivada por
por meio de diferenças finitas. Em amarelo aparece o erro de truncamento. Ou seja, nesta expressão não aparece o
erro de arredondamento. Contudo, os computadores sempre incluem erros de arredondamento e podemos escrever
então
𝑓𝑓 (𝑥𝑥𝑖𝑖−1 ) = 𝑓𝑓̃(𝑥𝑥𝑖𝑖−1 ) + 𝑒𝑒𝑖𝑖−1
𝑓𝑓 (𝑥𝑥𝑖𝑖+1 ) = 𝑓𝑓̃(𝑥𝑥𝑖𝑖+1 ) + 𝑒𝑒𝑖𝑖+1
Em que 𝑒𝑒𝑖𝑖−1 e 𝑒𝑒𝑖𝑖+1 são os erros de arredondamento associados. Substituindo na expansão por série de Taylor obtida
para a primeira derivada, resulta
Diferenciando a equação anterior em relação a ℎ e igualando a zero, obtém-se seu valor ótimo
syms ub(h) E M
ub(h) = h^2*M/6 + E/h
diff( ub(h) )
respt = solve( diff(ub(h)) == 0, h )
3 3𝜀𝜀
ℎ𝑜𝑜𝑜𝑜𝑜𝑜 = �
𝑀𝑀
Exemplo. Retome a aproximação da primeira derivada 𝑓𝑓 ′ (𝑥𝑥) da função 𝑓𝑓(𝑥𝑥) por meio da aproximação central e calcule
𝑓𝑓 ′ (𝑥𝑥 = 0,5) com o auxílio do MATLAB. Comece usando um passo ℎ = 1 e vá dividindo esse passo por 10 e avalie o
erro total. Como a função 𝑓𝑓(𝑥𝑥) é um polinômio, sua derivada 𝑓𝑓 ′ (𝑥𝑥) pode ser calculada de forma exata permitindo
avaliar corretamente o erro total
format long
dftrue=dfunc(x); % f'(x) verdadeiro
h=1; % passo inicial
H(1)=h;
D(1)=(func(x+h)-func(x-h))/(2*h); % f'(x) aproximada
E(1)=abs(dftrue-D(1)); % módulo do erro total
Executando a função
Como essa função é facilmente diferenciável, também podemos investigar se esses resultados são
consistentes com a expressão de ℎ𝑜𝑜𝑜𝑜t. Primeiro, podemos estimar 𝑀𝑀 avaliando a função 𝑓𝑓 (3) (𝜉𝜉) para um valor de 𝜉𝜉
no ponto 𝑥𝑥 de cálculo da derivada.
Como o MATLAB possui uma precisão de cerca de 15 a 16 dígitos na base 10, uma estimativa aproximada do
limite superior no arredondamento seria de cerca de 𝜀𝜀 = 0.5 × 10−16 . Substituindo esses valores na equação do ℎ𝑜𝑜𝑜𝑜t,
obtém-se
3 3(0,5 × 10−16 )
ℎ𝑜𝑜𝑜𝑜𝑜𝑜 = � = 4,3 . 10−6
2,1
que é um valor da mesma magnitude que percebido com a execução do programa em MATLAB.
Uma função anônima do MATLAB é uma função que não é armazenada em um arquivo de programa, mas está associada a uma variável. As
funções anônimas podem aceitar várias entradas e retornar uma saída. Eles podem conter apenas uma única instrução executável. Consulte:
https://www.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html
A função fprintf grava uma variável num arquivo ou na tela com formatação pré-definida. Um operador de formatação começa com um sinal de
porcentagem % e termina com um caractere de conversão. Para mais detalhes consulte:
https://www.mathworks.com/help/matlab/ref/fprintf.html
Exercícios
1. Determine as aproximações da primeira derivada da função 𝑓𝑓(𝑥𝑥) para frente e para trás e calcule seu erro de
truncamento 𝑂𝑂(ℎ1 ). Determina também a aproximação central e calcule seu erro de truncamento 𝑂𝑂(ℎ2 ). Como a
função 𝑓𝑓(𝑥𝑥) é um polinômio, sua derivada 𝑓𝑓 ′ (𝑥𝑥) pode ser calculada de forma exata e permite avaliar corretamente
os erros de truncamento |𝜀𝜀𝑡𝑡 |. Calcule 𝑓𝑓(𝑥𝑥 = 5) e use ℎ = 0,5 e ℎ = 0,25. [exemplo 4.4 pág. 113]
2. Considere a função 𝑓𝑓(𝑥𝑥) no intervalo [-2, 2] com h = 0,25. Use as aproximações de diferenças finitas para frente,
para trás e centralizada para a primeira e a segunda derivadas, a fim de ilustrar graficamente qual aproximação é mais
precisa. Faça um gráfico das três aproximações de diferenças finitas da primeira derivada, juntamente com as teóricas,
e faça o mesmo para a segunda derivada. [exercício 4.20 pág. 122]
𝑓𝑓(𝑥𝑥) = 𝑥𝑥 3 − 2𝑥𝑥 + 4