Вы находитесь на странице: 1из 17

Introdução ao Método das Diferenças

Finitas
Prof. Luiz Carlos Wrobel (maio de 2019)

O método das diferenças finitas (MDF) é um método de resolução de equações


diferenciais que se baseia na aproximação de derivadas por diferenças finitas.
Fórmulas simples de diferenças finitas podem ser criadas com o uso de séries de
Taylor truncadas após o termo contendo a primeira derivada. Alguns exemplos
são dados abaixo:

Diferença Progressiva:

f (xi1)  f (xi )  h f '(xi )  O(h2 )

f (xi1)  f (xi )
f '(xi )   O(h)
h

Diferença Regressiva:

f (xi1)  f (xi )  h f '(xi )  O(h2 )

f (xi )  f (xi1)
f '(xi )   O(h)
h

Aproximações de ordem mais alta podem ser criadas através da retenção de


termos adicionais na série de Taylor, como se segue:

f ''(xi )
f (xi1)  f (xi )  h f '(xi )  h2  O(h3 )
2!

f ''(xi )
f (xi2 )  f (xi )  2h f '(xi )  (2h)2  O(h3 )
2!

Multiplicando a primeira equação acima por 4 resulta em:

4 f (xi1)  4 f (xi )  4h f '(xi )  2h2 f ''(xi )  O(h3 ) (1)

f (xi2 )  f (xi )  2h f '(xi )  2h2 f ''(xi )  O(h3 ) (2)


Subtraindo a equação (2) da equação (1) gera o resultado

4 f (xi1)  f (xi2 )  3 f ( xi )  2h f '( xi )  O(h3 )

que, re-arrumando, produz o resultado final:

 f (xi2 )  4 f (xi1)  3 f (xi )


f '(xi )   O(h2 )
2h

A expressão acima é uma aproximação de diferenças progressivas de ordem


superior. Procedendo de uma maneira semelhante, a seguinte aproximação de
diferenças regressivas de ordem superior é obtida:

3 f (xi )  4 f (xi1)  f (xi2 )


f '(xi )   O(h2 )
2h

Uma outra possibilidade muito usada é conhecida como aproximação de


diferenças centradas. Nesse caso, iniciamos com as duas seguintes séries de Taylor
truncadas:

f ''(xi )
f (xi1)  f (xi )  h f '(xi )  h2  O(h3 )
2!

f ''(xi )
f (xi1)  f (xi )  h f '(xi )  h2  O(h3 )
2!

Subtraindo a segunda equação acima da primeira equação gera o resultado:

f (xi1)  f (xi1)  2h f '(xi )  O(h3 )

que, re-arrumando, produz o resultado final:

f (xi1)  f (xi1)
f '(xi )   O(h2 )
2h

Pode-se notar que a soma das duas expressões acima incluindo a derivada de
terceira ordem produz o resultado:

f (xi1)  f (xi1)  2 f (xi )  h2 f ''(xi )  O(h4 )

que, re-arrumando, gera uma aproximação de diferenças centradas para a


derivada de segunda ordem:

f (xi1)  2 f (xi )  f (xi1)


f ''(xi )   O(h2 )
h2
Fórmulas para aproximações de diferenças finitas progressivas, regressivas e
centradas, para derivadas de várias ordens, podem ser obtidas usando-se o
mesmo procedimento anterior (ver as tabelas no final dessas notas).

Nota: O uso apropriado de aproximações de diferenças finitas progressivas,


regressivas e centradas dependerá dos dados disponíveis para o problema.

Interpretação Gráfica

Dada uma função y = u(x), a derivada du/dx no ponto x = xi é dada por:

 du   lim u(xi  h)  u(xi )


 dx  h0
 xxi h

Esta derivada representa a inclinação da tangente à curva no ponto x = xi.

y T

Q
f (a + h) y = f (x)

P 
f (a)  R

0 a a+h x

Aproximadamente, podemos escrever:

 du   u(xi  h)  u(xi )
 dx 
 xxi h

onde h é um incremento pequeno mas finito. Esta fórmula de diferenças


progressivas representa uma aproximação da tangente no ponto x = xi pela corda
PQ.

De maneira semelhante, a fórmula de diferenças regressivas:

 du   u(xi )  u(xi  h)
 dx 
 xxi h
representa uma aproximação da tangente no ponto x = xi pela corda AC.

A fórmula de diferenças centradas:

 du   u(xi  h)  u(xi  h)
 dx 
 xxi 2h

também pode ser interpretada como uma aproximação da tangente no ponto


x = xi pela corda BC.

Exemplo 1

Estime o valor da primeira derivada da seguinte função:

f (x)  0.1x4  0.15x3  0.5x2  0.25x 12

no ponto x = 0.5, usando um incremento h = 0.5.

Como a função acima é analítica e facilmente diferenciável,

f '(x)  0.4x3  0.45x2 1.0x  0.25

o valor correto da primeira derivada no ponto x = 0.5 é f '(0.5)  0.9125 .

Inicialmente usaremos uma aproximação de diferenças finitas progressivas:

f (xi1)  f (xi )
f '(xi ) 
xi1  xi

Nesse caso, xi = 0.5, xi+1 = 1.0 e xi+1  xi = 0.5, e então:

f (1.0)  f (0.5)
f '(0.5)   1.45
0.5

exato − aproximado −0.9125 − (−1.45)


% erro = = = −58.9%
exato −0.9125

Usando agora uma aproximação de diferenças finitas regressivas:

f (xi )  f (xi1)
f '(xi ) 
xi  xi1

com xi = 0.5, xi-1 = 0 e xi  xi-1 = 0.5,


f (0.5)  f (0.0)
f '(0.5)   0.55
0.5

exato − aproximado −0.9125 − (−0.55)


% erro = = = 39.7%
exato −0.9125

Finalmente, usando uma aproximação de diferenças finitas centradas:

f (xi1)  f (xi1)
f '( xi ) 
xi1  xi1

com xi = 0.5, xi+1 = 1.0, xi-1 = 0 e xi+1  xi-1 = 2h = 1.0,

f (1.0)  f (0.0)
f '(0.5)   1.0
1.0

exato − aproximado −0.9125 − (−1.0)


% erro = = = −9.6%
exato −0.9125

A seguir, reduziremos o valor do incremento h = 0.5 para h = 0.25:

Aproximação de diferenças finitas progressivas:

f (0.75)  f (0.5)
f '(0.5)   1.155
0.25

% erro = −26.5%

Aproximação de diferenças finitas regressivas:

f (0.5)  f (0.25)
f '(0.5)   0.714
0.25

% erro = 21.7%

Aproximação de diferenças finitas centradas:

f (0.75)  f (0.25)
f '(0.5)   0.934
0.5
% erro = −2.4%

Nota: As fórmulas de diferencas finitas progressivas e regressivas usadas no


problema acima tem um erro de truncamento de O(h) e, portanto, representam
aproximações de primeira ordem. Assim, reduzindo o incremento h pela metade
significa que o erro da aproximação deve também se reduzir pela metade. Por
outro lado, a fórmula de diferenças finitas centrada tem um erro de truncamento
de O(h2). Assim, reduzindo o incremento h pela metade significa que o erro da
aproximação deve dividir por 4, já que 0.52 = 0.25.

Exemplo 2

Use fórmulas de ordem superior para estimar a primeira derivada da função:

f (x)  0.1x4  0.15x3  0.5x2  0.25x 12

no ponto x = 0.5, usando um incremento h = 0.25.

Aproximação de diferenças finitas progressivas de ordem superior:

 f (xi2 )  4 f (xi1)  3 f (xi )


f '(xi ) 
2h

onde xi = 0.5, xi+1 = 0.75, xi+2 = 1.0 e h = 0.25,

 f (1.0)  4 f (0.75)  3 f (0.5)


f '(0.5)   0.860
0.5

% erro = 5.82%

Aproximação de diferenças finitas regressivas de ordem superior:

3 f (xi )  4 f (xi1)  f (xi2 )


f '(xi ) 
2h

onde xi = 0.5, xi-1 = 0.25, xi-2 = 0.0 e h = 0.25,

3 f (0.5)  4 f (0.25)  f (0.0)


f '(0.5)   0.878
0.5

% erro = 3.77%
Aproximação de diferenças finitas centradas de ordem superior:

 f (xi2 )  8 f (xi1)  8 f (xi1)  f (xi2 )


f '(xi ) 
12h

onde xi = 0.5, xi+1 = 0.75, xi+2 = 1.0, xi-1 = 0.25, xi-2 = 0.0 e h = 0.25,

 f (1.0)  8 f (0.75)  8 f (0.25)  f (0.0)


f '(0.5)   0.9125
12 0.25

% erro = 0%

Nesse caso, a aproximação de diferenças finitas centradas de ordem superior


reproduziu a solução exata. Este resultado era esperado já que a expressão exata
da derivada primeira é uma função cúbica e o erro da fórmula acima é de O(h4),
como pode ser visto na tabela ao final dessas notas.

Exemplo 3

Dado um problema descrito pela seguinte equação diferencial:

f ''(x)  f (x)  x  0

com condições de contorno

f (x)  0 at x  0

f (x)  0 at x  1

estime o valor da função f (x) no ponto x = 0.5.

Substituindo a fórmula de aproximação de diferenças centradas:

f (xi1)  2 f (xi )  f (xi1)


f ''(xi ) 
h2

na equação diferencial original aplicada no ponto xi :

f (xi1)  2 f (xi )  f (xi1)


 f (xi )  xi  0
h2

A equação acima pode ser re-escrita na forma:

f (xi1)  2 f (xi )  f (xi1)  h2 f (xi )  h2 xi  0

h 2
 2 f ( xi )  f ( xi1 )  f ( xi1)  h2 xi
Nesse caso, xi = 0.5, xi+1 = 1.0, xi-1 = 0.0 e h = 0.5, assim

0.5  2 f (0.5)  f (1.0)  f (0.0)  0.5 0.5


2 2

Uma vez que as condições de contorno do problema especificam que f (1.0) = 0 e


f (0.0) = 0, temos que

0.52  0.5
f (0.5)   0.0714
0.52  2

O valor exato da função no ponto x = 0.5 é f (0.5) = 0.0697, assim o erro da solução
aproximada é

% erro = −2.4%

Se adotarmos agora um incremento h = 0.25 ao invés de h = 0.5 o número de


incógnitas aumentará, o que significa que o número de equações também
aumentará, como a seguir.

Primeiramente, aplicamos a equação geral

h 2
 2 f ( xi )  f ( xi1 )  f ( xi1)  h2 xi

no ponto xi = 0.25, resultando em:

0.25  2 f (0.25)  f (0.5)  f (0.0)  0.25 0.25


2 2

Como sabemos que f (0.0) = 0, a equação acima pode ser re-arranjada na forma:

 f (0.5)  0.252  0.25


f (0.25)  (1)
0.252  2

Aplicamos a seguir a equação general no ponto xi = 0.5:

0.25  2 f (0.5)  f (0.75)  f (0.25)  0.25  0.5


2 2
(2)

Finalmente, aplicamos a equação general no ponto xi = 0.75:

0.25  2 f (0.75)  f (1.0)  f (0.5)  0.25  0.75


2 2

Como sabemos que f (1.0) = 0, a equação acima pode ser re-arranjada na forma:

 f (0.5)  0.252  0.75


f (0.75)  (3)
0.252  2
Substituindo as equações (1) e (3) na equação (2), o valor de f (0.5) pode ser
calculado da seguinte forma:

 f (0.5)  0.252  0.75  f (0.5)  0.252  0.25


0.252  2 f (0.5)  0.25  2
2

0.25  2
2
 0.252  0.5

f (0.5)  0.0701

com um erro

% erro = −0.6%

Também podemos calcular os seguintes valores:

𝑓(0.25) = 0.0442 (valor exato: 𝑓(0.25) = 0.0440)

𝑓(0.75) = 0.0604 (valor exato: 𝑓(0.75) = 0.0601)

Solução exata:

sen (x)
𝑓(𝑥) = −𝑥
sen (1)

Exemplo 4

Considere um problema de balanço de massa num reator químico, descrito por


uma equação de dispersão-advecção com reação química de primeira ordem:

d 2c dc
D 2
U  kc  0
dx dx

onde:

c: concentração, moles/m3

U: velocidade da água passando através do reator, m/h

D: coeficiente de dispersão, m2/h

k: coeficiente de decaimento de primeira ordem, h-1

e as condições de contorno:

c = 1 quando x = 0
c = 0 quando x = L

onde L é o comprimento do reator, estime o valor da concentração no ponto médio


do reator.

Aproximação de diferenças finitas centradas:

 d 2c  c( xi1)  2c( xi )  c( xi1)


 dx2   h2
 xxi

 dc   c(xi1)  c(xi1)
 dx 
 xxi 2h

Substituíndo as aproximações acima na equação diferencial original aplicada no


ponto xi:

c(xi1)  2c(xi )  c(xi1) c(x )  c(xi1)


D 2
U i1  kc(xi )  0
h 2h

que pode ser re-arranjada na forma:

 D  U  c(x )   2D  k  c(x )   D  U  c(x )  0


 h2 2h  i1  h2  i  h2 2h  i1
     

A expressão acima é a aproximação de diferencas finitas da equação diferencial


original.

Dados os valores:

D = 0.2; U = 1; k = 0.5; L = 0.5; e assumindo que h = L/2 = 0.25, temos que:

D U 0.2 1
    3.2  2  1.2
h 2h 0.25 2 0.25
2 2

2D 2 0.2
2
k   0.5  6.4  0.5  6.9
h 0.252

D U 0.2 1
    3.2  2  5.2
h 2h 0.25 2 0.25
2 2

Assim:

1.2c(0.5)  6.9c(0.25)  5.2c(0.0)  0


5.2
c(0.25)   0.753
6.9

Se assumirmos agora que h = L/4 = 0.125, temos que

D U 0.2 1
    12.8  4  8.8
h 2h 0.125 2 0.125
2 2

2D 2 0.2
2
k   0.5  25.6  0.5  26.1
h 0.1252

D U 0.2 1
    12.8  4  16.8
h 2h 0.125 2 0.125
2 2

Equação geral de diferenças finitas do problema:

8.8c(xi1)  26.1c(xi ) 16.8c(xi1)  0

Aplicando a equação acima no ponto xi = 0.125:

8.8c(0.25)  26.1c(0.125) 16.8c(0.0)  0

8.8c(0.25) 16.8
c(0.125) 
26.1

Aplicando a equação acima no ponto xi = 0. 25:

8.8c(0.375)  26.1c(0.25) 16.8c(0.125)  0

Aplicando a equação acima no ponto xi = 0.375:

8.8c(0.5)  26.1c(0.375) 16.8c(0.25)  0

16.8c(0.25)
c(0.375) 
26.1

Assim:

16.8c(0.25) 8.8c(0.25) 16.8


8.8  26.1c(0.25) 16.8 0
26.1 26.1

A solução final é c(0.25) = 0.732, c(0.125) = 0.890 e c(0.375) = 0.471.


Aproximações de Diferenças Finitas Progressivas

Derivada de primeira ordem

f (xi1)  f (xi )
f '(xi )   O(h)
h

 f (xi2 )  4 f (xi1)  3 f (xi )


f '(xi )   O(h2 )
2h

Derivada de segunda ordem

f (xi2 )  2 f (xi1)  f (xi )


f ''(xi )   O(h)
h2

 f (xi3 )  4 f (xi2 )  5 f (xi1)  2 f (xi )


f ''(xi )  2
 O(h2 )
h

Derivada de terceira ordem

f (xi3 )  3 f (xi2 )  3 f (xi1)  f (xi )


f '''(xi )   O(h)
h3

3 f (xi4 ) 14 f (xi3 )  24 f (xi2 ) 18 f (xi1)  5 f (xi )


f '''(xi )   O(h2 )
2h3

Derivada de quarta ordem

f (xi4 )  4 f (xi3 )  6 f (xi2 )  4 f (xi1)  f (xi )


f ''''(xi )   O(h)
h4

2 f (xi5 ) 11 f (xi4 )  24 f (xi3 )  26 f (xi2 ) 14 f (xi1)  3 f (xi )


f '''(xi )  4
 O(h2 )
h
Aproximações de Diferenças Finitas Regressivas

Derivada de primeira ordem

f (xi )  f (xi1)
f '(xi )   O(h)
h

3 f (xi )  4 f (xi1)  f (xi2 )


f '(xi )   O(h2 )
2h

Derivada de segunda ordem

f (xi )  2 f (xi1)  f (xi2 )


f ''(xi )   O(h)
h2

2 f (xi )  5 f (xi1)  4 f (xi2 )  f (xi3 )


f ''(xi )  2
 O(h2 )
h

Derivada de terceira ordem

f (xi )  3 f (xi1)  3 f (xi2 )  f (xi3 )


f '''(xi )   O(h)
h3

5 f (xi ) 18 f (xi1)  24 f (xi2 ) 14 f (xi3 )  3 f (xi4 )


f '''(xi )   O(h2 )
2h3

Derivada de quarta ordem

f (xi )  4 f (xi1)  6 f (xi2 )  4 f (xi3 )  f (xi4 )


f ''''(xi )   O(h)
h4

3 f (xi ) 14 f (xi1)  26 f (xi2 )  24 f (xi3 ) 11 f (xi4 )  2 f (xi5 )


f '''(xi )  4
 O(h2 )
h
Aproximações de Diferenças Finitas Centradas

Derivada de primeira ordem

f (xi1)  f (xi1)
f '(xi )   O(h2 )
2h

 f (xi2 )  8 f (xi1)  8 f (xi1)  f (xi2 )


f '(xi )   O(h4 )
12h

Derivada de segunda ordem

f (xi1)  2 f (xi )  f (xi1)


f ''(xi )  2
 O(h2 )
h

 f (xi2 ) 16 f (xi1)  30 f (xi ) 16 f (xi1)  f (xi2 )


f ''(xi )  2
 O(h4 )
12h

Derivada de terceira ordem

f (xi2 )  2 f (xi1)  2 f (xi1)  f (xi2 )


f '''(xi )  3
 O(h2 )
2h

 f (xi3 )  8 f (xi2 ) 13 f (xi1) 13 f (xi1) 8 f (xi2 )  f (xi3 )


f '''(xi )   O(h4 )
8h3

Derivada de quarta ordem

f (xi2 )  4 f (xi1)  6 f (xi )  4 f (xi1)  f (xi2 )


f ''''(xi )  4
 O(h2 )
h

 f (xi3 ) 12 f (xi2 )  39 f (xi1)  56 f (xi )  39 f ( xi1) 12 f ( xi2 )  f ( xi3)


f '''(xi )   O(h4 )
6h4
Condições de contorno em termos da derivada
As condições de contorno mais usuais em problemas de engenharia são
especificadas em termos de valores conhecidos da função 𝑓 (chamadas de
condições de contorno essenciais). Entretanto, em alguns casos, também é comum
especificar valores da derivada da função 𝑓 (chamadas de condições de contorno
naturais). Nesses casos, é necessário introduzir aproximações de diferenças
finitas para esta derivada.

Exemplo 5
Resolva a equação diferencial
d2 𝑓
−𝑓 =0
d𝑥 2

com condições de contorno 𝑓 = 0 quando x = 0, d𝑓/dx = 1 quando x = 1, usando


um incremento h =1/3.

Solução
A aproximação de diferenças centradas para a equação diferencial é da forma:

𝑓(𝑥𝑖 + ℎ) − 2𝑓(𝑥𝑖 ) + 𝑓(𝑥𝑖 − ℎ)


− 𝑓(𝑥𝑖 ) = 0
ℎ2

−(ℎ2 + 2)𝑓(𝑥𝑖 ) + 𝑓(𝑥𝑖 + ℎ) + 𝑓(𝑥𝑖 − ℎ) = 0

Aplicando a expressão acima nos pontos x =1 /3 e x = 2/3 resulta em:

1
− ( + 2) 𝑓(1/3) + 𝑓(2/3) + 𝑓(0) = 0
9

1
− ( + 2) 𝑓(2/3) + 𝑓(1) + 𝑓(1/3) = 0
9

Aplicando a condição de contorno 𝑓 = 0 quando x = 0 na primeira equação acima:


−2,111 𝑓(1/3) + 𝑓(2/3) = 0

−2,111 𝑓(2/3) + 𝑓(1) + 𝑓(1/3) = 0

Temos agora um sistema de duas equações com três incógnitas. O sistema é


completado com a aproximação de diferenças finitas regressivas da condição de
contorno d𝑓/dx = 1 quando x = 1:

𝑑𝑓 𝑓(1) − 𝑓(2/3)
= =1
d𝑥 ℎ

𝑓(1) − 𝑓(2/3) = 1/3

O sistema de três equações acima pode agora ser resolvido para se encontrar os
1 2
valores das incógnitas 𝑓 (3), 𝑓 (3) e 𝑓(1). O resultado é:

1 2
𝑓 ( ) = 0,248 𝑓 ( ) = 0,523 𝑓(1) = 0,856
3 3

Os valores correspondentes da solução exata neste caso são:


1 2
𝑓 ( ) = 0,220 𝑓 ( ) = 0,465 𝑓(1) = 0,762
3 3

Existe uma inconsistência na análise anterior no sentido de que a equação


diferencial foi aproximada usando um esquema de diferenças centradas, com um
erro de truncamento de ordem O(ℎ2 ), enquanto a condição de contorno em x = 1
foi aproximada com um esquema de diferenças regressivas, com um erro de
truncamento de ordem O(ℎ).
Esta aproximação pode ser mais consistente se também aproximarmos a condição
de contorno por um esquema de diferenças centradas. No entanto, isto requer a
introdução de um ponto adicional, fictício, na posição x = 4/3, com um valor
associado de 𝑓 que não tem significado físico por estar fora da região de definição
do problema.
Exemplo 6
Resolva o problema anterior usando uma aproximação de diferenças centradas
para a condição de contorno em x = 1, com um incremento h =1/3.

Solução
Aplicando uma aproximação de diferenças centradas para a equação diferencial
nos pontos x =1 /3, x = 2/3 e x = 1 resulta em:

−2,111 𝑓(1/3) + 𝑓(2/3) = 0

−2,111 𝑓(2/3) + 𝑓(1) + 𝑓(1/3) = 0

−2,111 𝑓(1) + 𝑓(4/3) + 𝑓(2/3) = 0

A aproximação de diferenças centradas para a condição de contorno em x = 1


fornece agora o resultado:

𝑑𝑓 𝑓(4/3) − 𝑓(2/3)
= =1
d𝑥 2ℎ

𝑓(4/3) − 𝑓(2/3) = 2/3

A solução do sistema acima de 4 equações para 4 incógnitas dá como resultado:


1 2
𝑓 ( ) = 0,217 𝑓 ( ) = 0,458 𝑓(1) = 0,749
3 3

A solução acima é consideravelmente mais precisa do que a solução anterior.