Escolar Documentos
Profissional Documentos
Cultura Documentos
Solucao EDO Pelos Metodos Euler Runge-Kutta PDF
Solucao EDO Pelos Metodos Euler Runge-Kutta PDF
Giovani Baratto
Fevereiro de 2007
ndice
1 Mtodo de Euler......................................................................................... 1
1.1 Derivao da Frmula de Euler ......................................................... 1
1.2 Exemplo Usando o Mtodo de Euler .................................................. 2
2 Mtodo de Runge-Kutta............................................................................. 5
2.1 Exemplo Usando o Mtodo de Runge-Kutta...................................... 7
3 Equaes Ordinrias de Ordem de 2 Ordem ........................................... 8
3.1 Soluo Usando o Mtodo de Euler.................................................... 9
3.2 Soluo Usando o Mtodo de Runge-Kutta ..................................... 11
Neste texto ser apresentado o mtodo de Euler e o mtodo de Runge-Kutta
para a soluo de equaes diferenciais ordinrias.
1 Mtodo de Euler
dy
Seja uma funo = f ( x, y ) com a condio de contorno y = yn quando
dx
x = xn . Da Figura 1, observa-se que o valor de yn +1 , em x = xn +1 , dado por:
yn +1 = yn + y (1.1)
dy
y x (1.3)
dx
yn +1 = yn + ( xn +1 xn ) f ( x n , yn ) (1.4)
Na Figura 1, observa-se que quanto menor o valor da diferena entre xn +1 e
xn (desprezando os erros causados pela representao finita dos nmeros
pelos computadores), menor o erro da estimativa para yn +1 . Todavia, o
nmero de computaes para um intervalo aumenta medida que a
diferena entre xn +1 e xn reduzida. Define-se o passo h como sendo igual a:
h = xn +1 xn (1.5)
Usando a equao (1.5) nas equaes (1.5) e (1.4), tem-se:
xn +1 = xn + h (1.6)
e
1
yn +1 = yn + h f ( xn , yn ) (1.7)
Estimativa
y
yn+1
Erro
f(x)
yn
Valores
iniciais
x = h
xn xn+1 x
Figura 1 Ilustrao do mtodo de Euler.
dy
= 1 x + 4 y (1.8)
dx
y (0) = 1 (1.9)
2
A soluo da equao diferencial (1.8) com a condio de contorno (1.9)
conhecida:
1 3 19
y ( x ) = x + e 4 x (1.10)
4 16 16
xn +1 = xn + h (1.11)
e
yn +1 = yn + h f ( xn , yn )
(1.12)
= yn + h (1 x + 4 y )
n xn yn y
0 0,000 1,000000 1,000000
1 0,001 1.005000 1.005010
2 0,002 1.010019 1.010038
3 0,003 1.015057 1.015086
4 0,004 1.020114 1.020153
5 0,005 1.025191 1.025239
... ... ... ...
500 0,500 8.677069 8.712004
1000 1,000 64.382558 64.897803
1500 1,500 473.559790 479.259192
2000 2,000 3484.160803 3540.200110
3
4000 4000 Numrica
Analtica
3500 3500
3000 3000
y(t)
2500 2500
y(t)
2000 2000
1,90 1,92 1,94 1,96 1,98 2,00
1500
1000
500
0
0,0 0,5 1,0 1,5 2,0
t
4
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
2 Mtodo de Runge-Kutta
5
1
yn +1 = yn + h f xn + h, y 1 (1.13)
n+
2 2
1
Na equao (1.13), y 1 o valor de y em xn + h . Uma estimativa do valor
n+ 2
2
Denominando:
k1 = h f ( xn . yn )
1 1 (1.15)
k2 = h f xn + h, yn + k1
2 2
yn +1 = yn + k2 (1.16)
Erro
Runge Kutta
yn +1
n +1
Erro
Euler
y 1
n+
2
yn
h
2
h xn +1xn xn +
2
Figura 3 Ilustrao do mtodo de Runge-Kutta de 2 ordem.
6
O mtodo de Runge-Kutta de 4 ordem tem as seguintes equaes:
k1 = h f ( xn , yn )
h 1
k2 = h f xn + , yn + k1
2 2
h 1
k3 = h f xn + , yn + k2 (1.17)
2 2
k4 = h f ( xn + h, yn + k3 )
1
yn +1 = yn + ( k1 + 2 k2 + 2 k3 + k4 )
6
xn +1 = xn + h (1.18)
n xn yn y
0 0,000 1,000000 1,000000
1 0,001 1.050963 1.050963
2 0,002 1.103903 1.103903
3 0,003 1.158903 1.158903
4 0,004 1.216044 1.216044
5 0,005 1.275416 1.275416
... ...
50 0,500 8.712004 8.712004
100 1,000 64.897798 64.897803
150 1,500 479.259133 479.259192
200 2,000 3540.199525 3540.200110
7
Kutta (Tabela 2), observa-se que neste segundo mtodo a preciso maior,
mesmo com o uso de um passo 10 vezes maior.
A seguir apresentado um programa escrito em C, para a soluo numrica
da equao (1.8).
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
8
d2y dy
2
+ q ( x ) = r ( x, y ) (1.19)
dx dx
dy
z ( x, y ) = (1.20)
dx
dy
= z ( x, y )
dx
(1.21)
dz
= r ( x, y ) q ( x ) z ( x )
dx
dy
= f ( x, y , z )
dx
(1.22)
dz
= g ( x, y , z )
dx
Para a soluo da equao diferencial ordinria de 2 ordem (1.19),
necessrio que as equaes diferenciais ordinrias de primeira ordem,
apresentadas em (1.22) seja resolvidas. A seguir, apresenta-se a soluo
destas equaes, usando o mtodo de Euler e o mtodo de Runge-Kutta.
yn +1 = yn + h f ( xn , yn , zn )
(1.23)
zn +1 = zn + h g ( xn , yn , zn )
d2y dy
2
+ 30 + 200 y = 1000 (1.24)
dx dx
9
y ( 0) = 0
dy (1.25)
=0
dx t =0
dy
=z
dx
(1.26)
dz
= 1000 30 z 200 y
dx
y ( t ) = 5 10 e 10 x + 5 e 20 x (1.27)
n xn yn y
0 0,0 0.000000 0.000000
1 0,01 0.000000 0.045280
2 0,02 0.100000 0.164293
3 0,03 0.270000 0.335876
4 0,04 0.487000 0.543444
5 0,05 0.733500 0.774091
... ...
50 0,5 4.948534 4.932848
70 0,7 4.993735 4.990885
90 0,9 4.999238 4.998766
100 1,0 4.999734 4.999546
10
double f(double x, double y, double z) /* a funo f(x,y,z)=dy/dx */
{
return z;
}
while(xn<xmax){
printf("%i %f %f %f\n",n,xn,yn,y(xn)); /* escreve os valores das variveis */
1
yn +1 = yn + ( k1 + 2 k2 + 2 k3 + k4 )
6
(1.28)
1
zn +1 = zn + ( l1 + 2 l2 + 2 l3 + l4 )
6
onde
11
k1 = h f ( xn , yn , zn )
l1 = h g ( xn , yn , zn )
1 1 1
k2 = h f xn + h, yn + k1 , zn + l1
2 2 2
1 1 1
l2 = h g xn + h, yn + k1 , zn + l1
2 2 2
(1.29)
1 1 1
k3 = h f xn + h, yn + k2 , zn + l2
2 2 2
1 1 1
l3 = h g xn + h, yn + , zn + l2
2 2 2
k4 = h f ( xn + h, yn + k3 , zn + l3 )
l4 = h g ( xn + h, yn + k3 , zn + l3 )
d2y dy
2
+ 30 + 200 y = 1000 (1.30)
dx dx
y ( 0) = 0
dy (1.31)
=0
dx t =0
dy
=z
dx
(1.32)
dz
= 1000 30 z 200 y
dx
y ( t ) = 5 10 e 10 x + 5 e 20 x (1.33)
12
Tabela 4 Resultado da soluo numrica da equao(1.30), usando o mtodo de
Runge-Kutta.
n xn yn y
0 0,0 0.000000 0.000000
1 0,01 0.016667 0.045280
2 0,02 0.123528 0.164293
3 0,03 0.293960 0.335876
4 0,04 0.507390 0.543444
5 0,05 0.748036 0.774091
... ...
50 0,5 4.943575 4.932848
70 0,7 4.992869 4.990885
90 0,9 4.999100 4.998766
100 1,0 4.999680 4.999546
while(xn<xmax){
printf("%i %f %f %f\n",n,xn,yn,y(xn)); /* escreve os valores das
variveis */
13
l1 = h*g(xn, yn, zn);
k2 = h*f(xn+(1/2)*h, yn+(1/2)*k1, zn+(1/2)*l1);
l2 = h*g(xn+(1/2)*h, yn+(1/2)*k1, zn+(1/2)*l1);
k3 = h*f(xn+(1/2)*h, yn+(1/2)*k2, zn+(1/2)*l2);
l3 = h*g(xn+(1/2)*h, yn+(1/2)*k2, zn+(1/2)*l2);
k4 = h*f(xn+h, yn+k3, zn+l3);
l4 = h*g(xn+h, yn+k3, zn+l3);
xn1 = xn + h;
yn1 = yn + (1/6.0)*(k1 + 2*k2 + 2*k3 + k4);
zn1 = zn + (1/6.0)*(l1 + 2*l2 + 2*l3 + l4);
14