Você está na página 1de 9

1

ATENÇÃO!! Caro estudante, primeiro leia atentamente os presentes apontamentos relativos


a Resolução numérica de Equações Diferenciais Ordinárias através dos Métodos de Euler e
de Runge-Kutta (ordens 2 e 4). Discuta todos os exemplos apresentados no texto, e, para
a exercitação e consolidação da matéria, resolva os exercícios constantes do Programa de
Aulas Práticas da disciplina. As dúvidas decorrentes da leitura do texto, da compreensão
dos exemplos e da interpretação dos exercícios propostos poderão ser esclarecidas através das
plataformas virtuais disponíveis.
BOM TRABALHO!

Aula teórica: 13 08.09.2021


Tema 8: Resolução numérica de equações diferenciais ordinárias.
- Método de Euler e Método de Runge-Kutta (ordens 2 e 4).
. .

Objectivos
No fim desta aula, os estudantes devem ser capazes de:
• Resolver equações diferenciais através dos métodos de Euler e Runge-Kutta (ordens 2 e 4).
. .

8. Resolução numérica de equações diferenciais ordinárias


Consideremos o problema de determinação da solução de equação diferencial ordinária da pri-
meira ordem, com condição inicial, isto é, uma equação do tipo
{ ′
y = f (x, y)
, a≤x≤b (1)
y(x0 ) = y0

A solução numérica da equação diferencial (1) é uma função tabelada que pode ser dada pelo
conjunto T = {(x0 , y0 ), (x1 , y1 ), (x2 , y2 ), ..., (xn , yn )} que satisfaz, simultaneamente, a equação
y ′ = f (x, y) e a condição y(x0 ) = y0 no intervalo a ≤ x ≤ b. Para ilustrar o comporta-
mento da solução numérica de uma equação diferencial, no intervalo [a, b], frequentemente,
faz-se uma representação gráfica da função T = {(x0 , y0 ), (x1 , y1 ), (x2 , y2 ), ..., (xn , yn )}, onde
a = x0 < x1 < x2 < ... < xn−1 < xn = b.

Definição 1 (Passo simples).


Um método é de passo simples quando a aproximação yi+1 for calculada somente a partir do
valor yi do passo anterior. Seja φ uma função incremento, então um método de passo simples
se define da seguinte forma:

yi+1 = yi + hφ(x, y, h)

Definição 2 (Ordem).
Um método de passo simples é de ordem n se a função incremento φ for tal que

yi+1 = yi + hφ(x, y, h) + O(hn+1 )


2

8.1. Método de Euler1


Considere a fórmula de desenvolvimento da função f (x) através da série de Taylor2 , isto é,
′′ ′′′
(x − x0 )f ′ (xo ) (x − x0 )2 f (xo ) (x − x0 )3 f (xo )
f (x) = f (x0 ) + + + + ... (2).
1! 2! 3!
Usando os dois primeiros termos da série (2), temos:

(x − x0 )f ′ (x0 )
f (x) ≈ f (x0 ) +
1!
Fazendo x − x0 = h ⇐⇒ x = x0 + h.
A partir de (1), temos y ′ = f (x, y) =⇒ y ′ (x0 ) = f (x0 , y(x0 )) = f (x0 , y0 ). Portanto,

f (x0 + h) ≈ f (x0 ) + h · f (x0 , y0 ) ⇐⇒ y1 ≈ y0 + h · f (x0 , y0 ), y0 = f (x0 )

Considerando que x ∈ [a; b], definimos o algoritmo do método de Euler:

b−a
x0 = a, y0 = f (x0 ), h =
n
i = 0, 1, 2, ..., n.
yi+1 = yi + h · f (xi , yi )
xi+1 = xi + h

Exemplo 1. Utilizando o método de Euler, resolva a equação y ′ = −xy, y(0) = 1 no intervalo


[0; 0.5], tomando h = 0.1.

Resolução
x0 = 0, y0 = 1
yi+1 = yi − 0.1 · (xi ) · (yi )
Para i = 0 =⇒ y1 = y0 − 0.1 · (x0 · y0 ) = 1 − 0, 1 · (0 · 1) = 1 e x1 = x0 + 0.1 = 0 + 0.1 = 0.1
Para i = 1 =⇒ y2 = y1 − 0.1 · (x1 · y1 ) = 1 − 0.1 · 0.1 = 0.99

Procedendo de modo análogo e apresentando os resultados numa tabela, temos:

Tabela 1 (Resultado obtido através do método de Euler).


i xi yi
0 0.0 1.0000
1 0.1 1.0000
2 0.2 0.9900
3 0.3 0.9702
4 0.4 0.9411
5 0.5 0.9035

1
Leonhard Euler (1707–1783) — matemático alemão
2
Brook Taylor (1685–1731) — matemático inglês
3

O método de Euler não oferece uma exactidão adequada, porém pode ser usado para a obtenção
de uma visão geral sobre a variação da solução. Atendendo a simplicidade da equação consi-
derada no exemplo anterior, podemos mostrar esta situação, determinando a solução exacta e
compará-la com a obtida através do método de Euler. A tabela e a figura abaixo ilustram os
resultados obtidos:

Tabela 2 (Comparação do resultado exacto com o obtido através do método de Euler).


yiEuler yiexacta = e−xi /2 Erroi = |yiEuler − yiexacta |
2
i xi
0 0.0 1.0000 1.0000 0.0000
1 0.1 1.0000 0.9950 0.0050
2 0.2 0.9900 0.9802 0.0098
3 0.3 0.9702 0.9560 0.0142
4 0.4 0.9411 0.9231 0.0180
5 0.5 0.9035 0.8825 0.0210

Figura 1 (Comparação do resultado exacto com o obtido através do método de Euler).

A partir da tabela e da figura anteriores, se observa que com o incremento de x, a função de


aproximação (solução aproximada) se distancia da função exacta (solução exacta).

8.2. Métodos de Runge-Kutta


É fácil observar que a exactidão dos resultados obtidos através do método de Euler pode ser
melhorada com a redução de h. No entanto, se a exactidão desejada for elevada, a redução do
h pode acarretar um grande esforço computacional.
Uma melhor exactidão de solução da equação (1) pode ser obtida através do emprego dos
métodos de Runge-Kutta. Os métodos de Runge-Kutta classificam-se segundo a ordem, em
conformidade com a definição 2.

8.2.1. Métodos de Runge-Kutta de segunda ordem (RK2)


Existem vários métodos de Runge-Kutta de segunda ordem e, nesta aula, consideraremos os
comummente conhecidos como métodos de Euler modificado e melhorado:
4

1. Algorítmo do Método de Euler modificado

b−a
x0 = a, y0 = y(x0 ), h =
n
i = 0, 1, 2, ..., n.
(i)
k1 = f (xi , yi )
( )
(i) h h (i)
k2 = f xi + , yi + k1
2 2
(i)
yi+1 = yi + h · k2

xi+1 = xi + h

2. Algorítmo do Método de Euler melhorado

b−a
x0 = a, y0 = y(x0 ), h =
n
i = 0, 1, 2, ..., n.
(i)
k1 = f (xi , yi )
(i) (i)
k2 = f (xi + h, yi + hk1 )
h ( (i) (i)
)
yi+1 = yi + · k1 + k2
2
xi+1 = xi + h

Exemplo 2. Utilizando o método de Euler melhorado, resolva a equação y ′ = −xy, y(0) = 1


no intervalo [0, 0.5], com h = 0.1.

Resolução
Aplicando o algoritmo do método de Euler melhorado, obtemos as seguintes fórmulas:
f (x, y) = −xy, x0 = 0, y0 = 1, h = 0.1;
(i)
k1 = f (xi , yi ) = −xi · yi
(i) (i)
k2 = −(xi + 0.1)(yi + 0.1 · k1 )
h ( (i) (i)
)
yi+1 = yi + k1 + k2
2
xi+1 = xi + h
5

(i) (i)
Agora determinemos os valores das componentes k1 , k2 , yi , xi , i = 0, 1, 2, ....

Para i = 0, temos:
(0)
k1 = −x0 · y0 = −0 · 1 = 0
(0) (0)
k2 = −(x0 + 0.1)(y0 + 0.1 · k1 ) = −(0 + 0.1)(1 + 0.1 · 0) = −0.1000
0.1 ( (0) (0)
) 0.1
y1 = y0 + k1 + k2 =1+ (0 − 0.1000) = 0.9950
2 2
x1 = x0 + 0.1 = 0 + 0.1 = 0.1

Para i = 1, temos:
(1)
k1 = −x1 · y1 = −0.1 · 0.9950 = −0.0995
(1) (1)
k2 = −(x1 + 0.1)(y1 + 0.1 · k1 ) = −(0.1 + 0.1)[0.9950 + 0.1 · (−0.0995)] = −0.1970
0.1 ( (1) (1)
) 0.1
y2 = y1 + k1 + k2 = 0.9950 + (−0.0995 − 0.1970) = 0.9802
2 2
x2 = x1 + 0.1 = 0.1 + 0.1 = 0.2

Procedendo da mesma forma para i = 2, 3, 4 e apresentando os resultados numa tabela, temos:

Tabela 3 (Resultados obtidos através do método de Euler melhorado).


(i) (i)
i xi yi k1 k2
0 0.0 1.0000 0.0000 −0.1000
1 0.1 0.9950 −0.0995 −0.1970
2 0.2 0.9802 −0.1960 −0.2882
3 0.3 0.9560 −0.2868 −0.3709
4 0.4 0.9231 −0.3692 −0.4431
5 0.5 0.8825 − −
6

8.2.1. Métodos de Runge-Kutta de quarta ordem (RK4)


Existem vários métodos de RK4 e o mais utilizado se descreve através do seguinte algorítmo:

b−a
x0 = a, y0 = y(x0 ), h =
n
i = 0, 1, 2, ..., n.
(i)
k1 = f (xi , yi )
( )
(i) h h (i)
k2 = f xi + , yi + k1
2 2
( )
(i) h h (i)
k3 = f xi + , yi + k2
2 2
( )
(i) (i)
k4 = f xi + h, yi + hk3
h ( (i) (i) (i) (i)
)
yi+1 = yi + k + 2k2 + 2k3 + k4
6 1
xi+1 = xi + h

Quando se pretende resolver a equação (1) através do método de RK4, com uma precisão
b−a
ε dada, o h pode ser calculado através da fórmula h = , onde o n é um número natural
n
escolhido de tal forma que h4 < ε. Deste modo, o número de subintervalos de [a, b] é estimado
através da seguinte relação:
b−a
n> √ .
4
ε

Exemplo 3. Utilizando o método de Runge-Kutta de ordem 4, resolva a equação y ′ = −xy, y(0) =


1 no intervalo [0, 0.5], com h = 0.1.

Resolução
Aplicando o algoritmo do método RK4, obtemos as seguintes fórmulas:
h
x0 = 0, y0 = 1, h = 0.1, = 0.05, f (x, y) = −xy .
2
(i)
k1 = f (xi , yi ) = −xi · yi
(i) (i)
k2 = −(xi + 0.05)(yi + 0.05 · k1 )
(i) (i)
k3 = −(xi + 0.05)(yi + 0.05 · k2 )
(i) (i)
k4 = −(xi + 0.1)(yi + 0.1 · k3 )
h ( (i) (i) (i) (i)
)
yi+1 = yi + · k1 + 2k2 + 2k3 + k4
6
xi+1 = xi + h.
7

(i) (i) (i) (i)


Agora determinemos os valores das componentes k1 , k2 , k3 , K4 , yi , xi , i = 0, 1, 2, ....

Para i = 0, temos:
h
x0 = 0, y0 = 1, h = 0.1, = 0.05
2
(0)
k1 = −x0 · y0 = −0 · 1 = 0
(0) (0)
k2 = −(x0 + 0.05)(y0 + 0.05 · k1 ) = −(0 + 0.05)(1 + 0.05 · 0) = −0.05
(0) (0)
k3 = −(x0 + 0.05)(y0 + 0.05 · k2 ) = −(0 + 0.05)[1 + 0.05 · (−0.05)] = −0.0499
(0) (0)
k4 = −(x0 + 0.1)(y0 + 0.1 · k3 ) = −(0 + 0.1)[1 + 0.1 · (−0.0499)] = −0.0995
0.1 ( (0) (0) (0) (0)
) 0.1
y1 = y0 + · k1 + 2k2 + 2k3 + k4 = 1+ · [0 + 2 · (−0.05) + 2 · (−0.0499) − 0.0995]
6 6
=⇒ y1 = 0.9950

x1 = x0 + 0.1 = 0 + 0.1 = 0.1

Para i = 1, temos:
(1)
k1 = −x1 · y1 = −0.1 · 0.9950 = −0.0995
(1) (1)
k2 = −(x1 + 0.05)(y1 + 0.05 · k1 ) = −(0.1 + 0.05)[1 + 0.05 · (−0.0995)] = −0.1485
(1) (1)
k3 = −(x1 + 0.05)(y1 + 0.05 · k2 ) = −(0.1 + 0.05)[0.9950 + 0.05 · (−0.1485)] = −0.1481
(1) (1)
k4 = −(x1 + 0.1)(y1 + 0.1 · k3 ) = −(0.1 + 0.1)[0.9950 + 0.1 · (−0.1481)] = −0.1960
0.1 ( (1) (1) (1) (1)
) 0.1
y2 = y1 + · k1 + 2k2 + 2k3 + k4 = 0.9950 + · [−0.0995 + 2 · (−0.1485) +
6 6
+ 2 · (−0.1481) − 0.1960] = 0.9802

Procedendo da mesma forma para i = 2, 3, 4 e apresentando os resultados numa tabela, temos:

Tabela 4 (Resultados obtidos através do método RK4).


(i) (i) (i) (i)
i xi yi k1 k2 k3 k4
0 0.0 1.0000 0.0000 −0.05 −0.0499 −0.0995
1 0.1 0.9950 −0.0995 −0.1485 −0.1481 −0.1960
2 0.2 0.9802 −0.1960 −0.2426 −0.2420 −0.2868
3 0.3 0.9560 −0.2868 −0.3296 −0.3288 −0.3692
4 0.4 0.9231 −0.3692 −0.4071 −0.4062 −0.4412
5 0.5 0.8825 − − − −

Para verificar o alto grau de exactidão dos métodos de Runge-Kutta, neste caso em que a
equação diferencial considerada é muito simples, podemos comparar a solução exacta determi-
8

nada no exemplo 1 com as obtidas através destes métodos (RK2 e RK4) nos exemplos 2 e 3
(compare a quarta coluna da tabela 2 do exemplo 1 com a terceira coluna das tabelas 3 e 4 dos
exemplos 2 e 3, respectivamente).

Exemplo 4. Seja a equação diferencial y ′ = e−x ·cos(x+y), x0 = 2.15, y0 = 1.4828 e h = 0.15.


Calcule os valores de y1 , y2 e y3 da função-solução usando o método de RK4.

Resolução
f (x, y) = e−x · cos(x + y)
x0 = 2, 15; y0 = 1, 4828
h
h = 0, 15; = 0, 0750
2
Determinemos as fórmulas para determinar yi

k1 = f (xi , yi ) = e−xi · cos(xi + yi )


(i)

( )
h h (i)
= e−xi +0,0750 · cos(xi + 0, 0750 + yi + 0, 0750 · k1 )
(i) (i)
k2 = f xi + , yi + k1
2 2
( )
h h (i)
= e−xi +0,0750 · cos(xi + 0, 0750 + yi + 0, 0750 · k2 )
(i) (i)
k3 = f xi + , yi + k2
2 2
( )
k4 = f xi + h, yi + hk3 = e−xi +0,15 · cos(xi + 0, 15 + yi + 0, 15 · k3 )
(i) (i) (i)

h ( )
(i) (i) (i) (i)
yi+1 = yi + (k1 + 2k2 + 2k3 + k4 ) = yi + 0, 0250 · k1 + 2k2 + 2k3 + k4
6
xi+1 = xi + h, i = 0, 1, 2, ...

Determinemos os valores de yi para i = 0, 1, ...


 (0)

 k1 = e−x0 · cos(x0 + y0 )



 k2 = e−x0 +0,0750 · cos(x0 + 0, 0750 + y0 + 0, 0750 · k1 )
(0) (0)


 k (0) = e−x0 +0,0750 · cos(x + 0, 0750 + y + 0, 0750 · k (0) )
3 0 0 2
Para i = 0=⇒ (0) −x0 +0,15 (0) ⇐⇒

 k = e · cos(x
( + 0, 15 + y + 0, 15 · k) )


4 0 0 3


(0) (0)
y1 = y0 + 0, 0250 · k1 + 2k2 + 2k3 + k4
(0) (0)



x1 = x0 + h
 (0)

 k1 = e−2,15 · cos(2, 15 + 1, 4828) = −0, 1027



 k2 = e−2,15+0,0750 · cos(2, 15 + 0, 0750 + 1, 4828 + 0, 0750 · (−0, 1027)) = −0, 0916
(0)

 (0)
⇐⇒ k3 = e−2,15+0,0750 · cos(2, 15 + 0, 0750 + 1, 4828 + 0, 0750 · (−0, 0916)) = −0, 0916

 k4 = e−2,15+0,15 · cos(2, 15 + 0, 15 + 1, 4828 + 0, 15 · (−0, 0916)) = −0, 0812
(0)



 y = 1, 4828 + 0, 0250 · (−0, 1027 + 2(−0, 0916) + 2(−0, 0916) − 0, 0812) = 1, 4690

 1
x1 = 2, 15 + 0, 15
9

 (1)

 k1 = e−x1 · cos(x1 + y1 )



 k2 = e−x1 +0,0750 · cos(x1 + 0, 0750 + y1 + 0, 0750 · k1 )
(1) (1)


 k (1) = e−x1 +0,0750 · cos(x + 0, 0750 + y + 0, 0750 · k (1) )
3 1 1 2
Para i = 1=⇒ (1) −x1 +0,15 (1) ⇐⇒

 k4 = e · cos(x
( 1 + 0, 15 + y1 + 0, 15 · k)3 )




(1) (1)
y2 = y1 + 0, 0250 · k1 + 2k2 + 2k3 + k4
(1) (1)



x2 = x1 + h
 (1)

 k1 = e−2,3000 · cos(2, 3000 + 1, 4690) = −0, 0812



 k2 = e−2,3000+0,0750 · cos(2, 3000 + 0, 0750 + 1, 4690 + 0, 0750 · (−0, 0812)) = −0, 0714
(1)

 (1)
⇐⇒ k3 = e−2,3000+0,0750 · cos(2, 3000 + 0, 0750 + 1, 4690 + 0, 0750 · (−0, 0714)) = −0, 0713

 k4 = e−2,3000+0,15 · cos(2, 3000 + 0, 15 + 1, 4690 + 0, 15 · (−0, 0713)) = −0, 0621
(1)



 y = y1 + 0, 0250 · (−0, 0812 + 2(−0, 0714) + 2(−0, 0713) − 0, 0621) = 1, 4583

 2
x2 = 2, 3000 + 0, 15 = 2, 4500

Procedendo de modo similar para i = 2 e 3 e apresentando os resultados numa tabela, te-


mos:
(i) (i) (i) (i)
i xi yi k1 k2 k3 k4
0 2, 1500 1, 4828 −0, 1027 −0, 0916 −0, 0916 −0, 0812
1 2, 3000 1,4690 −0, 0812 −0, 0714 −0, 0713 −0, 0621
2 2, 4500 1, 4583 −0, 0621 −0, 0536 −0, 0536 −0, 0457
3 2, 6000 1, 4503 − − − −

Resposta: y1 = 1, 4690; y2 = 1, 4583 e y3 = 1, 4503

Você também pode gostar