Use o botão abaixo para reportar erros ou dar sugestões.

Cálculo Numérico - Versão GNU Octave

8.1 Diferenças finitas


Uma diferença finita é uma expressão da forma f(x + b) f(x + a), que ao ser dividida por (b a) chama-se um quociente de diferenças. A técnica de diferenças finitas consiste em aproximar a derivada de uma função via fórmulas discretas que requerem apenas um conjunto finito de pares ordenados xi,yi i=1n, onde geralmente denotamos yi = f(xi).

Essas fórmulas podem ser obtidas de várias maneiras. Começamos com a fórmula mais simples que pode ser obtida do cálculo diferencial. Seja f uma função diferenciável, a derivada de f no ponto x0 é, por definição,

f(x 0) = lim h0f(x0 + h) f(x0) h . (8.1)

Deste limite, tomando h0 pequeno (não muito pequeno para evitar o cancelamento catastrófico), é esperado que possamos obter uma aproximação razoável para f(x 0). Assim, a diferença finita progressiva de ordem 1

D+,hf(x0) := f(x0 + h) f(x0) h f(x 0) (8.2)

é uma aproximação para f(x 0).

Exemplo 8.1.1. Usando a diferença finita progressiva de ordem 1, calcule aproximações da derivada de f(x) = cos(x) no ponto x = 1 usando h = 101, 102, 103, 104, 1012 e 1014. Calcule o erro |D+,hf(1) f(1)| obtido para cada valor de h.

Solução. Usando a diferença progressiva em  (8.2), devemos calcular

D+,hf(1) = cos(1 + h) cos(1) h (8.3)

Fazendo isso, obtemos:

h D+,hf(1) |f(1) D +,hf(1)|



101 8,67062E 01 2,55909E 02
102 8,44158E 01 2,68746E 03
103 8,41741E 01 2,70011E 04
104 8,41498E 01 2,70137E 05
1012 8,41549E 01 7,80679E 05
1014 8,43769E 01 2,29851E 03



No GNU Octave, podemos calcular a aproximação da derivada f(1) com h = 0,1 usando as seguintes linhas de código:

f = @(x) cos(x);  
x0 = 1;  
h = 0.1;  
df = (f(x0+h) - f(x0))/h

E, similarmente, para outros valores de x0 e h.


PIC

Figura 8.1: Erro absoluto das derivadas numéricas no Exemplo 8.1.1.


Exploremos o Exemplo 8.1.1 um pouco mais. Observamos que, para valores moderados de h, o erro |f(1) D +,hf(1)| diminui linearmente com h (veja Figura 8.1). Isto é consequência da ordem de truncamento da fórmula de diferenças finitas aplicada (que é de ordem 1). Porém, para valores muito pequenos de h < 108, o erro passa a aumentar quando diminuímos h. Isto é devido ao efeito de cancelamento catastrófico.

8.1.1 Diferenças finitas via série de Taylor


Podemos construir fórmulas de diferenças finitas para uma função f(x) (suave1 ) no ponto x = x0 a partir de seu polinômio de Taylor. Em alguns casos, este procedimento acaba por nos fornecer, também, a ordem de truncamento da fórmula.

Diferença finita progressiva de ordem 1

Podemos obter uma aproximação para f(x 0) a partir da série de Taylor

f(x0 + h) = f(x0) + hf(x 0) + h2f(ξ) 2 ,h > 0,ξ (x0,x0 + h). (8.4)

Isolando f(x 0), obtemos

f(x 0) = f(x0 + h) f(x0) h D+,h hf(ξ) 2 O(h), (8.5)

o que mostra que o erro de truncamento da diferença finita progressiva2

D+,hf(x0) := f(x0 + h) f(x0) h (8.6)

é de ordem h.

Diferença finita regressiva de ordem 1

Outra aproximação para a derivada primeira pode ser obtida da série de Taylor de f em torno de (x0 h) dada por

f(x0 h) = f(x0) hf(x 0) + h2f(ξ) 2 ,h > 0,ξ (x0,x0 + h). (8.7)

Isolando f(x 0), obtemos

f(x 0) = f(x0) f(x0 h) h D,h + hf(ξ) 2 O(h). (8.8)

que fornece a diferença finita regressiva3

D,hf(x0) := f(x0) f(x0 h) h , (8.9)

que possui erro de truncamento de ordem h.

Diferença finita central de ordem 2

Para obter uma aproximação para a derivada primeira com um erro menor, podemos utilizar as séries de Taylor: f(x0 + h) = f(x0) + hf(x 0) + h2f(x 0) + h3f(ξ+) 3! , (8.10) f(x0 h) = f(x0) hf(x 0) + h2f(x 0) + h3f(ξ) 3! (8.11)

Fazendo a primeira equação menos a segunda, obtemos

f(x0 + h) f(x0 h) = 2hf(x 0) + h3 f(ξ +) f(ξ) 3! . (8.12)

Dividindo por 2h e isolando f(x 0) obtemos

f(x 0) = f(x0 + h) f(x0 h) 2h D0,h h2 f(ξ +) f(ξ) 2 3! O(h2). (8.13)

Assim, a diferença finita central4

D0,hf(x0) := f(x0 + h) f(x0 h) 2h , (8.14)

é uma aproximação para f(x 0) com erro de truncamento de ordem h2, ou simplesmente ordem 2.

Exemplo 8.1.2. Calcule a derivada numérica da função f(x) = e1 2x no ponto x = 2 usando a diferença progressiva, diferença regressiva e diferença central com h = 101, h = 102 e h = 104. Também, calcule o erro absoluto da aproximação obtida em cada caso.

Solução. Usando a diferença progressiva, devemos calcular

D+,h = f(x + h) f(x) h = e1 2(x+h) e1 2x h . (8.15)

Com a diferença regressiva, calculamos

D,h = f(x) f(x h) h = e1 2x e1 2(xh) h . (8.16)

Por fim, usando a diferença central temos

D0,h = f(x + h) f(x h) 2h = e1 2(x+h) e1 2(xh) 2h . (8.17)

As aproximações e os erros absolutos calculados em cada caso estão apresentados na seguinte tabela:

h D+,hf(2) Erro D,h Erro D0,h Erro







101 1,39369 3,5E 02 1,32572 3,3E 02 1,35971 5,7E 04
102 1,36254 3,4E 03 1,35575 3,4E 03 1,35915 5,7E 06
104 1,35917 3,4E 05 1,35911 3,4E 05 1,35914 5,7E 10








PIC

Figura 8.2: Erro absoluto das derivadas numéricas no Exemplo 8.1.2.


Observação 8.1.1. O experimento numérico realizado no Exemplo 8.1.2, nos mostra que o erro absoluto na derivação numérica não é da ordem do erro de truncamento. Entretanto, este erro tende a variar com h na mesma ordem do erro de truncamento. A Figura 8.1.2 apresenta o erro absoluto das derivadas numéricas computadas para o Exemplo 8.1.2. Note que, devido ao efeito de cancelamento catastrófico, o erro absoluto deixa de variar na ordem do erro de truncamento para valores muito pequenos de h.

Exemplo 8.1.3. Estime o erro absoluto no cálculo da derivada de f(x) = ex para x > 0 utilizando a diferença progressiva.

Solução. Da Equação 8.5, temos:

f(x) = D +,hf(x) hf(ξ) 2 ,ξ > 0, (8.18)

ou seja:

|f(x) D +,hf(x)| = f(ξ) 2 h,ξ > 0. (8.19)

Agora, como |f(x)| = |ex| < 1 para x > 0, concluímos que:

|f(x) D +,hf(x)| 1 2h,x > 0. (8.20)

8.1.2 Erros de arredondamento


Para entender como os erros de arredondamento se propagam ao calcular as derivadas numéricas vamos analisar a fórmula de diferenças finitas progressiva

D+,hf(x) = f(x + h) f(x) h . (8.21)

Nesse contexto temos o valor exato f(x) para a derivada, a sua aproximação numérica D+,hf(x) e a representação em número de máquina do operador D+,hf(x) que denotaremos por D+,hf(x)¯. Denotando por ε(x,h) o erro de arredondamento ao calcularmos a derivada, vamos assumir que

D+,hf(x)¯ = D+,hf(x)(1 + ε(x,h)) = f(x + h)¯ f(x)¯ h (1 + ε(x,h)). (8.22)

Também, consideremos

|f(x + h)¯ f(x + h)| = δ(x,h) δ (8.23)

e

|f(x)¯ f(x)| = δ(x,0) δ, (8.24)

onde f(x + h)¯ e f(x)¯ são as representações em ponto flutuante dos números f(x + h) e f(x), respectivamente.

Então, da Equação (8.22), a diferença do valor da derivada e sua aproximação representada em ponto flutuante pode ser estimada por:

f(x) D +,hf(x)¯ = f(x) f(x + h)¯ f(x)¯ h (1 + ε(x,h)) . (8.25)

Podemos reescrever o lado direito desta equação, da seguinte forma f(x) D +,hf(x)¯ = f(x) f(x + h)¯ f(x)¯ h + f(x + h) f(x + h) h (8.26) + f(x) f(x) h (1 + ε) (8.27) = f(x) + f(x + h) f(x) h f(x + h)¯ f(x + h) h (8.28) + f(x)¯ f(x) h (1 + ε) . (8.29)

Então, separando os termos e estimando, obtemos: f(x) D +,hf(x)¯ f(x) f(x + h) f(x) h + f(x + h)¯ f(x + h) h (8.30) + f(x)¯ f(x) h |1 + ε| + f(x + h) f(x) h ε (8.31) Mh + δ h + δ h|1 + ε| + |f(x)|ε (8.32) Mh + 2δ h |1 + ε| + |f(x)|ε (8.33)

onde

M = 1 2 max xyx+h|f(y)| (8.34)

está relacionado com o erro de truncamento.

Por fim, obtemos a seguinte estimativa para o erro absoluto na computação da derivada numérica:

f(x) D +,hf(x)¯ Mh + 2δ h |1 + ε| + |f(x)|ε. (8.35)

Esta estimativa mostra que se o valor de h for muito pequeno o erro ao calcular a aproximação numérica cresce. Isso nos motiva a procurar o valor ótimo de h que minimiza o erro.

Exemplo 8.1.4. No Exemplo 8.1.2, computamos a derivada numérica da função f(x) = e1 2x no ponto x = 2 usando as fórmulas de diferenças finitas progressivas, regressivas e central. A Figura 8.2, mostra que, para valores h muito pequenos, os erros de arredondamento passam a dominar os cálculos e, por consequência, o erro da derivada numérica passa a aumentar. Pela figura, podemos inferir que a escolha ótima de h para as fórmulas progressiva e regressivas é h 107. Agora, para a fórmula central, h 105 parece ser a melhor escolha.

Observação 8.1.2. Note que a estimativa (8.35), mostra que o erro na computação da derivada numérica depende da função que está sendo derivada. Assim, o h ótimo depende não somente da fórmula de diferenças finitas, mas também da função a ser derivada.

Exercícios resolvidos


Esta seção carece de exercícios resolvidos. Clique em e inicie a editá-la agora mesmo. Veja outras formas de participar clicando aqui.

ER 8.1.1. Aproxime a derivada de f(x) = sen (2x) x2 no ponto x = 2 usando a fórmula de diferenças finitas progressiva de ordem 1 com: a) h = 0,1 e b) h = 0,01. Compute, também, o erro absoluto de cada aproximação computada.

Solução. A fórmula de diferenças finitas de ordem 1 para uma função y = f(x) em um ponto x = x0 é dada por:
D+,hf(x0) = f(x0 + h) f(x0) h . (8.36)

Substituindo f(x) = sen (2x) x2 e x0 = 2, obtemos:

D+,hf(x0) = (sen (2(x0 + h)) (x0 + h)2) (sen (2x 0) x02) h = sen (2(x0 + h)) x02 + 2x 0h + h2 sen (2x 0) + x02) h = sen (4 + 2h) + 4h + h2 sen (4)) h . (8.37)

Então, tomando h = 0,1, podemos computar a derivada numérica e o erro associado:

D+,0,1f(2) = 5,247733,|f(2) D +,0,1f(2)| = 5,96 × 102, (8.38)

onde f(x) = 2 sen (2x) 2x é a derivada analítica. Tomando h = 0,01 temos:

D+,0,1f(2) = 5,302065,|f(2) D +,0,1f(2)| = 5,22 × 103. (8.39)

No GNU Octave, podemos fazer os cálculos com o seguinte código:

#funcao  
f = @(x) sin(2*x) - x^2;  
 
#derivada analitica  
fl = @(x) 2*cos(2*x) - 2*x;  
 
#d.f. progressiva de ordem 1  
dp1 = @(f,x,h=0.1) (f(x+h)-f(x))/h;  
 
#h=0.1  
dy = dp1(f,2)  
printf("D.F. Progressiva de ordem 1 com h = %f\n", 1e-1)  
printf("Df = %f\n", dy)  
printf("Erro = %1.2e\n", abs(fl(2)-dy))  
 
#h=0.01  
dy = dp1(f,2,1e-2)  
printf("D.F. Progressiva de ordem 1 com h = %f\n", 1e-2)  
printf("Df = %f\n", dy)  
printf("Erro = %1.2e\n", abs(fl(2)-dy))

Exercícios


E 8.1.1. Use os esquemas numéricos de diferença finita regressiva de ordem 1, diferença finita progressiva de ordem 1 e diferença finita central de ordem 2 para aproximar as seguintes derivadas:

  • f(x) onde f(x) = sen (x) e x = 2.
  • f(x) onde f(x) = ex e x = 1.

Use h = 102 e h = 103 e compare com os valores obtidos através da avaliação numérica das derivadas exatas.

Resposta.
  • f(x) onde f(x) = sen (x) e x = 2 para h = 102 e h = 103, respectivamente.

      Progressiva ordem 1: 0,42069 e 0,41660.

      Regressiva ordem 1: 0,41159 e 0,41569.

      Central ordem 2: 0,41614 e 0,41615.

      Exata: cos(2) = 0,41615

  • f(x) onde f(x) = ex e x = 1 para h = 102 e h = 103, respectivamente.

      Progressiva ordem 1: 0,36605 e 0,36788.

      Regressiva ordem 1: 0,36972 e 0,36806.

      Central ordem 2: 0,36789 e 0,36788.

      Exata: e1 = 0,36788

E 8.1.2. Expanda a função suave f(x) em um polinômio de Taylor adequado para obter as seguintes aproximações:

  • f(x) = f(x+h)f(x) h + O(h)
  • f(x) = f(x)f(xh) h + O(h)
  • f(x) = f(x+h)f(xh) 2h + O(h2)

E 8.1.3. Use a expansão da função f(x) em torno de x = 0 em polinômios de Taylor para encontrar os coeficientes a1, a2 e a3 tais que

  • f(0) = a 1f(0) + a2f(h) + a3f(2h) + O(h2)
  • f(0) = a 1f(0) + a2f(h) + a3f(2h) + O(h2)
  • f(0) = a 1f(h1) + a2f(0) + a3f(h2) + O(h2),|h 1|,|h2| = O(h)

Resposta.
  • f(0) = 3f(0)+4f(h)f(2h) 2h + O(h2)
  • f(0) = 3f(0)4f(h)+f(2h) 2h + O(h2)
  • f(0) = 1 h1+h2l h2 h1f(h1) + h2 h1 h1 h2 f(0) + h1 h2f(h2)

E 8.1.4. As tensões na entrada, vi, e saída, vo, de um amplificador foram medidas em regime estacionário conforme tabela abaixo.












0,0 0,50 1,00 1,50 2,00 2,50 3,00 3,50 4,00 4,50 5,00











0,0 1,05 1,83 2,69 3,83 4,56 5,49 6,56 6,11 7,06 8,29











onde a primeira linha é a tensão de entrada em volts e a segunda linha é tensão de saída em volts. Sabendo que o ganho é definido como

vo vi . (8.40)

Calcule o ganho quando vi = 1 e vi = 4.5 usando as seguintes técnicas:

  • Derivada primeira numérica de primeira ordem usando o próprio ponto e o próximo.
  • Derivada primeira numérica de primeira ordem usando o próprio ponto e o anterior.
  • Derivada primeira numérica de segunda ordem usando o ponto anterior e o próximo.
  • Derivada primeira analítica da função do tipo v0 = a1vi + a3vi3 que melhor se ajusta aos pontos pelo critério dos mínimos quadrados.






Caso a b c d





v i = 1                





vi = 4.5                





Resposta. Caso a b c d v i = 1 1.72 1.56 1.64 1.86 v i = 4.5 2.46 1.90 2.18 1.14




















(8.41)

E 8.1.5. Estude o comportamento da derivada de f(x) = ex2 no ponto x = 1,5 quando h fica pequeno.

Resposta.

Segue a tabela com os valores da derivada para vários valores de h.

h 102 104 106 107 108 109 D+,hf(1,5) 0,3125246 0,3161608 0,3161973 0,3161976 0,3161977 0,3161977





















(8.42)
h 1010 1011 1012 1013 1014 1015 D+,hf(1,5) 0,3161976 0,3161971 0,3162332 0,3158585 0,3178013 0,3747003





















(8.43)

Observe que o valor exato é 0,3161977 e o h ótimo é algo entre 108 e 109.

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 19/8/2020 às 17:36:34.

Informe erros ou edite você mesmo!