DCC008 - Cálculo Numérico
Métodos de Diferenças Finitas para Problemas de Valor Inicial e de Contorno
Iury Igreja
Departamento de Ciência da Computação Universidade Federal de Juiz de Fora
Equação diferencial Ordinária (EDO)
◮ Problema de Valor de Inicial (PVI): Acharu(t)∈R,t∈[0, T], tal que
du
dt =F(u, t),
mais condição inicial em u(0). Este problema é também conhecido comoproblema de evolução.
◮ Problema de Valor de Contorno (PVC):
Acharu(x)∈R,x∈[a, b], satisfazendo a EDO
d2u
dx2 =F(u, x),
Problema de Valor Inicial
PVI
Decaimento radioativo
Estima o tempo necessário para desintegração de elementos radioativos.
dQ
dt =−krQ(t),
Crescimento Populacional
Estima a variação de uma população de certo local ou ambiente após determinado tempo.
◮ Modelo de Malthus
dP
dt =kpP(t), ◮ Modelo logístico (Verhulst-Pearl)
dP dt =kpP
1−
P L
,
P(t)é a população,kpuma constante (kp>0crescimento oukp<0 decaimento populacional) eLo limite máximo para a população.
Lei do resfriamento de Newton
Mede a troca de calor entre um corpo e o meio ambiente.
dθ
dt =−kt(θ−θm),
Outros exemplos de problemas de evolução
◮ Sistemas de equações lineares de primeira ordem
du
dt +Au=g(t); u(0) =α.
onde u,g e α são vetores e Auma matriz.
◮ Equações lineares de segunda ordem
d2u
dt2 +ω 2
u=f(t); du
dt(0) =β.
◮ Equação não linear de primeira ordem
du
dt =u
2
; u(0) =α.
Problema de Valor Inicial (PVI)
Acharu(t)∈R,t∈[0, T], tal que
du
dt =F(u, t) u(0) =α
Método de Diferenças Finitas
Define-se o intervalo de tempo finito∆t=T /N, e uma malha de pontostn=n∆t;n= 0,1,2, ..., N. A solução aproximada é dada por um conjunto de valores discretosun.
{
0 T
Δt
Método de Euler
un+1−un
∆t =F(u
n, t n)
u0 =α
, n= 0,1,2, ..., N (2)
Para a Convergência dos métodos de diferenças finitas, ou seja, quandon→ ∞então un→u(t
n).
Consistência/Erro de truncamento
A consistência representa o mínimo de fidelidade do problema contínuo (1) com a aproximação por diferenças finitas (2). Todavia a própria definição de derivada,
lim
∆t→0
u(tn+ ∆t)−u(tn)
∆t =
du
dt(tn) =F(u(tn), tn),
expressa a consistência do método de Euler. Ou ainda por série de Taylor
u(tn+∆t) =u(tn)+∆t
du dt(tn)+
∆t2
2!
d2u
Consistência/Erro de truncamento
donde conclui-se queu(tn+ ∆t)−u(tn)
∆t =
du dt(tn) +
∆t
2!
d2u
dt2(ξn)
O que implica que a derivada du
dt(tn) pode ser aproximado por u(tn+ ∆t)−u(tn)
∆t com erro da ordem de∆t. Portanto a solução
exatau(t)satisfaz a seguinte equação de diferenças
u(tn+ ∆t)−u(tn)
∆t =F(u(tn), tn) +τn
com
τn= 1 2!
d2u
dt2(ξn)∆t
que é chamadoerro de truncamento.
Exemplo
TomandoF(u, t) =−au, ondea >0é uma constante, define-se a seguinte equação diferencial ordinária
du
dt +au= 0, u(0) =b. (3)
A solução exata pra este problema é dada por
u(t) =be−at
A aproximação pelo método de Euler correspondente ao exemplo (3), é dada por
un+1−un
∆t +au
n= 0 com u0
Método de Euler explícito
O método de Euler, como definido anteriormente, pode ser reescrito como
un+1=un(1−a∆t)
para que a solução não tenda ao infinito o fator de amplificação (1−a∆t) deve respeitar
|1−a∆t|<1.
Além disso, para que não gere oscilações no método 1−a∆t >0.
Estas restrições tornam o método acimacondicionalmente estável, sendo necessário cumprir
∆t < 1 a,
a condição acima assegura a estabilidade do método.
Método de Euler implícito
Por outro lado, o método de Euler, pode ser escrito como
un+1−un
∆t +au
n+1
= 0 com u0=b.
logo,
(1 +a∆t)un+1=un
ou ainda
un+1 =
1 1 +a∆t
un
Resultados numéricos método de Euler
Em um domínio[0,1]tomandoa= 10.0e condição inicialb= 1.0, de acordo com a análise necessitamos respeitar∆t < 1
a = 0.1o
que implica emN >10 para garantir a estabilidade do método de Euler explícito
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
y 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Euler Explícito Euler Implícito Solução exata
(a) N= 10e∆t= 0.1000
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
y 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Euler Explícito Euler Implícito Solução exata
(b)N = 11e∆t= 0.0909
Resultados numéricos método de Euler
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
y 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Euler Explícito Euler Implícito Solução exata
(c) N= 25e∆t= 0.040
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
y 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Euler Explícito Euler Implícito Solução exata
Método de segunda ordem Crank-Nicolson
{
Δt
{
2
Δt 2
u
n n+1/2 n+1
u u
A partir do método de Euler, dividindo o intervalo∆tem 2 partes, define-se no primeiro intervalo∆t/2 o método explícito e no segundo o método implícito, como segue
un+1/2−un ∆t/2 +au
n= 0 (4)
un+1−un+1/2
∆t/2 +au
n+1
= 0 (5)
Somando (4) com (5) derivamos o método de Crank-Nicolson
un+1−un
∆t +
a
2(u n+1
+un) = 0
Consistência Método de Crank-Nicolson
A consistência deste método pode ser comprovada facilmente ao tomar a integral do exemplo que estamos tratando, ou seja,
Z tn+∆t
tn
(du
dt +au)dt= 0,
ou ainda
u(tn+ ∆t)−u(tn) =−
Z tn+∆t
tn
au dt,
usando a regra de integração do trapézio, obtemos
u(tn+ ∆t)−u(tn)
∆t =−
a
2(u(tn+ ∆t) +u(tn))−τn, ondeτn denota o erro de integração da regra do trapézio, que é dado por
τn=−
1 12
d3u
dt3(ξn)∆t 2
Condicionalidade do método de Crank-Nicolson
un+1−un
∆t +
a
2(u n+1
+un) = 0
ou ainda
un+1(2 +a∆t) =un(2−a∆t) Assim,
un+1=
2−a∆t
2 +a∆t
un
tomando
γ=
2−a∆t
2 +a∆t
Observa-se queγ <1, porém
γ >0⇒∆t < 2 a
Logo o método de Crank-Nicolson écondicionalmente estável. Todavia esta condição é menos restritiva que para o método de Euler explicito que requisita que o intervalo∆tseja menor que 1
Resultados numéricos
Para testar o método de Crank-Nicolson repetimos o experimento numérico anterior adotando um domínio[0,1],a= 10.0e condição inicialb= 1.0, de acordo com a análise necessitamos respeitar ∆t < 1
a = 0.1para Euler explícito e ∆t <
2
a = 0.2para
Crank-Nicolson.
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
y 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Euler Explícito Euler Implícito Crank-Nicolson Solução exata
(e) N= 5e∆t= 0.2000
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
y 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Euler Explícito Euler Implícito Crank-Nicolson Solução exata
Resultados numéricos
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
y 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Euler Explícito Euler Implícito Crank-Nicolson Solução exata
(g)N= 10e∆t= 0.1000
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
y 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Euler Explícito Euler Implícito Crank-Nicolson Solução exata
(h)N = 11e∆t= 0.0909
Resultados numéricos
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
y 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Euler Explícito Euler Implícito Crank-Nicolson Solução exata
(i)N = 25e∆t= 0.040
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
y 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Euler Explícito Euler Implícito Crank-Nicolson Solução exata
Conclusões
De uma forma geral, os três métodos podem ser escritos como
un+1−un
∆t +a
(1−θ)un+1+θun
= 0.
com
◮ θ= 1.0 método de Euler Explícito
◮ Método de primeira ordem de convergência ◮ Condicionalmente estável (∆t <1/a)
◮ θ= 0.0 método de Euler Implícito
◮ Método de primeira ordem de convergência
◮ Incondicionalmente estável (não depende da escolha de∆t
para convergir)
◮ θ= 0.5 método de Crank-Nicolson
◮ Método de segunda ordem de convergência ◮ Condicionalmente estável (∆t <2/a)
Método de Diferença Central (
leap frog
)
O método de diferença central pode ser escrito como:
un+1−un−1
2∆t +au
n= 0.
Neste caso, necessitamos de duas condições iniciaisu0 e ,u1.
Tomando
u0=b,
a condiçãou1 pode ser obtida utilizando os métodos de Euler
Explícito, Implícito ou Crank-Nicolson. Utilizando Euler Explícito, obtemos:
Consistência - Diferença Central
Expandindo em série de Taylor os termosu(tn+ ∆t)eu(tn−∆t),
u(tn+ ∆t) =u(tn) + ∆t
du dt(tn) +
∆t2 2!
d2
u dt2(tn) +
∆t3 3!
d3
u
dt3(ξ1) (6)
u(tn−∆t) =u(tn)−∆t
du dt(tn) +
∆t2 2!
d2
u dt2(tn)−
∆t3 3!
d3
u
dt3(ξ1) (7)
Fazendo (6) – (7), obtemos: u(tn+ ∆t)−u(tn−∆t) = 2∆t
du dt(tn) +
∆t3 3!
d3
u dt3(ξ1) +
d3
u dt3(ξ2)
ou ainda
du dt(tn) =
u(tn+ ∆t)−u(tn−∆t) 2∆t +τn com
τn=− ∆t2
12
d3
u dt3(ξ1) +
d3
u dt3(ξ2)
, ξ1∈(tn, tn+∆t) e ξ2∈(tn, tn−∆t)
Logo, o método converge com a mesma ordem do Crank-Nicolson∆t2
.
Convergência dos Métodos
Para se obter a taxa de convergência dos métodos, primeiramente calculamos o erro, confrontando a solução exata com a aproximada, utilizando a norma do máximo, que pode ser definida como:
kek∞=kun−u(tn)k∞= max
0≤i≤N|u i−u(t
i)|.
Assim, a taxa de convergência do método pode ser obtida através do refinamento progressivo da malha, escolhendo, por exemplo,
Nj = 4j elementos. Logo, para cada duas execuções do código utilizando valores consecutivos deN, podemos calcular a ordem p
de convergência do método, como segue:
Taxa de convergência
Resultados paraN = 4,16,64,256,1024elementos.
2 4 6
−log(h)
-15 -10 -5 0 lo g( e r r o ) Expl´ıcito Impl´ıcito CN DC 1 2 1 1
(k)a= 1
2 4 6
−log(h)
-10 -5 0 5 10 15 lo g( e r r o ) Expl´ıcito Impl´ıcito CN DC 1 2 1 1
(l) a= 10
Métodos de alta ordem (Runge-Kutta)
Outro método de segunda ordem pode ser apresentado na seguinte forma explícita para o problema modelo (3):
un+1=un
1−a∆t+a
2∆t2
2
detalhes desta metodologia pode ser encontrado na página 101 da seguinte referência:
https://edisciplinas.usp.br/pluginfile.php/41896/mod_ resource/content/1/LeVeque%20Finite%20Diff.pdf
Além disso, na página 103, desta mesma referência, são
apresentados métodos de Runge-Kutta de quarta ordem (∆t4) e de ordemn.
Problema de Valor de Contorno
PVC
Problema do Calor
Dada a condutividade térmica do materialKc, a função θe o
termo fontef : Ω→R, achar o campo de temperatura θ: Ω→R, tal que:
−Kc
d2θ
dx2 =f Ω
Problema da difusão de concentração
Dado o coeficiente de difusão de determinada espécieD, a função
ce o termo fontef : Ω→R, encontrar o campo de concentração
c: Ω→R, tal que:
−Dd
2c
dx2 =f Ω
c=c ∂Ω
Problema do Escoamento em meios porosos
Dada a condutividade hidraúlica do meioKp, a função pe o termo
fontef : Ω→R, determinar o campo de presão p: Ω→R, tal que:
−Kp
d2p
dx2 =f Ω
Problema de Valor de Contorno (PVC)
Seja o domínioΩ = [a, b], dados α,β ef(x), encontraru(x), com
x∈[a, b], tal que:
−d
2u
dx2 =f(x) (8)
u(a) =α u(b) =β
Discretização do problema
Particionando o domínioΩ = [a, b]em partes iguaish, onde
h= (b−a)/N el é a dimensão do elemento,N el =J−1 o
número de elementos da malha eJ o número de nós da malha que podem ser localizados porxj =jh, comj= 1,2, ..., J −1,x0=a
exJ =b, introduzimos a seguinte aproximação por diferenças finitas central:
d2u
dx2 ≈
uj+1−2uj+uj−1
h2
ou ainda, para o problema elíptico (8):
−uj+1−2uj+uj−1
h2 =f(xj)
Consistência
Expandindo em série de Taylor os termosu(xj+h) eu(xj −h) e truncando no termo de derivada quarta:
u(xj+h) =u(xj)+h
du dx(xj)+
h2
2!
d2u
dx2(xj)+
h3
3!
d3u
dx3(xj)+
h4
4!
d4u
dx4(ξ 1
j)
u(xj−h) =u(xj)−h
du dx(xj)+
h2
2!
d2u
dx2(xj)−
h3
3!
d3u
dx3(xj)+
h4
4!
d4u
dx4(ξ 2
j)
comξj1∈(xj, xj+h)eξ2j ∈(xj−h, xj). Somando as expansões e rearrumando os termos, geramos:
d2u
dx2(xj) =
u(xj +h)−2u(xj) +u(xj−h)
h2 +τj
onde
τj =−
h2
4!
d4u
dx4(ξ 1
j) +
d4u
dx4(ξ 2
j)
De acordo com o erro de truncamento, este método apresenta convergência de ordem 2.
Estratégia de Resolução
Problema: achar uj, com j= 1,2, ..., J−1, tal que:
−uj+1−2uj+uj−1
h2 =f(xj)
com condições de contorno
u0=α uJ =β
O sistema de equações para cadaj pode ser montado como:
paraj= 1,
−u2−2u1+α
h2 =f(x1)
ou ainda
−u2−2u1
h2 =f(x1) +
α h2 paraj= 2,
Cont....
paraj= 3,
−u4−2u3+u2
h2 =f(x3)
.. .
paraj=J −1,
−β−2uJ−1+uJ−2
h2 =f(xJ−1)
ou ainda
−−2uJ−1+uJ−2
h2 =f(xJ−1) +
β h2
Cont....
A partir das equações para cada indicej, podemos gerar o seguinte sistema linear: 1 h2
2 −1 0 0 0 . . . 0
−1 2 −1 0 0 . . . 0
0 −1 2 −1 0 . . . 0
0 0 −1 2 −1 . . . 0
..
. ... ... . .. ... ... ...
0 0 0 . . . −1 2 −1
0 0 0 . . . 0 −1 2
u1 u2 u3 u4 .. . uJ−2
uJ−1
=
f(x1) +hα2
f(x2)
f(x3)
f(x4)
.. . f(xJ−2)
f(xJ−1) +
β h2
Resultados Numéricos - Exemplo 1
Em um domínioΩ = [a, b] = [0,1], escolhendo f(x) = 1, estamos interessados em resolver o seguinte problema:
−d
2u
dx2 = 1
u(0) = 1 u(1) = 0
O problema em questão apresenta a seguinte solução exata:
u(x) =−1 2(x
2
+x) + 1
que satisfaz as condições de contornou(0) = 1 eu(1) = 0
Resultados Numéricos - Exemplo 1
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
u 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Aproximada exata
(m)N el= 4eh= 0.25
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
u 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Aproximada exata
(n)N el= 16eh= 0.0625
Resultados Numéricos - Exemplo 2
Em um domínioΩ = [a, b] = [0,1], escolhendo f(x) =π2sin(πx),
estamos interessados em resolver o seguinte problema:
−d
2u
dx2 =π
2
sin(πx)
u(0) =u(1) = 0
O problema em questão apresenta a seguinte solução exata:
u(x) = sin(πx)
que satisfaz as condições de contornou(0) =u(1) = 0. Adotando refinamentos sucessivos de malha comN el= 4i (i= 1,2,3,4,5), são gerados resultados comparando solução exata com aproximada e testes de convergência com o intuito de validar a metodologia e o código computacional.
Resultados Numéricos - Exemplo 2
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
u
0 0.2 0.4 0.6 0.8 1 1.2
Aproximada exata
(o)N el= 4eh= 0.25
x
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
u
0 0.2 0.4 0.6 0.8 1 1.2
Aproximada exata
(p)N el= 16eh= 0.0625
Taxa de convergência - Exemplo 2
Resultados paraN el= 4,16,64,256,1024elementos.
2 4 6
−log(h)
-14 -12 -10 -8 -6 -4
lo
g(
e
r
r
o
)
1 2