6.1.1 Equações Diferenciais Ordinárias — Métodos de Runge-Kuta — Método de Euler
1. Introdução
O método de Euler é um algoritmo destinado à solução de equações diferenciais na forma
onde . A solução analítica da equação diferencial ordinária (EDO) é justamente encontrar a equação que expressa . Por outro lado, quando utilizamos uma abordagem numérica, a solução retorna avaliado em .
Os métodos de Runge-Kuta são iterativos sobre a estimativa das variáveis e buscam aproximar a solução através de sucessivos passos. Temos que
onde é a estimativa da inclinação (derivada), usada como estimadora dos novos valores () a partir de valores prévios () em uma distância (extrapolada). A figura abaixo mostra esta extrapolação.
Todos os métodos de passo único possuem esta abordagem, sendo que se diferenciam pela forma em que é estimado. Assim, a forma mais ingênua consiste em utilizar a própria equação diferencial (com o isolado) como inclinação da reta. Isto é, a inclinação no início do intervalo é tomada como uma inclinação média de todo intervalo. Tal abordagem simplista é utilizada no método de Euler. Outras abordagem são conhecidas como métodos de Runge-Kuta de ordens superior.
2. Método de Euler
Conforme comentamos na seção anterior, o método de Euler utiliza a primeira derivada como estimativa direta da inclinação em . Isto é,
Assim, a solução será dada por
2.1. Exemplo
Supondo que precisamos resolver a seguinte equação:
Sabemos que esta equação está na forma
que possui solução
onde e . Para , temos que a solução analítica da EDO em questão será
Ou seja, a solução é sempre integral, por isso o método de Euler soluciona em um intervalo de integração. Assim, supondo que queremos integrar no intervalo com condições iniciais , e passo de tamanho 0.5, temos que
onde , então . Portanto, a aproximação no primeiro passo será
Novamente repetimos este processo, seguindo para , refinando a aproximação. Como esse processo é repetitivo e monótono, utilizamos ele no exemplo de implementação.
3. Implementação
def integral_euler(f, xi, xe, y0, n=1e6):
"""
Numerical integration for solve ODE's using Euler's Method
integral = integral_euler(f, xi, xe, n=1e6)
INPUT:
* f: derivative function f(x, y) = dy/dx
* xi: beginning of integration interval
* xe: end of integration interval
* y0: initial estimative for y
* n: number of points used
return: \int_{xi}^{xe} f(x)
Author: Pedro Garcia [sawp@sawp.com.br]
see: http://www.sawp.com.br
License: Creative Commons
http://creativecommons.org/licenses/by-nc-nd/2.5/br/
Sep 2012
"""
def euler(x, y, h):
return (x + h, y + f(x, y) * h)
def integrator(x, y, h, n):
for i in xrange(n):
(x, y) = euler(x, y, h)
return y
(y, x) = (y0, xi)
h = abs(xe - xi) / n
return integrator(x, y, h, int(n))
Um exemplo de utilização dessa função pode ser obtido em http://www.sawp.com.br/code/ode/euler.py.
4. Copyright
Este documento é disponível sob a licença Creative Commons. As regras dos direitos de cópia deste conteúdo estão acessíveis em http://creativecommons.org/licenses/by-nc-nd/2.5/br/.