Академический Документы
Профессиональный Документы
Культура Документы
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:
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
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
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
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
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