Você está na página 1de 8

>

Modelagem Matemática

Aula 9: Resolução de equações diferenciais ordinárias de 1ª


ordem

Apresentação:
Na última aula, nós estudamos os métodos mais tradicionais de integração numérica. Inicialmente, conhecemos as
técnicas e fundamentos associados aos métodos de interpolação de Newton-Cotes: retângulos, trapézios e
regras de
Simpson. Ao final, aplicamos os métodos estudados, por meio da implementação computacional de programas em
Python para resolução de problemas clássicos em Engenharia.

Agora, nós veremos outro problema clássico em Engenharia – a resolução de equações diferenciais ordinárias
de primeira
ordem. Trata-se de uma ferramenta importante em um sem número de casos em Engenharia, de
modo que o
conhecimento de técnicas computacionais pode ser decisivo em situações-problema da Engenharia. 

Assim, na aula de hoje, você conhecerá os métodos mais tradicionais de resolução de EDO de 1ª ordem. Inicialmente, você
estudará o método de Euler e suas variantes. Em seguida, você estudará o método de Runge-Kutta. Por fim, você será
capaz de aplicar os métodos estudados, por meio da implementação
computacional de programas em Python.

Objetivos:
Identificar os principais métodos de resolução numérica de EDO de 1ª ordem

Reconhecer exemplos de aplicação em situações-problema típicas em Engenharia, por meio da implementação


computacional em Python.

Introdução a equações diferenciais ordinárias de 1ª ordem


Conforme indicado em Moura (2017), nós vemos, a partir do estudo de cursos introdutórios de Cálculo Diferencial
e
Integral que, dada uma função y = f(x), a derivada

dy
  =  f ´ (x)
dx

é também uma função de x, calculada mediante emprego de regras próprias. Por exemplo, se nós temos uma função y =
e2x, a sua derivada é tal que:
dy
2x
  =  2e   =  2y
dx

No entanto, é importante você perceber desde já que o objetivo desta aula é diferente. Agora, o nosso objetivo não é
simplesmente calcular a derivada a partir de uma função de variável real. Em verdade, o propósito aqui é o de encontrar
uma função f(x) que satisfaça uma equação que contenha uma derivada, como dy/dx.

Em outras palavras, o objetivo da aula de hoje é permitir que você consiga promover a resolução de equações diferenciais,
utilizando técnicas numéricas. No entanto, inicialmente, vem a pergunta: o que é uma equação diferencial?
 

De maneira simples, podemos afirmar que uma equação diferencial é uma equação que contém as derivadas de uma ou
mais variáveis dependentes em relação a uma ou mais variáveis independentes Moura (2017).

Tais equações envolvendo derivadas podem assumir as mais variadas formas. Nós aqui nesta aula nos dedicaremos às
técnicas de resolução de uma equação diferencial ordinária (EDO) dita de primeira ordem

dy
  = f (x, y)
dx

em um ponto qualquer x1, sujeita à condição inicial y(x0) = y0, em que x0 e x1 são números reais e que definem um
intervalo I qualquer, enquanto y0 é um número real arbitrário.

Este problema, também conhecido como problema de valor inicial (PVI), assume a seguinte expressão geral, também
ilustrada na Figura 1:

dy
Resolva :     = f (x, y) para x = x1 ,  sujeito a :  y(x0 )  =  y 0
dx


Figura 1 – Solução de um problema de valor inicial: a partir de um ponto inicial
(x0), chega-se à solução x1 de uma equação diferencial Moura (2017). (Fonte: Autor).

Desta maneira, o propósito da aula de hoje é que você seja apresentado e consiga utilizar os métodos numéricos de Euler
e de Runge-Kutta para resolução de problemas de valor inicial em EDO de 1ª ordem. Assim, na próxima seção, nós
veremos os métodos, estudando seu princípio de funcionamento, limitações e um exemplo de aplicação.

Bem, agora é hora de conhecer os métodos. Venha comigo para a próxima seção desta aula!

Fundamentos dos métodos numéricos de resolução de EDO de


1ª ordem
Método de Euler
Vamos começar nosso estudo pelo método de Euler. Este é o mais simples dentre os métodos numéricos para resolução
de problemas de valor inicial, e sua fórmula está expressa a seguir:
y n+1   =  y n   + hf (xn , y n )

Atenção! Aqui existe uma


videoaula, acesso pelo conteúdo online

Para você utilizar o método de Euler, basta promover o avanço sucessivo de um ponto xn para um ponto xn+1
e calcular a
função f(x) no ponto indicado. Desta maneira, temos que a sequência de pontos
(x0, x1, …, xn, xn+1, ...) acaba por delimitar
uma curva no plano cartesiano até se chegar ao ponto final desejado.

Um aspecto muito importante na aplicação deste método reside em determinar a quantidade necessária de passos
intermediários
para se resolver o problema. Esta quantidade é dependente de um dito valor h, também denominado de
intervalo ou passo do
método). Assim, temos que, quanto maior o valor de h, maior a precisão do método.

Vamos ver como isto funciona? Observe comigo a ilustração apresentada na Figura 2 exibida a seguir, na qual temos um
modelo gráfico de resolução de uma EDO de 1a ordem em que foram utilizadas 6 aproximações sucessivas.


Figura 2 – Aproximações sucessivas da solução de uma EDO a partir do emprego
do método de Euler. (Fonte: Autor).

Aqui, vemos que a função f(x) é calculada não só em x0 e x1, mas nos cinco pontos intermediários que foram
representados na figura (1, 2, 3, 4, 5). Vamos ver agora a operação numérica em si? Para fins de exemplificação, vamos
considerar a EDO de 1ª ordem dada por

dy
  =  3x − 1
dx

O objetivo é encontrar o valor da função y = f(x) em x = 2, sabendo-se que y(1) = 2. Como fazer isto?

Em primeiro lugar, considere-se a equação de Euler dada por yn+1 = yn + hf(xn,yn).

Assim, podemos substituir a expressão f(xn,yn) pela função dada no enunciado. Deste modo, temos
que yn+1 = yn + h(3x-1).

Agora que você possui uma expressão matemática para avaliar e o valor correspondente da função no ponto inicial
(afinal,
estamos tratando de um problema de valor inicial, neste exemplo, x = 1), é tempo de escolher o passo h para
realização
dos cálculos associados. A títilo de ilustração, considere-se um quinto do intervalo: logo, h  .
2−1
=     =  0, 2
5

Dadas as informações anteriores, constrói-se uma tabela com os valores intermediários, no modo apresentado a seguir:

n x y

0 1,0 2,0

1 1,2 2,0 + 0,2 (3 x 1,0 -1) = 2,0 + 0,2 x 2 = 2,4


2 1,4 2,4 + 0,2 (3 x 1,2 - 1) = 2,4 + 0,2 x 2,6 = 2,92

3 1,6 2,92 + 0,2 (3 x 1,4 - 1) = 2,92 + 0,2 x 3,2 = 3,56

4 1,8 3,56 + 0,2 (3 x 1,6 - 1) = 3,56 + 0,2 x 3,8 = 4,32

5 2,0 4,32 + 0,2 (3 x 1,8 - 1) = 4,32 + 0,2 x 4,4 = 5,2

Desta maneira, chegamos ao resultado procurado (y(2)), que assume o valor de 5,2, conforme indicado ao final da tabela
que acabamos de analisar.

Para fins de comparação, é importante lembrar que esta EDO de 1a ordem apresenta uma solução analítica exata,
expressa pela função f (x) .
Assim, com uma simples substituição do valor da variável x por 2, vemos
3 2 3
= x − x +
2 2

que o valor correto para x = 2 é y = f(x) = 5,5.

Atenção! Aqui existe uma


videoaula, acesso pelo conteúdo online

Por que há tal diferença? Este desvio ocorre em função do erro implícito ao método de Euler. Para corrigir tal imprecisão,
recomenda-se a utilização de uma quantidade maior de subintervalos entre os pontos inicial e final ou o emprego do
Método de Runge-Kutta, que veremos a seguir nesta seção.

Atenção! Aqui existe uma


videoaula, acesso pelo conteúdo online

Diante das duas alternativas indicadas no parágrafo anterior, é importante você perceber desde já que, em casos práticos,
recomenda-se o emprego do Método de Runge-Kutta. Neste método, o cálculo de yn+1 também é feito a partir de yn, só que
dado pela execução sequencial das 4 expressões apresentadas a seguir:

k1   =  h. f (xn , y n )

h k1
k2   =  h. f   (xn   + ,  y n   +  )
2 2

h k2
k3   =  h. f   (xn   + ,  y n   +  )
2 2

k4   =  h. f (xn   +  h, y n   + k3 )

k1 k2 k3 k4
y n+1   =  y n   + + + +
6 3 3 6

Vamos ver como isto ocorre na prática? Vamos utilizar a mesma EDO de 1ª ordem do exemplo anterior, ou seja:

dy
  =  3x  − 1
dx

Mais uma vez, o objetivo é encontrar o valor da função y = f(x) em x = 2, tendo como condição inicial que y(1) = 2. De igual
modo, vamos repetir o valor do intervalo de cálculo, ou seja, h = 0,2, como no exemplo de aplicação do método de Euler.

Desta maneira, as expressões de Runge-Kutta apresentadas anteriormente assumem a seguinte forma:


k1   =  h. (3x  −  1)  =  0, 2. (3. 1  −  1)  =  0, 4.

0,2 0,4
k2   =  h. f   (1 + ,  2 +   )  =  0, 2. (3. 1, 1  −  1)  =  0, 46
2 2

0,2 0,46
k3   =  h. f   (1 + ,  2 +   )   =  0, 2. (3. 1, 1  −  1)  =  0, 46
2 2

k4   =  h. f (1  +  0, 2, 2  +  0, 46)  =  0, 2. (3. 1, 2  −  1)  =  0, 52

k1 k2 k3 k4 0,4 0,46 0,46 0,52


y1   =  y0   +    +  +  +    =  2  +     +  +  +    =  2, 46
6 3 3 6 6 3 3 6

Se nós executarmos novamente o método aplicado anteriormente, mas agora para yn+1   em  n ∈ {1, 2, 3, 4, 5}  ,
nós
conseguimos construir uma tabela com os valores intermediários no modo apresentado a seguir, a fim de se obter a
resposta do método:

n x y

0 1,0 2,0

1 1,2 2,46

2 1,4 3,04

3 1,6 3,74

4 1,8 4,56

5 2,0 5,5

Veja que agora obtivemos o resultado y(2) = 5,5, que é exatamente o valor indicado pelo método analítico que citamos ao
final da exposição do método de Euler.

Implementação em Python

from __future__ import division


import numpy as np
from numpy import linalg
import matplotlib.pyplot as plt
def f(t,u):
return 2*u

#tamanho e num. de passos


Vamos ver agora exemplos de resolução de equações h = 0.2
diferenciais ordinárias de primeira ordem em Python? N = 6

#cria vetor t e u
t = np.empty(N)
u = np.copy(t)

Por exemplo, vamos resolver, como apoio do método de


#C.I.
Euler, o problema de valor inicial dado por u (t) 2u(t),
t[0] = 0
u(0) = 1
para encontrar o valor da função y = f(x) em x = 1.
u[0] = 1
Para tal, vamos considerar h = 6. Veja o código ao lado:
#iteracoes
for i in np.arange(N-1):
t[i+1] = t[i] + h
u[i+1] = u[i] + h*f(t[i],u[i])

#imprime
for i,tt in enumerate(t):
print("%1.1f %1.4f" % (t[i],u[i]))

O resultado final é y(1) = 5,378, que é bastante diferente do resultado real (e2 = 7,389). Por sua vez, veja a seguir um código
em Python utilizando o método de Runge-Kutta:

from __future__ import division


import numpy as np
from numpy import linalg
import matplotlib.pyplot as plt

# Python program to implement Runge Kutta


method
# Definição da equação diferencial ordinária
de primeira ordem.
def dydx(x, y):
return (2*y)

# Encontra o valor de y, dado x, utilizando


um interval h
# Considera os valores iniciais como x0 e y0.
def rungeKutta(x0, y0, x, h):
# Contagem do número de iterações
utilizando o tamanho do passo
# Representado pelo parâmetro h
n = (int)((x - x0)/h) # Atualização do valor seguinte de y
# Realização da iteração para um y = y + (1.0 / 6.0)*(k1 + 2 * k2 + 2 * k3 +
determinado número pré-determinado k4)
y = y0
# Atualização do valor seguinte de x
for i in range(1, n + 1):
x0 = x0 + h
"Aplicação das formulas de Runge
return y
Kutta para encontrar o valor
seguinte de y"
# Programa principal
k1 = h * dydx(x0, y)
x0 = 0
k2 = h * dydx(x0 + 0.5 * h, y + 0.5
y = 1
* k1)
x = 1
k3 = h * dydx(x0 + 0.5 * h, y + 0.5
h = 0.2
* k2)
print (rungeKutta(x0, y, x, h))
k4 = h * dydx(x0 + h, y + k3)

Como já indicado ao longo da aula, o resultado aqui é bem mais preciso (y(1) = 7,387), ilustrando como a precisão deste
método é muito melhor.
Atividades
1. Assinale a única alternativa que apresenta o valor de y(1) em face da resolução da EDO de 1ª ordem y’ = 2y, sendo y(0) = 3.
Considere h = 0,2. Utilize o método de Euler:

a) 16.134
b) 16,334
c) 16,534
d) 16,734
e) Nenhuma das alternativas anteriores

2. Assinale a única alternativa que apresenta o valor de y(1) em face da resolução da EDO de 1ª ordem y’ = 3y, sendo y(0) = 3.
Considere h = 0,2. Utilize o método de Euler:

a) 31,457
b) 31,257
c) 31,057
d) 31,657
e) Nenhuma das alternativas anteriores

3. Assinale a única alternativa que apresenta o valor de y(1) em face da resolução da EDO de 1ª ordem y’ = cos(y), sendo y(0)
= 3. Considere h = 0,2. Utilize o método de Euler:

a) 2,156
b) 2,356
c) 2,556
d) 2,756
e) Nenhuma das alternativas anteriores

4. Assinale a única alternativa que apresenta o valor de y(1) em face da resolução da EDO de 1ª ordem y’ = 2y, sendo y(0) = 3.
Considere h = 0,10. Utilize o método de Runge-Kutta:

a) 22,167
b) 22,367
c) 22,567
d) 22,757
e) Nenhuma das alternativas anteriores
5. Assinale a única alternativa que apresenta o valor de y(1) em face da resolução da EDO de 1ª ordem y’ = cos(y), sendo y(0)
= 3. Considere h = 0,10. Utilize o método de Runge-Kutta:

a) 2,189
b) 2,169
c) 2,149
d) 2,129
e) Nenhuma das alternativas anteriores

Referências

MOURA, D. F. C, Cálculo Numérico. Rio de Janeiro: SESES, 2017. 144 p.

UFRGS (colaborativo). Cálculo Numérico: Um Livro Colaborativo Versão Python.


Porto Alegre: UFRGS, 2019.

Próxima aula

Os fundamentos de otimização e o emprego de métodos numéricos de apoio:


Problemas unidimensionais sem restrições;

Problemas de programação linear com restrições, com apoio da solução gráfica;

Problemas relacionados ao tema, aplicando o software Solver do Microsoft Excel.

Explore mais

Segue uma lista de sites na Internet para que você os consulte depois:

ME PASSA AÍ. Cálculo numérico - Solução numérica de equações diferenciais ordinárias (EDO).

FERNANDES, J., Aula 35 – Cálculo Numérico: Método de Euler.

ABREU, L., Aula 36 – Cálculo Numérico: Método de Runge Kutta de 4ª ordem.

Você também pode gostar