Anda di halaman 1dari 14

Resolução Numérica de Equações Diferenciais

Método de Runge Kutta


Queremos resolver uma equação diferencial da forma
dy
= f (x, y), (1)
dx

Isto é: queremos obter a função y(x) sabendo sua derivada.


Numericamente: queremos obter y(x0 + ∆x), y(x0 + 2∆x), etc, a partir
apenas do conhecimento de (x0 , y0 ), para valores de ∆x pequeno mas
finito.

1
Método de Euler
usa apenas
os valores no inı́cio de cada intervalo.
Sabendo
(x0 , y0 ), obtemos y1 = y0 + f (x0 , y0 )∆x, y2
y2 = y1 + f (x1 , y1 )∆x, etc. y1
y1 é uma estimativa
para o valor da solução em x = x1
f (x1 , y1 ) é uma estimativa y0
para a derivada da solução naquele ponto.
x0 x1 x2
erros são acumulados.

2
O método de Euler trunca a expansão em série de Taylor no segundo
termo ➜ é um método O(∆x), com um erro O(∆x2 ).
Queremos diminuir a ordem do erro, ao levar em conta a variação da
derivada em cada intervalo ∆x.
Faremos isso de duas formas:

• usando o valor da derivada num ponto central


• usando a média das derivadas no inı́cio e no fim do intervalo.

Ao levar em conta essa variação de tangente, estamos truncando a série de


Taylor após o termo quadrático, portanto teremos um método O(∆x2 ).

3
Método do Ponto Central ou
Método de Euler Modificado
Em vez de usarmos a derivada
no ponto (x0 , y0 ), usamos a derivada no
ponto intermediário xmed = x0 + ∆x/2.
ymed
yi+1 = yi + f (xmed , ymed )∆x y1
Mas não
sabemos ymed ➜ Usamos Euler simples: y0
ymed = yi + f (xi , yi )∆x/2
x0 xmed x1

4
Método de Euler Aperfeiçoado
Usa a derivada obtida pela média entre
a derivada no inı́cio e no fim do intervalo.
yi+1 = yi + 12 (fi + fi+1 )∆x
com
fi = f (xi , yi ) e fi+1 = f (xi+1 , yi+1 ) y1
e usa Euler simples primeiro para obter
y0
yi+1 = yi + fi ∆x
x0 x1

5
Método de Runge Kutta
Calcula a derivada em um ponto intermediário e usa a média ponderada
das derivadas no ponto inicial e num ponto intermediário

yi+1 = yi + f¯∆x

onde f¯ = afi + bfi0


a e b são os pesos,
fi é a tangente no ponto (xi , yi ),
fi0 é a tangente num ponto intermediário
fi0 = f (xi + α ∆x, yi + βfi ∆x)
onde α e β especificam a posição do ponto intermediário

6
Estes parâmetros n˜ao s˜
ao totalmente livres. Se compararmos este m´ etodo com a
expans˜ao em s´erie de Taylor da soluc¸a˜o real y(x) obteremos as relac¸o˜es entre eles:
A expans˜ erie de Taylor de f (x, y) em torno de x0 e y0 e´:
ao en s´
∂f
∂f

f (x, y) = f (x0 , y0 ) + (x − x0 )
∂x x0 ,y0
+ (y − y0 )
∂y x0 ,y0

ou seja:
∂f
∂f

f (x0 + ∆x, y0 + ∆y) = f (x0 , y0 ) + ∆x
∂x x0 ,y0
+ ∆y
∂y x0 ,y0

Vamos expandir a equac¸a˜o da derivada fi0 = f (xi + α ∆x, yi + βfi ∆x) em


torno de xi
∂f

fi0 = f (xi , yi + βfi ∆x) + α∆x
∂x xi ,yi

expandindo o primeiro termo em torno de yi


∂f

f (xi , yi + βfi ∆x) = fi + βfi ∆x
∂y xi ,yi

ent˜
ao
∂f
∂f

fi0 = fi + βfi ∆x
∂y xi ,yi
+ α∆x
∂x xi ,yi

7
Substituindo na expressão de
f¯ = afi + bfi0

temos

f¯ = afi + bfi + bβfi ∆x ∂f + bα∆x ∂f

∂y ∂x
xi ,yi xi ,yi

que substituindo em

yi+1 = yi + f¯∆x
" #
∂f ∂f
yi+1 = yi + ∆x (a + b)fi + bα∆x + bβfi ∆x
∂x xi ,yi ∂y xi ,yi
(2)

8
Considere a solução real, y(x), expandida em série de Taylor, nas
vizinhanças do ponto xi , até a segunda ordem:
2
dy
1 2d y
y(xi + ∆x) = y(xi ) + ∆x + (∆x)
dx xi 2 dx2 xi
" #
1 df
= y(xi ) + ∆x f (xi , y(xi ) + ∆x . (3)
2 dx xi
(4)

Mas
df (x, y) ∂f dy ∂f ∂f ∂f
= + = + f (x, y) . (5)
dx ∂x dx ∂y ∂x ∂y
Substituindo (5) em (4) temos
" #
1 ∂f 1 ∂f
y(xi + ∆x) = y(xi ) + ∆x f [xi , y(xi )] + ∆x + ∆xf [xi , y(xi )]
2 ∂x xi 2
∂y xi
(6)

9
Comparando express˜
ao (2) com a expans˜
ao (6),
h i
∂f ∂f
yi+1 = yi + ∆x (a + b)fi + bα∆x
∂x xi ,yi
+ bβfi ∆x
∂y xi ,yi

h i
∂f ∂f
y(xi + ∆x) = y(xi ) + ∆x f [xi , y(xi )] + 2 ∆x ∂x x + 12 ∆xf [xi , y(xi )]
1
∂y xi
i

vemos que, para que as duas sejam equivalentes, os parâmetros a, b, α e β est˜


ao
relacionados:
a+b = 1
1
αb = βb = (7)
2
1
ea=0 b=1 α=β =
Uma escolha possı́vel´ 2
➜ M´
etodo do ponto central
1
Outra escolha: a = b = 2
α = β = 1 ➜ M´
etodo de Euler aperfeic¸ oado
Ambos algoritmos s˜ao conhecidos como m´ etodos de Runge-Kutta de segunda
alculo de yi+1 inclui termos O(∆x2 ).
ordem porque o c´

10
Método de Runge-Kutta de Quarta Ordem
inclui mais pontos no intervalo de modo a que o cálculo da derivada tem
termos O(∆x4 ). A determinação dos vários parˆ
ametros é feita com o
auxı́lio da expansão de Taylor e envolve uma quantidade razoável de
cálculos. Vamos simplesmente listar o resultado.
h
yi+1 = yi + (f0 + 2f1 + 2f2 + f3 ), (8)
6
onde
f0 = f (x0 , y0 )
f1 = f (x0 + h/2, y0 + (h/2)f0 )
f2 = f (x0 + h/2, y0 + (h/2)f1 )
f3 = f (x0 + h, y0 + hf2 )

11
Tarefa 11 - Oscilador harmônico simples
Equac¸a˜o do OHS na forma de equac¸a˜o diferencial de segunda ordem:
d2 x 2
+ ω x = 0, (9)
dt2
onde ω e´a freqüência natural do oscilador. Esta equac¸a˜o tem como soluc¸a˜o uma
func¸a˜o harmônica, e pode ser escrita como

x(t) = A cos(ωt + φ). (10)

Precisamos escrever a equac¸a˜o (9) na forma de duas equac¸o˜es de primeira ordem.

dx dy
=y e = −ω 2 x. (11)
dt dt
As duas equac¸o˜es acima podem ser escritas de forma compacta usando uma
notac¸a˜o vetorial:
~
dS ~ ou seja, dS[0] = f [0] = S[1] e dS[1] = f [1] = −ω 2 S[0].
= f~(S)
dt dt dt
(12)

12
1. Elabore um programa que resolva a equação do OHS com ω = 2πf
com f = 1Hz, para 0 < t < 2s, utilizando o método de Euler
simples. Utilize ∆t = 0.05s, x(0) = 10 e y(0) = 0
2. Copie o código que implementa o método de Runge-Kutta de quarta
ordem, em sandra/mcomp/programas/RungeKutta4.c
3. Modifique o seu programa para utilizar este método. O protótipo é:
void RungeKutta4(double *S, double t, double dt, int N,
void (*dydx)(double t, const double *S, double f[]));
Repare que ela já atualiza os valores dos S’s, portanto as linhas
derivadas(S,f);
for (i=0; i<2; i++)
{S[i] = S[i]+f[i]*dt;}
devem ser substituı́das por
RungeKutta4( S, t, dt, 2, derivadas);

13
4. Escreva um programa que imprima a solução analı́tica
x(t) = A cos(ωt + φ).
Os valores de A e φ são obtidos fazendo-se t = 0.
es curvas através do gráfico x(t)
5. Compare os resultados das trˆ

14