Método de Euler
De ComplexWiki
Tabela de conteúdo |
O problema e o método
Dado um problema cuja dinâmica obedece uma equação diferencial ordinária e condição inicial da forma:
queremos encontrar a solução x(t). O método de Euler parte de fazer uma expansão em série de Taylor (truncada em primeira ordem) da variável incógnita para obter:
e usando a informação contida na equação diferencial obtemos a seguinte relação:
a que pode, mediante iteração a partir da condição inicial x(t0) = x0, nos dar x(t) a
qualquer tempo futuro
Exemplo 1: decaimento radiativo
Teoria
Como exemplo de aplicação do método de Euler vamos considerar o decaimento radioativo, que é um problema que tem solução analítica simples. A ideia é, por um lado ganhar confianza com o método estudando uma equação simples, e ao mesmo tempo poder avaliar o erro cometido na integração numérica.
Trata-se de contabilizar o número ou fração de núcleos que vão ficando conforme avanza o tempo a partir de um certo número inicial. A equação diferencial que rege o decaimento radioativo é dada por:
onde N é o número de núcleos radioativos no instante t e λ é uma constante, diferente para cada elemento. A interpretação física desta equação é simples: a perda relativa de núcleos dN / N é proporcional ao tempo transcorrido (dt), sempre que dt seja pequeno. A constante de proporcionalidade λ é a taxa do decaimento, mede a "velocidade" do decaimento.
Solução analítica
Como antecipamos, e também é fácil de ver da própria equação, a solução é simples pois procuramos por uma função cuja derivada seja proporcional a ela mesma A exponencial é justamente a função que quando derivada volta a aparecer: No caso em questão e usando a condição inicial a solução para N(t) resulta:
onde
é o tempo necessário para a quantidade de núcleos cair até a metade:
Solução numérica
Rescrevemos primeiro a equação do decaimento radiativo nos termos da equação (1):
para agora aplicar o método de Euler assim:
Neste caso particular chegamos então a seguinte expressão geral
Programa
A expressão (4) está numa forma muito conveniente para se programar o método no computador. Em FORTRAN por exemplo fica assim:
!Decaimento Radioativo: dN = -lam*N*dt. Método de Euler Implicit None Integer i, Nstep Real N, lam, tau, dt, tf Read* N, tau, dt, tf Nstep = tf/dt; lam = log(2.)/tau Print*, 0., N Do i = 1, Nstep N = (1.0 - lam*dt)*N !Notar que esta é a forma de implementar (4) em FORTRAN Print*, i*dt, N End Do End
Método de Euler nas equações de Newton
A equação de Newton, de um modo geral, trata-se de uma equação diferencial ordinâria de segunda ordem. O que quer dizer que aparece uma derivada segunda. Porem, o método de Euler, como fora formulado antes, envolve a primeira derivada. O problema se resolve re-escrevendo a equação de Newton como duas equações de primeira ordem. Vejamos:
passa para:
Ou seja de uma equação de segunda ordem passamos a duas de primeira ordem representando duas formas equivalentes do mesmo problema.
Exemplo 2: oscilador harmônico
O oscilador harmônico é um problema clássico da mecânica Newtoniana e seu equivalente linear é o sistema massa-mola; um bloco de massa m ligado à parede por uma mola de constante elástica k.
Teoria
A equação de Newton para este sistema fica:
.
Solução analítica
Definindo
a solução do problema está dada por:
, x(0) e φ saem das condiçãoes iniciais:
e
Solução numérica
Como no Exemplo 1 usamos a expansão de Taylor a primeira ordem para escrever:
Essa a forma geral do Método ou Algoritmo de Euler para a equação de Newton, onde em cada passo de iteração tanto a posição quanto a velocidade devem ser atulizadas
para gerar uma seqüência de x e v nos tempos discretos a partir de t = 0 e em passos Δt.
No Exemplo 2 (o oscilador armônico) é só sustituir
por
, a aceleração do bloco,
e temos:
Programa
A base do código FORTRAN é a mesma do Exemplo anterior, a única diferença está no laço central envolvendo agora duas variáveis. Ha também um detalhe técnico justamente pelo fato de trabalhar agora com duas grandezas (posição e velocidade), em lugar de só uma como foi o N no Exemplo 1. A parte específica deste problema em FORTRAN ficaria a priori:
... v = v - omega2 * x * dt x = x + v * dt ...
Acontece que ao fazer assim, na primeira linha o v passa de v(t) para v(t + Δt), sendo este último o usado na linha de atualização do x. Mas o algoritmo de Euler indica que nesse momento x deve usar v(t) para ser atualizado e não v(t + Δt). Este é o problema técnico que assinalamos antes. Como resolvé-lo na prática? Usando uma variável auxiliar onde guardamos o valor anterior, assim:
... vold = v v = v - omega2 * x * dt x = x + vold * dt ...
Desta forma x usa o v no tempo correto para fazer a sua atualização. Uma forma alternativa de codificar (um pouco mais elegante do posto de vista físico) seria:
... a = -omega2 * x x = x + v * dt v = v + a * dt ...
Onde ha duas alterações: a troca entre as linhas de x e v e o uso de variável auxiliar a (aceleração) para que v use a aceleração no tempo correto. È importante que se convençam da equivalencia dos dois códigos. Agora é so implementar o código completo para observar a solução numérica do oscilador armônico. Neste caso teremos uma surpresa, essa solução resulta diferente do esperado, o que nos fará pensar: O que ha de errado?
Erro do algoritmo
Integrando numericamente com o algoritmo de Euler o problema do oscilador armônico, se observa claramente que a amplitude e a velociade aumentam continuamante, quando deveriam oscilar entre valores bem definidos. Em fim, que a energia do sistema aumenta quando deveria ser estritamente constante.
Isso pode ser mostrado analiticamante escrevendo a evolução do sistema em termos matriciais, assim:
O aumento da energia está representado pelo determinante da matriz de evolução:
quando aplicada n vezes para ir de
até
provoca um aumento na energia que vai como
.
Ou seja, cresce exponencialmente, mesmo que o
seja muito pequeno. O
modifica o
pre-fator (o que multiplica t na exponencial) porem, mais cedo o mais tarde, (no caso de um passo de tempo menor) sempre aumenta.
Todo isso pode ser conferido numericamente estudando a evolução da energia com o tempo.

