Professional Documents
Culture Documents
Resumo
II. Introdução
As equações diferenciais ordinárias são utilizadas na descrição de
fenômenos da natureza. Entretanto, nem sempre é possível obter a solução
analítica para tais equações, para isso utilizam-se métodos numéricos com
o objetivo de encontrar a solução mais aproximada.
Os métodos numéricos comumente utilizados para resolverem esse
tipo de equação podem ser explícitos ou implícitos. Os métodos explícitos
são de fácil implementação e consistem em cálculos simples e repetitivos,
de forma que são especialmente apropriados para serem feitos em
computador. Alguns métodos explícitos conhecidos são:
1. Método de Euler
2. Método de Runge Kutta ordem 2
3. Método de Runge Kutta ordem 3
4. Método de Runge Kutta ordem 4
5. Método de Runge Kutta Gill
6. Método de Runge Kutta Fehlberg
Nesse sentido, no presente trabalho teremos o enfoque nos métodos
iterativos de Runge-Kutta e Runge-Kutta Fehlberg, para a resolução de
equações de EDO’s.
III. Objetivos
O presente seminário tem como objetivos:
Apresentar o conceito de equações diferenciais ordinárias;
Explicar a teoria acerca dos métodos de Runge-Kutta e Runge-
Kutta-Fehlberg na resolução de problemas de valor inicial em
EDO’s;
Descrever os métodos estudados;
Analisar as vantagens e desvantagens dos métodos abordados;
Mostrar aplicações mais relevantes dos métodos em diversas
áreas;
Determinar algoritmos que resolvam EDO’s com base nos
métodos estudados;
Exemplificar os métodos.
IV. Fundamentação Teórica
Os métodos de Runge-Kutta
Os métodos de Runge-Kutta são uns dos métodos mais bem
conhecidos e amplamente utilizados, dentro da classe de métodos de
equações diferencias, aos quais são apresentados em diferentes ordens de
precisão.
Dessa maneira, são métodos de passo simples que requerem apenas
derivadas de primeira ordem e que podem fornecer informações precisas
com erros de truncamento de ordem h2, h3, h4, entre outros.
Nesse contexto, cada método de Runge-Kutta consiste em comparar
um polinômio de Taylor apropriado para eliminar o cálculo das derivadas.
Logo, fazendo-se várias avaliações da função a cada passo.
Consequentemente, o método de Runge-Kutta de primeira ordem é o
método de Euler, e os métodos de Runge Kutta mais utilizados são os de
quarta ordem, tendo em vista que não vale a pena utilizar os métodos de
ordem superior a quatro.
Logo, o método geral de Runge Kutta de R estágios tem a seguinte
forma:
R
[1] ∅ ( x . y . h ) =∑ c r k r
r =1
Onde,
k 1=f (x , y)
r −1
( )
k r =f x+ ar h , y +h ∑ brs k s ; r=2,3, … , R .
s=1
r−1
ar =∑ b rs ; r =2,3,… , R .
s=1
[2] ∅ ( x . y . h ) =c 1 k 1+ c2 k 2
Onde,
[3] k 1=f (x , y)
[4] k 2=f ( x+ a2 h , y+ h b21 k 1)
[5] a2=b21
c 1+ c 2=1
1
c 2 a2=
2
Resolução:
Devemos utilizar a equação [6], e, portanto, designar as constantes
k1 e k2. Assim, tem-se que y 0=2 e x 0=0 .
Para a iteração 0:
y 1= y 0 +h k 2
k 1=f ( x 0 , y 0 ) =f ( 0,2 ) =2
1 1 1 1
( 2 2 ) (
k 2=f x 0 + h , y 0 + h k 1 =f 0+ 0,1, 2+ 0,1.2 =2,05
2 2 )
Desse modo,
y 1=2+0,1 .2,05
y 1=2,205
Logo, fazendo analogamente as demais iterações, obtemos os dados
que podem ser expressos na tabela a seguir:
N Xn Yn
0 0,000000 2,000000
1 0,100000 2,205000
2 0,200000 2,421025
3 0,300000 2,649233
4 0,400000 2,890902
5 0,500000 3,147447
c 1+ c 2+ c3 =1
1
c 2 a2+ c 3 a 3=
2
1
c 3 b32 a 2=
6
2 2 1
c 2 a2 + c3 a 3 =
3
Método de Heun
1 3
Quando assumimos c 1= e c 2=0 , podemos obter que c 3= ,
4 4
1 2 2
a2= , a3 = e b32= Portanto:
3 3 3
h
[8] y n+1 = y n+ (k 1 +3 k 3 )
4
Onde,
k 1=f ( x n , y n)
1 1
k 2=f ( x n + h , y n + h k 1 )
3 3
2 2
k 3=f (x n + h , y n + h k 2 )
3 3
Método de Nystrom
1
Quando assumimos c 2=c 3 e a2=a3 , podemos obter que c 1=
4
3 2 2
c 2=c 3= , a2=a3= , b32= . Portanto:
8 3 3
h 3
[9] y n+1 = y n+ (k 1 + (k 2 +k 3 ))
4 2
Onde,
k 1=f ( x n , y n)
2 2
k 2=f ( x n + h , y n + h k 1 )
3 3
2 2
k 3=f (x n + h , y n + h k 2 )
3 3
Exemplo 2: Utilize o método de Heun para resolver o problema de
valor inicial (p.v.i), considerando um passo h=0,2.
y ' = y−2 x
y (1)=0
x ∈[1.0,2.0]
Resolução:
Devemos utilizar a equação [8], e, portanto, designar as constantes
k1, k2 e k3. Assim, tem-se que y 0=0 e x 0=1 .
Para a iteração 0:
h
y 1= y 0 + (k 1 +3 k 3 )
4
2 2 2 2
k =f ( x + h , y + h k )=f (1+ 0,2,0+ 0,2.−2,266666667 )=−2,5689
3 0 0 2
3 3 3 3
Desse modo,
0,2
y 1=0+ (−2+ 3.−2,5689)
4
y 1=−0,485333
Logo, fazendo analogamente as demais iterações, obtemos os dados
que podem ser expressos na tabela a seguir:
N Xn Yn
0 1,000000 0,000000
1 1,200000 -0.485333
2 1,400000 -1.166620
3 1,600000 -2.087232
4 1,800000 -3.300140
5 2,000000 -4.870038
Segundo método:
h
[11] y n+1 = y n+ (k 1+3 k 2+3 k 3 +k 4 )
8
Onde,
k 1=f (x n , y n)
1 1
k 2=f ( x n + h , y n + h . k 1)
3 3
2 1
k 3=f (x n + h , y n− h. k 1 +h k 2)
3 3
k 4=f ( x n+ h , y n+ h. k 1−h . k 2 +h . k 3)
Resolução:
Devemos utilizar a equação [10], e, portanto, designar as constantes
k1, k2, k3 e k4. Assim, tem-se que y 0=2 e x 0=0 .
Para a iteração 0:
h
y 1= y 0 + (k 1 +2 k 2 +2 k 3 +k 4)
6
k 1=f ( x 0 , y 0 ) =f ( 0,2 ) =0
1 1 1 1
( 2 2 ) ( 2 2 )
k 2=f x 0 + h , y 0 + h . k 1 =f 0+ 0,1,2+ 0,1.0 =0,05
1 1 1 1
k =f ( x + h , y + h . k )=f ( 0+ 0,1,2+ 0,1.0,05 )=0,0475
3 0 0 2
2 2 2 2
k 4=f ( x 0 +h , y 0 +h . k 3 ) =f ( 0+ 0,1,2+ 0,1.0,0475 )=0,0952
Desse modo,
0,1
y 1=2+ ( 0+2.0,05+2.0,0475+0,0952)
6
y 1=2,004837
N Xn Yn
0 0,000000 2,000000
1 0,100000 2,004837
2 0,200000 2,018731
3 0,300000 2,040818
Erro local de truncamento
2 m ( y n+1,2 − y n+1,1 )
[12] Et =K hm1 +1=
2m −1
1 128 2197 1 2
E=−h ( k− k− k + k + k)
360 1 4375 3 75240 4 50 5 55 6
Resolução:
Devemos utilizar as equações [13] e [14], e, portanto, designar as
constantes k1, k2, k3, k4, k5 e k6. Assim, tem-se que y 0=2 e x 0=0 .
Para a iteração 0:
37 250 125 512
y 1= y 0 +h( k + k + k − k)
378 1 621 3 594 4 1771 6
2825 18575 13525 255 6
y 1= y 0 +h( k1 + k3 + k 4+ k5 + k6 )
27648 48384 55296 14336 4
k 1=f ( x 0 , y 0 ) =f ( 0,2 ) =0
1 1 1 1
( 5 5 5) (
k 2=f x 0 + h , y 0 + h . k 1 =f 0+ 0,1,2+ 0,1.0 =0,02
5 )
3 3 9
0+
10
0,1,2+0,1 (
0+ 0,02 =0,0296
40 40 )
3 3 9
x 0 + h , y 0 +h
10 40 (
k 1 + k 2 =f ¿
40 )
k 3=f ¿
3 3 9 6
0+ 0,1,2+0,1
5 10 (
0− 0,02+ 0,0296 =0,0583
10 5 )
3 3 9 6
x 0+ h , y 0+ h
5 10 10 (
k 1 − k 2 + k 3 =f ¿
5 )
k 4=f ¿
5 70 35
0+0,1,2+0,1 ( −11
54
0+ 0,02− 0,0296 + 0,0583 )=0,0951
2 27 27
5 70 35
x +h , y + h ( k + k − k + k )=f ¿
−11
0 0 1 2 3 4
54 2 27 27
k 5=f ¿
7 1631 175 575 44275 253
0+ 0,1,2+ 0,1
8 (
55296
0+
512
0,02+
13824
0,0296+
110592
0,0583+
4096 )
0,0951 =0,0838
Desse modo,
Aproximação de quarta ordem:
37 250 125 512
y 1=2+h( 0+ 0,0296+ 0,0583− 0,0838)
378 621 594 1771
y 1=2,004837
Aproximação de quinta ordem:
2825 18575 13525 255 6
y 1=2+h( 0+ 0,0296+ 0,0583+ 0,0951+ 0,0838)
27648 48384 55296 14336 4
y 1=2,009660
Logo, fazendo analogamente as demais iterações, obtemos os dados
que podem ser expressos na tabela a seguir:
ANEXOS
Método de Runge-Kutta-Fehlberg
%MÉTODO DE RUNGE-KUTTA-FELHBERG
%PROGRAMADORA: Glauciane Israely
printf('ALGORITMO PARA O CÁLCULO DE P.V.I POR MEIO DE RUNGE-
KUTTA-FEHLBERG\n\n')
clc;
clear all;
x0=input('Insira o primeiro ponto x0:');
x1=input('Insira o segundo ponto x1:');
y0=input('Insira o primeiro ponto y0:');
h=input('Insira o tamanho do passo:');
printf('\n iteração 0 --> yi=%f xi=%f \n',y0,x0)
n=(x1-x0)/h;
it=1;
x=x0;
y=y0;
k1=-y+x+2;
x=x0+(h/5);
y=y0+(k1*h/5);
k2=-y+x+2;
x=x0+(3*h/10);
y=y0+(3*h*k1/40)+(9*h*k2/40);
k3=-y+x+2;
x=x0+(3*h/5);
y=y0+(3*k1*h/10)-(9*k2*h/10)+(6*h*k3/5);
k4=-y+x+2;
x=x0+h;
y=y0-(11*k1*h/54)+(5*h*k2/2)-(70*k3*h/27)+(35*h*k4/27);
k5=-y+x+2;
x=x0+(7*h/8);
y=y0+(1631*k1*h/55296)+(175*h*k2/512)+(575*k3*h/13824)+(44275*
h*k4/110592)+(253*h*k5/4096);
k6=-y+x+2;
y0=y0+(((37*k1/378)+(250*k3/621)+(125*k4/594)+(k6*512/1771))*h);
z0=y0+
(((2825*k1/27648)+(18575*k3/48384)+(13525*k4/55296)+(255*k5/143
36)+(k6/4))*h);
x0=x0+h;
printf('\n QUARTA ORDEM: iteração %d --> yi=%f xi=%f \n',it,y0,x0)
printf('\n QUINTA ORDEM: iteração %d --> yi=%f xi=%f \n',it,z0,x0)
for i=1:n
it=it+1;
x=x0;
y=y0;
k1=-y+x+2;
x=x0+(h/5);
y=y0+(k1*h/5);
k2=-y+x+2;
x=x0+(3*h/10);
y=y0+(3*h*k1/40)+(9*h*k2/40);
k3=-y+x+2;
x=x0+(3*h/5);
y=y0+(3*k1*h/10)-(9*k2*h/10)+(6*h*k3/5);
k4=-y+x+2;
x=x0+h;
y=y0-(11*k1*h/54)+(5*h*k2/2)-(70*k3*h/27)+(35*h*k4/27);
k5=-y+x+2;
x=x0+(7*h/8);
y=y0+(1631*k1*h/55296)+(175*h*k2/512)+(575*k3*h/13824)+(442
75*h*k4/110592)+(253*h*k5/4096);
k6=-y+x+2;
y0=y0+(((37*k1/378)+(250*k3/621)+(125*k4/594)+
(k6*512/1771))*h);
z0=y0+
(((2825*k1/27648)+(18575*k3/48384)+(13525*k4/55296)+(255*k5/
14336)+(k6/4))*h);
x0=x0+h;
printf('\n QUARTA ORDEM: iteração %d --> yi=%f xi=%f \n',it,y0,x0)
printf('\n QUINTA ORDEM: iteração %d --> yi=%f xi=%f \n',it,z0,x0)
end