Método de Euler-Cromer

De Física Computacional
Revisão de 23h11min de 15 de fevereiro de 2022 por Jhordan (discussão | contribs) (Criou página com 'Lembrando do que vimos no Método de Euler, o sistema de equações para o sistema massa-mola era: <math display="block">\begin{align}\frac{dv}{dt} & =-\omega^{2}x\left(t...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

Lembrando do que vimos no Método de Euler, o sistema de equações para o sistema massa-mola era:

Aplicando o método de Euler então:

Em notação matricial temos:

Porém a matriz transforma o vetor no vetor , representando então a evolução no espao de fases e seu determinante representa a variação dovolume no espaço de fases. Para um problema conservativo, logo o determinante deve ser , uma vez que essevolume deve se manter constante. Para o método de Euler temos:

Ométodo de Euler-Crome propõe usar no lugar de para calcular . Manipulando temos, lembrando que podemos substituir o valor de :

Atualizando então a notação matricial temos:

Calculando então o novo determinante, temos:

Algumas observações que podem ser feitas: a primeira é que também podemos fazer diferente e usar no lugar de para calcular . E a segunda é que quando olhamos para nossa aproximação, temos um intervalo de tempo entre e . No método de Euler original, usamo a velocidade no começo intervalo () para calcular a nova posição (, no de Euler-Cramer usamos no fim do intervalo (), mas de certa forma tem a mesma natureza de aproximação. Como para uma equação tivemos o método de Euler-implícito, porém agora trabalhamos com um sistema de equações. Esse método também é chamado de ’semi-implícito.

import matplotlib.pyplot as plt            #Biblioteca para plotar gráficos
import numpy as np                         #Biblitoeca de cálculos científicos

#Constantes
m=1  ; k= 1.; w2= k/m ; w=w2**(1/2)
#Valores iniciais
x=[1]; v=[0]; t=[0]; E=[k*(x[0]**2)/2+m*(v[0]**2)/2] 
#Parâmetros
dt  = 0.1 ; tau = 2*np.pi; tf=4*tau ; Np= int(tf/dt)

#Método de Euler
for it  in range(Np):
  x.append(x[it]+dt*v[it])  
  v.append(v[it]-dt*x[it+1]*w2) #Usamos x[it+1] ao invés de x[it]
  E.append(k*x[it+1]**2/2+m*v[it+1]**2/2)
  t.append(dt+it*dt)

#plt.plot(t,x)
#plt.plot(t,v)
#plt.plot(t,E)
plt.plot(x,v)