You are on page 1of 22

I.

Resumo

No presente seminário, o objetivo principal será solucionar Equações


diferenciais ordinárias (EDO) com o uso do método de Runge-Kutta, como
também o método de Runge-Kutta-Fehlberg. Incialmente têm-se um
problema de valor incial (p.v.i), dado um ponto (Xo,Yo) e encontra-se uma
solução da Φ EDO definida num intervalo [a,b] contendo Xo e satisfazendo
Φ Xo = Yo. O método de Runge-Kutta em que será desenvolvido ao longo
do trabalho, é um dos mais precisos para obter soluções como estas. Desse
modo, o método de Runge-Kutta-Fehlberg é uma otimização do Runge-
Kutta tradicional, tendo em vista o fornecimento de resultados de duas
ordens com os mesmo valores de k. Portanto, enfatiza-se a eficácia e
necessidade em entendê-lo para resolução de problemas como esses, além
de sua aplicação ser cotidiana em vários âmbitos científicos.

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

 Equações diferenciais ordinárias

Em muitos problemas encontrados nas áreas da engenharia, da física,


da biologia e das ciências sociais são formulados por equações que
envolvem a derivada de uma função desconhecida. Sendo assim, uma
equação diferencial é simplesmente uma equação que envolve uma função
desconhecida e algumas de suas derivadas.
Nesse sentido, como exemplo, pode-se considerar a segunda lei de
Newton para o movimento: o vetor momento p ∈ R3 de um corpo sob ação
de uma força F ∈ R3 satisfaz a seguinte equação,
dp
= p' =F
dt
À vista disso, a solução da equação acima é uma função que depende
da variável t, p(t), cuja derivada é diretamente proporcional a função F(t).
Dessa maneira, se conhecer a dependência explícita de F(t) na variável t,
então p(t) é determinada pela integral de F. E ainda, se F(t) depende
também de p, por exemplo, F(t) = f(t,p(t)), então a lei de Newton nesse
caso, é descrita pela equação:
'
p =f (t , p)
A esta última equação denomina-se equação diferencial ordinária de
primeira ordem. Sob esse viés, o termo “ordinária” indica que as derivadas
relacionadas à equação dizem respeito apenas a uma única variável, nesse
caso, t.
Em cumprimento aos objetivos propostos, neste seminário irão ser
abordadas uma classe de equações diferenciais ordinárias denominadas de
problemas de valor inicial, que caracterizam-se pela informação adicional do
valor da função p(t) em algum t=t0, ou seja, p(t0)=p0. Assim, na maioria
dos casos, esta condição é suficiente para garantir que a solução da
equação:
p' =f ( t , p )
p(t 0)=p 0
é única para todo t pertencente ao intervalo em que a solução existe.
Sob esse viés, a grande maioria das equações encontradas não
podem ser solucionadas analiticamente, assim, deve-se recorrer a métodos
numéricos para a resolução de EDO’s.
 Métodos de Runge-Kutta
 Histórico

Carl David Tolmé Runge (1856-1927) nascido em Bremen, Alemanha,


foi um matemático e físico, que trabalhou muitos anos em espectroscopia.
Além disso, é muito famosa a sua observação de polinómios
de interpolação e o seu comportamento quando se aumenta o grau do
polinómio.
Subsequentemente, Martin Wilhelm Kutta (1867-1944) nascido em
Pitschen, Oberschleisien, na Alta Silésia, foi um matemático e engenheiro
hidráulico. Este, por sua vez, trabalhava com aerodinâmica e é, também,
muito conhecido por suas contribuições importantes à teoria clássica de
aerofólio.
Esses dois grandes matemáticos alemães ficaram muito conhecidos
pela criação do método de integração chamado de Runge-Kutta, utilizado
para a solução de equações diferenciais ordinárias, desenvolvido em
Gottingen. Portanto, o método de Runge-Kutta é provavelmente um dos
métodos mais populares.

 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

Nesse sentido, para obter


um método de Runge-Kutta, é
necessário determinar as
constantes cr , ar , brs . Sendo
assim, determina-se essas constantes
comparando com a expansão da função
∅ ( x , y , h) , já definida, em
potências de h , com a função
∅ T (x , y ,h) do método de Taylor, a
fim de obter métodos de
determinada ordem.
Assim, veremos que pode-
se determinar métodos de várias ordens, sendo expostos aqui os de
segunda, terceira e quarta ordem. A figura abaixo ilustra o funcionamento
do método, mostrando, assim, a sua eficiência em comparação com o
método e Euler.

 Métodos de Runge-Kutta de segunda ordem


Para definir as constantes c r , ar , brs para dar forma aos
métodos de Runge-Kutta de 2 estágios, devemos tomar a equação [1],
fazendo isto, obtemos:

[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

Assim, substituindo [3] e [5] em [4], temos que:


k 2=f ( x+ a2 h , y+ h a2 f )

Logo, após o desenvolvimento de k 2 em série de Taylor, e, com


base nisso, escrever ∅ T ( x , y , h ) , pode-se obter que:

c 1+ c 2=1
1
c 2 a2=
2

Nesse contexto, resolvendo esse sistema, obteremos métodos de


Runge-Kutta de ordem 2. Além disso, como o sistema descrito acima possui
duas equações e três incógnitas, o mesmo possui infinitas soluções, e,
portanto, pode-se afirmar que existem infinitos métodos de Runge-Kutta de
2 estágios e ordem 2.
Isto posto, atribuindo um valor para uma das constantes do sistema,
pode-se obter em função desta, as outras duas e assim, formular métodos
de ordem 2.
Os dois métodos mais conhecidos de Runge-Kutta de segunda ordem
são o método de Euler modificado e o método de Euler melhorado, que são
melhor descritos a seguir.
 Método de Euler Modificado
1
Quando assumimos c 1=0 , podemos obter que c 2=1 e a2 = .
2
Portanto:
[6] y n+1 = y n+ h k 2
Onde,
k 1=f ( x n , y n)
1 1
k 2=f ( x n + h , y n+ h k 1)
2 2

 Método de Euler Melhorado


1 1
Quando assumimos c 1= , podemos obter que c 2= e a2=1 .
2 2
Portanto:
h
[7] y n+1 = y n+ (k 1+ k 2)
2
Onde,
k 1=f (x n , y n)
k 2=f ( x n +h , y n +h k 1 )
Exemplo 1: Utilize o método de Euler Modificado para resolver o
problema de valor inicial (p.v.i), considerando um passo h=0,1.
'
y = y−x
y (0)=2
x ∈[0,0.5]

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

 Métodos de Runge-Kutta de terceira ordem


Deste modo, analogamente ao que se fez para formular os métodos
de Runge-Kutta de 2 estágios, definiu-se a relação c r , ar , brs para
designar, também, os métodos de 3 estágios. Logo, utilizando-se dos
mesmos mecanismos que já foram descritos no tópico anterior, obteve-se:

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

Nesse contexto, resolvendo esse sistema, obteremos métodos de


Runge-Kutta de ordem 3. Além disso, como o sistema descrito acima possui
quatro equações e seis incógnitas devemos atribuir valores a duas
variáveis, e assim, obter as outras quatro variáveis.
Os dois métodos mais conhecidos de Runge-Kutta de terceira ordem
são o método de Heun e o método de Nystrom, que são melhor descritos a
seguir.

 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

k 1=f ( x 0 , y 0 ) =f ( 1,0 ) =−2


1 1 1 1
( 3 3 ) ( 3 3 )
k 2=f x 0 + h , y 0 + h k 1 =f 1+ 0,2 , 0+ 0,2.−2 =−2,2667

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

 Métodos de Runge-Kutta de quarta ordem


Sob esse contexto, para os métodos de Runge-Kutta de ordem 4 e
quatro estágios, de forma semelhante ao que se fez para os métodos de
ordem 2 e 3, nos fornece um sistema de 11 equações e 13 incógnitas.
Logo, como já é sabido, existem inúmeras soluções para o sistema.
No entanto, existem dois métodos de Runge-Kutta de quarta ordem que
são mais utilizados, estes por sua vez, são descritos pelas equações a
seguir:
 Primeiro método:
h
[10] y n+1 = y n+ (k 1+ 2k 2+2 k 3+ k 4 )
6
Onde,
k 1=f (x n , y n)
1 1
k 2=f (x n + h , y n+ h .k 1)
2 2
1 1
k 3=f ( x n + h , y n + h . k 2)
2 2
k 4=f (x n+ h , y n+ h. k 3)

 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)

Exemplo 3: Utilize um método de Runge-Kutta de quarta ordem para


resolver o problema de valor inicial (p.v.i), considerando um passo h=0,1.
'
y =− y+ x+2
y (0)=2
x ∈[0,0.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

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,004837
2 0,200000 2,018731
3 0,300000 2,040818
 Erro local de truncamento

Subsequentemente, uma estimativa para o erro local de


truncamento, nos métodos de Runge-Kutta citados, é definido por:

2 m ( y n+1,2 − y n+1,1 )
[12] Et =K hm1 +1=
2m −1

Onde, y n+1,2 e y n+1,1 são os valores de y n com passos


diferentes e m é a ordem do método. Sendo assim, usando esse
procedimento para monitorar o erro, o número de cálculos é triplicado.
Logo, uma melhor forma de obter-se valores com maior precisão e
exatidão nos métodos de Runge-Kutta de terceira e quarta ordem, é a
utilização do critério de Collatz, que é feito através da avaliação da relação:
(k 3 −k 2 )
(k 2 −k 1 )
Assim, se esta relação se torna maior que alguns centésimos, o passo
h deve ser diminuído.
Destarte, na maioria dos casos, a análise do erro do método é feita a
partir da comparação direta entre os valores obtidos em cada método de
Runge-Kutta citados. Isto posto, o método de Runge-Kutta de quarta ordem
fornece resultados muito precisos.
 Métodos de Runge-Kutta-Fehlberg

Erwin Fehlberg (1811-1990) nascido na Alemanha foi um notável


matemático. Dessa maneira, o seu mérito mais importante, foi o
desenvolvimento de sistema de controle de passo para o método de Runge
Kutta, utilizado para a solução numérica de equações diferenciais.
O denominado método de Runge-Kutta-Fehlberg é um
aprimoramento dos métodos de Runge-Kutta, tendo em vista que este é
capaz de a partir de seis avaliações (k) da função fornecer resultados para
quarta e quinta ordem, ao mesmo tempo. Nesse sentido, é possível realizar
a avaliação da solução num único incremento.
Portanto, as fórmulas de Runge-Kutta-Fehlberg mais utilizadas são:

Aproximação de Quarta Ordem


37 250 125 512
[13] y n+1 = y n+ h( k1 + k 3+ k 4− k )
378 621 594 1771 6

Aproximação de Quinta Ordem


2825 18575 13525 255 6
[14] y n+1 = y n+ h( k1 + k3 + k4 + k 5+ k 6)
27648 48384 55296 14336 4
Onde,
k 1=f (x n , y n)
1 1
k 2=f (x n + h , y n + h . k 1)
5 5
3 3 9
x n+ h , y n +h ( k 1+ k 2 )
10 40 40
k 3=f ¿
3 3 9 6
x n+ h , y n + h( k 1− k 2+ k 3 )
5 10 10 5
k 4=f ¿
−11 5 70 35
x n+ h , y n + h( k 1 + k 2− k 3 + k 4 )
54 2 27 27
k 5 =f ¿
7 1631 175 575 44275 253
x n+ h , y n+ h( k1 + k 2+ k3 + k 4+ k)
8 55296 512 13824 110592 4096 5
k 6=f ¿
 Erro local
O erro local para o método de Runge-Kutta-Fehlberg é estimado pela
equação a seguir.

1 128 2197 1 2
E=−h ( k− k− k + k + k)
360 1 4375 3 75240 4 50 5 55 6

Exemplo 4: Utilize um método de Runge-Kutta-Fehlberg para


resolver o problema de valor inicial (p.v.i), considerando um passo h=0,1.
'
y =− y+ x+2
y (0)=2
x ∈[0,0.3]

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

7 1631 175 575 44275 253


x 0 + h , y 0 +h
8 (
55296
k1 +
512
k2 +
13824
k3 +
110592
k 4+ )
4096 5
k =f ¿
k 6=f ¿

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:

QUARTA ORDEM QUINTA ORDEM


N
Xn Yn Xn Yn
0 0,000000 2,000000 0,000000 2,000000
1 0,100000 2,004837 0,100000 2,009660
2 0,200000 2,018731 0,200000 2,032596
3 0,300000 2,040818 0,300000 2,062866

V. Principais vantagens e dificuldades (ou gargalos) do tema


abordado
Dado o exposto, os métodos de Runge-Kutta descritos e estudados,
são muito populares e de grande utilização tendo em vista as suas
vantagens. Estes métodos não precisam do cálculo manual de derivadas,
permitem fácil troca do valor do passo h, são facilmente codificáveis, fazem
várias avaliações da função e são tão precisos quanto se queira.
Os métodos de Runge-Kutta-Fehlberg, por sua vez, são uma
otimização dos métodos de Runge-Kutta tradicionais, visto que este calcula
seis avaliações da função e a partir disto, é capaz de fornecer resultados
para quarta e quinta ordem num mesmo incremento. Assim, a comparação
é facilitada, diminuindo em grande proporção o número de cálculos
realizados.
Portanto, é essencial verificar que os métodos aqui estudados para a
resolução de equações diferenciais ordinárias tem uma aplicação muito
grande em diversas áreas. Logo, aplica-se na Mecânica, na Biologia, na
Física, na Química, na Economia, em diversas áreas da Engenharia, etc.
Desse modo, na Engenharia Elétrica aplica-se em circuitos elétricos;
em Geografia e na Estatística com o modelo de crescimento e
decrescimento populacional (Modelo de Mauthus); na Biologia, utilizando-se
do modelo de Mauthus para estudos do crescimento de outras formas de
população, como bactérias, por exemplo; na Física com a lei de Variação de
Temperatura de Newton, na queda de corpos com a resistência do ar ou na
própria variação da velocidade; em Química na resolução de problemas
relacionados à reações químicas e problemas de diluição.
Além disso, na área da Engenharia Civil, as EDO’s são aplicadas no
estudo de comportamento de vigas. E também, na engenharia Mecânica, é
utilizada no estudo de vibrações, com área de destaque para o movimento
harmônico amortecido, com aplicação prática nos projetos de suspensões
automotivas.
Entretanto, podem ser citadas algumas desvantagens notadas, como
o excessivo número de operações realizadas a cada iteração, que,
dependendo da ordem do método, torna-se inviável procede-las
manualmente, sendo necessário o uso do computador.
VI. Considerações Finais
A partir do trabalho realizado, foi possível constatar que existem
algumas formas para solucionar equações diferenciais, a partir dos métodos
de Runge-kutta e Runge-Kutta-Fehlberg, que são bem conhecidos e
bastante utilizados. Esses métodos, por sua vez, possuem uma boa
eficiência e fornecem resultados muito precisos.
Além disso, pôde-se conhecer algumas aplicações das equações
diferenciais, na Mecânica, na Biologia, na Física, na Química, na Economia e
em diversas áreas da Engenharia. Somado a isso, pôde-se verificar a
implementação desses métodos por meio de softwares, como o MatLab, por
ser comprovadamente eficaz.
VII. Referências Bibliográficas

CLÁUDIO, Dalcidio Moraes; MARINS, Jussara Maria. Cálculo Numérico


Computacional. 2 ed. São Paulo: Atlas, 1994. 457 p.
Disponível em:
<http://conteudo.icmc.usp.br/pessoas/andretta/ensino/aulas/sme0300-2-
13-fisica/aula20-edorungekutta.pdf>. Acesso em 21 de julho de 2017.
Disponível em: <http://sites.poli.usp.br/d/pmr2420/a4-2420.pdf>.
Acesso em 21 de julho de 2017.
Disponível em:
<http://www.dec.ufcg.edu.br/biografias/WilheKut.html>. Acesso em 16 de
julho de 2017.
Disponível em:
<http://www.dmejp.unir.br/menus_arquivos/1787_2011_sergio_alitollef.pd
f>. Acesso em 22 de julho de 2017.
Disponível em:
<http://www.feq.unicamp.br/~nunhez/eq502/modulo09.pdf>. Acesso em
16 de julho de 2017.
Disponível em:
<http://www.fisica.ufjf.br/~sjfsato/fiscomp1/node39.html>. Acesso em 16
de julho de 2017.
Disponível em: <http://www.ime.unicamp.br/~biloti/an/pvi.pdf>.
Acesso em 21 de julho de 2017.
Disponível em:
<http://www.mat.ufmg.br/~espec/Monografias_Noturna/Monografia_Karine
Nayara.pdf>. Acesso em 16 de julho de 2017.
Disponível em:
<http://www.mat.ufrgs.br/~guidi/grad/MAT01032/calculo_numerico.cap8.p
df>. Acesso em 16 de julho de 2017.
Disponível em:
<http://www2.unifap.br/matematicaead/files/2016/03/Enviar-Ellison-
TCC.pdf>. Acesso em 21 de julho de 2017.
FRANCO, Neide Bertoldi. Cálculo Numérico. São Paulo: Pearson,
2006. 493 p.

ANEXOS

 Método de Runge-Kutta de segunda ordem (Euler modificado)

%MÉTODO DE RUNGE-KUTTA DE SEGUNDA ORDEM


%PROGRAMADORA: Geovanna Oliveira
printf('ALGORITMO PARA O CÁLCULO DE P.V.I POR MEIO DE RUNGE-KUTTA
DE SEGUNDA ORDEM\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 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/2);
y=y0+(k1*h/2);
k2=-y+x+2;
y0=y0+(k2*h);
x0=x0+h;
printf('\n %d --> yi=%f xi=%f \n',it,y0,x0)
for i=1:n
it=it+1;
x=x0;
y=y0;
k1=-y+x+2;
x=x0+(h/2);
y=y0+(k1*h/2);
k2=-y+x+2;
y0=y0+(k2*h);
x0=x0+h;
printf('\n %d --> yi=%f xi=%f \n',it,y0,x0)
end

 Método de Runge-Kutta de terceira ordem (Heun)

%MÉTODO DE RUNGE-KUTTA DE TERCEIRA ORDEM


%PROGRAMADORA: Maria Teresa
printf('ALGORITMO PARA O CÁLCULO DE P.V.I POR MEIO DE RUNGE-KUTTA
DE TERCEIRA ORDEM\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 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/3);
y=y0+(k1*h/3);
k2=-y+x+2;
x=x0+(2*h/3);
y=y0+(k2*2*h/3);
k3=-y+x+2;
y0=y0+((k1+(3*k3))*h/4);
x0=x0+h;
printf('\n %d --> yi=%f xi=%f \n',it,y0,x0)
for i=1:n
it=it+1;
x=x0;
y=y0;
k1=-y+x+2;
x=x0+(h/3);
y=y0+(k1*h/3);
k2=-y+x+2;
x=x0+(2*h/3);
y=y0+(k2*2*h/3);
k3=-y+x+2;
y0=y0+((k1+(3*k3))*h/4);
x0=x0+h;
printf('\n %d --> yi=%f xi=%f \n',it,y0,x0)
end

 Método de Runge-Kutta de quarta ordem

%MÉTODO DE RUNGE-KUTTA DE QUARTA ORDEM


%PROGRAMADORA: Gabriele Souza
printf('ALGORITMO PARA O CÁLCULO DE P.V.I POR MEIO DE RUNGE-KUTTA
DE QUARTA ORDEM\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 o tamanho do passo:');
printf('\n 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/2);
y=y0+(k1*h/2);
k2=-y+x+2;
x=x0+(h/2);
y=y0+(k2*h/2);
k3=-y+x+2;
x=x0+h;
y=y0+(k3*h);
k4=-y+x+2;
y0=y0+((k1+(2*k2)+(2*k3)+k4)*h/6);
x0=x0+h;
printf('\n %d --> yi=%f xi=%f \n',it,y0,x0)
for i=1:n
it=it+1;
x=x0;
y=y0;
k1=-y+x+2;
x=x0+(h/2);
y=y0+(k1*h/2);
k2=-y+x+2;
x=x0+(h/2);
y=y0+(k2*h/2);
k3=-y+x+2;
x=x0+h;
y=y0+(k3*h);
k4=-y+x+2;
y0=y0+((k1+(2*k2)+(2*k3)+k4)*h/6);
x0=x0+h;
printf('\n %d --> yi=%f xi=%f \n',it,y0,x0)
end

 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

 Algoritmo com a união de todos os métodos apresentados

%MÉTODO DE RUNGE-KUTTA E DE RUNGE-KUTTA-FEHLBERG


%PROGRAMADORAS: Gabriele, Glauciane, Geovanna e Maria Teresa
clc;
clear all;
printf('ALGORITMO PARA O CÁLCULO DE P.V.I POR MEIO DE RUNGE-KUTTA
OU RUNGE-KUTTA-FELHBERG\n\n')
printf('PARA ENCERRAR O PROGRAMA INSIRA 0 NO MOMENTO EM QUE É
PEDIDA A ORDEM DO MÉTODO\n\n')
ordem=input('Insira a ordem o método de Runge-Kutta (2,3 ou 4) ou
qualquer outro valor para o método de Runge-Kutta-Felhberg:');
while ordem ~= 0
x0=input('Insira o primeiro ponto x0:');
y0=input('Insira o primeiro ponto y0:');
x1=input('Insira o segundo ponto x1:');
h=input('Insira o tamanho do passo:');
switch ordem
case 2
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/2);
y=y0+(k1*h/2);
k2=-y+x+2;
y0=y0+(k2*h);
x0=x0+h;
printf('\n iteração %d --> yi=%f xi=%f \n',it,y0,x0)
for i=1:n
it=it+1;
x=x0;
y=y0;
k1=-y+x+2;
x=x0+(h/2);
y=y0+(k1*h/2);
k2=-y+x+2;
y0=y0+(k2*h);
x0=x0+h;
printf('\n iteração %d --> yi=%f xi=%f \n',it,y0,x0)
end
case 3
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/3);
y=y0+(k1*h/3);
k2=-y+x+2;
x=x0+(2*h/3);
y=y0+(k2*2*h/3);
k3=-y+x+2;
y0=y0+((k1+(3*k3))*h/4);
x0=x0+h;
printf('\n iteração %d --> yi=%f xi=%f \n',it,y0,x0)
for i=1:n
it=it+1;
x=x0;
y=y0;
k1=-y+x+2;
x=x0+(h/3);
y=y0+(k1*h/3);
k2=-y+x+2;
x=x0+(2*h/3);
y=y0+(k2*2*h/3);
k3=-y+x+2;
y0=y0+((k1+(3*k3))*h/4);
x0=x0+h;
printf('\n iteração %d --> yi=%f xi=%f \n',it,y0,x0)
end
case 4
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/2);
y=y0+(k1*h/2);
k2=-y+x+2;
x=x0+(h/2);
y=y0+(k2*h/2);
k3=-y+x+2;
x=x0+h;
y=y0+(k3*h);
k4=-y+x+2;
y0=y0+((k1+(2*k2)+(2*k3)+k4)*h/6);
x0=x0+h;
printf('\n iteração %d --> yi=%f xi=%f \n',it,y0,x0)
for i=1:n
it=it+1;
x=x0;
y=y0;
k1=-y+x+2;
x=x0+(h/2);
y=y0+(k1*h/2);
k2=-y+x+2;
x=x0+(h/2);
y=y0+(k2*h/2);
k3=-y+x+2;
x=x0+h;
y=y0+(k3*h);
k4=-y+x+2;
y0=y0+((k1+(2*k2)+(2*k3)+k4)*h/6);
x0=x0+h;
printf('\n iteração %d --> yi=%f xi=%f \n',it,y0,x0)
end
otherwise
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)+(2
55*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)
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/1
3824)+(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/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
end
ordem=input('Insira a ordem o método de Runge-Kutta (2,3 ou 4) ou
qualquer outro valor para o método de Runge-Kutta-Felhberg:');
end

You might also like