Você está na página 1de 3

Método de Euler Explícito para Resolver EDOs

Victoria Tanaka - 8988806


victoria.tanaka@usp.br
Escola Politécnica - Universidade de São Paulo

O Método de Euler é um algoritmo de primeira ordem, explícito e de um passo para resolução de


Equações Diferenciais Ordinárias com condição inicial. Neste trabalho, foi estudado seu comporta-
mento e convergência variando o valor de n.

I. Introdução e Conceitos void


euler ( double (* f ) () , double (* g ) () , Exemplo ex ) ;
Dado o seguinte problema de Cauchy na forma normal:
double
ẏ(t) = f (t, y(t)) com y(t0 ) = y0 (1) rate_x ( double t , double x , double y , Exemplo
ex ) ;
O Método de Euler estima uma solução numérica a
partir da noção básica de derivada, i. e., podemos apro- double
ximar y’(t) por: rate_y ( double t , double x , double y , Exemplo
ex ) ;
y(t + ∆t) − y(t)
ẏ(t) ≈ (2) util.c: implementa funções auxiliares para formatação
∆t
de arquivos, impressão na tela, entre outros. Sua in-
Quanto menor ∆t, melhor a aproximação. O primeiro terface contém também enumeradores e constantes como
passo, portanto, é discretizar o domínio de definição do y0 , x0 , t0 , tf , n e constantes dos modelos (ver apêndice A).
problema. Dado um intervalo I = [t0 , tf ] ∈ Dom(y(t)) e
t −t
n ∈ N o número de passos, define-se ∆t = f n 0 . Note B. Algoritmo
que o intervalo é igualmente espaçado.
Voltando à ideia da derivada, nota-se que ẏ(t) é igual A implementação do algoritmo em questão é apresen-
a f (t, y(t)), por definição. Podemos então reescrever (2) tado abaixo. A função recebe como argumento as funções
da seguinte forma: definidas por ẋ(t) e ẏ(t) (ver apêndice B). “Exemplo” é
apenas um enumerador criado na interface util.h para
yk+1 ≈ yk + ∆tf (tk , yk ) (3) definir qual problema está sendo analisado.
Ou seja, a partir de um valor inicial, temos uma rela- void euler ( double (* f ) ( double , double , double ,
ção de recorrência para obter uma estimativa do valor de Exemplo ) , double (* g ) ( double , double ,
double , Exemplo ) , Exemplo ex )
y(tk ) ≈ yk a partir do anterior.
{
O Método de Euler pode ser estendido para EDO’s de int k ;
ordens superiores adotando o modelo n-dimensional. Por double xk , yk , xk_1 , yk_1 , tk , dt = ( TF -
exemplo, para n=2, temos ÿ(t) = f (t, y(t), ẏ(t)) e basta T0 ) / N_ ;
introduzir uma variável auxiliar z1 (t) = ẏ(t). Teremos o FILE * arq ;
seguinte sistema de equações diferenciais: [...]
    // essa parte do codigo foi suprimida
ẏ(t) z1 (t)
Ẏ(t) = = F(t, Y) = (4) // formatacao e manipulacao de arquivos (
ż1 (t) f (t, y(t), z1 (t)) cabecalhos , nomes , possiveis erros de
abertura , etc )
II. Implementação e testes // " switch " para cobrir os dois casos
exemplos ( massa - mola e presa - predador )
O algoritmo foi implementado na linguagem C, orga-
nizado em 3 arquivos: main.c, euler.c, util.c. Os gráficos xk = X0 ;
foram gerados usando a biblioteca matplotlib do Python yk = Y0 ;
tk = T0 ;
(ver apêndice D). As partes relevantes dos códigos podem
ser conferidos nos apêndices. for ( k =1; k <= N_ ; k ++) {
xk_1 = xk + dt * f ( tk , xk , yk , ex ) ;
A. Arquivos do projeto yk_1 = yk + dt * g ( tk , xk , yk , ex ) ;
tk = T0 + k * dt ;
Abaixo segue um breve resumo do conteúdo dos códi- xk = xk_1 ;
gos fonte e interfaces. yk = yk_1 ;
main.c: apenas implementa a função main(). Veja o fprintf ( arq , " % f % e % e \ n " , tk , xk , yk ) ;
}
código na íntegra no Apêndice C.
fclose ( arq ) ;
euler.c: implementa o algoritmo em si. Um pedaço }
de sua interface é apresentado a seguir:
2

C. Testes Método de Euler (Massa−Mola Forcado)


15
Para validar o código numérico para aplicações reais,
primeiro aplicamos para vários casos simples com solução n =16
analítica conhecida. n =64
10
O método convergiu rapidamente para os diversos tes- n =256
tes, e o tempo de execução foi praticamente instantâneo n =1024
(da ordem de milisegundos). Vale lembrar, entretanto, 5

y [m s]
que para problemas práticos essa convergência pode não

/
ser tão eficiente. Para equações com comportamentos
menos suaves, o tamanho do passo deve ser extrema- 0
mente pequeno, o que aumenta o tempo de resposta do
programa.
5
Nos exemplos estudados, o tempo de execução se li-
mitou na casa dos milissegundos. Para n muito grande
(≈ 10M ), o tempo foi de ≈ 10 segundos. 10
0.0 0.5 1.0 1.5 2.0 2.5 3.0
III. Exemplos t [s]

Os dois problemas abordados por este trabalho são Figura 2: Velocidade y em função do tempo do sistema massa-
o Modelo Massa-Mola Forçado e o Modelo de Lotka- mola forçado para diferentes valores de n. Observou-se que
Volterra. Apesar de simples, ambos os exemplos ilustram para valores maiores que 1024 as soluções se sobrepõem.
EDOs que não podem ser resolvidas facilmente com mé-
todos analíticos aprendidos nos cursos de Cálculo (existe
Para observar melhor o comportamento do sistema, po-
uma solução exata para o caso Massa-Mola, mas calculá-
demos aumentar o intervalo de estudo e o ∆t:
la é extremamente trabalhoso).

A. Modelo Massa-Mola Forçado Método de Euler (Massa−Mola Forcado, n =2048)


80
O comportamento de um sistema clássico massa-mola posicão (x)
60
pode ser modelado pela seguinte equação diferencial: velocidade (y)
ẍ = −w02 x + A cos wt (5) 40

onde x é a posição, A e w são parâmetros da força externa 20


x [m]; y [m s]

e w0 é a frequência natural.
/

Adotando as condições t0 = 0, tf = 3, x0 = 0, y0 = 1 e 0
parâmetros do modelo w02 = 5, w = 1 e A = 2, variando
20
o valor de n temos os seguintes resultados:
40
Método de Euler (Massa−Mola Forcado)
2 60

1 80
0 5 10 15 20 25 30 35 40
t [s]
0

1 Figura 3: Posição x e velocidade y em função do tempo para


o sistema massa-mola forçado.
x [m]

3
n =16 B. Modelo de Lotka-Volterra
4 n =64 Em primeira instância, a dinâmica biológica de um sis-
n =256 tema presa-predador pode ser modelada pelas seguintes
5
n =1024 equações:
6
0.0 0.5 1.0 1.5 2.0 2.5 3.0
t [s]
(
ẋ = x(α − βy)
(6)
ẏ = y(δx − γ)
Figura 1: Posição x em função do tempo do sistema massa-
mola forçado para diferentes valores de n. Observou-se que onde x é o número de presas, y é o número de preda-
para valores maiores que 1024 as soluções se sobrepõem. dores e α, β, γ, δ ∈ R+ .
3

Apresentaremos aqui apenas a evolução das equações Nota: para este exemplo, o comportamento das so-
para ilustrar um exemplo de um sistema de EDOs que luções variou fortemente com os valores escolhidos para
não tem solução analítica. os parâmetros (α, β, γ, δ) do modelo. Para alguns casos,
Adotando as condições t0 = 0, tf = 140, x0 = 10, x(t) e y(t) divergiram muito para valores pequenos de
y0 = 10, n = 2500 e parâmetros do modelo α = 0.1, n, o que indica que o problema requer um valor de ∆t
β = 0.02, γ = 0.4 e δ = 0.02 temos: pequeno.

Método de Euler (Presa−Predador, n =2500)


50
Presas
Predadores
40

30
Populacão

20

10

0
0 20 40 60 80 100 120 140
t [dias]

Figura 4: Evolução das populações de predador e presa no


modelo simples de Lotka-Volterra.

[1] “Max232 texas instruments.” http://www.ti.com/lit/ pdffiles_2016/metodologia-projeto-v1.pdf, 2016.


ds/symlink/max232.pdf, 2014. [Online; accessed 2016- [Online; accessed 2016-10-16].
09-25]. [5] “Conceitos de comunicação serial assíncrona.”
[2] “Db9 pinout.” http://www.db9-pinout.com/. [Online; ac- http://www.pcs.usp.br/~labdig/pdffiles_2016/
cessed 2016-09-28]. conceitos-comunicacao-serial-v2.pdf, 2016. [Online;
[3] “Manual da placa de2 da altera,” 2008. accessed 2016-10-16].
[4] “Aplicação da metodologia de projeto com dispositi-
vos programáveis.” http://www.pcs.usp.br/~labdig/

Você também pode gostar