Método de Euler-Cromer: mudanças entre as edições

De Física Computacional
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
 
(Uma revisão intermediária pelo mesmo usuário não está sendo mostrada)
Linha 98: Linha 98:


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


#Método de Euler
#Método de Euler-Cromer
for it  in range(Np):
for it  in range(Np):
   x.append(x[it]+dt*v[it])   
   x.append(x[it]+dt*v[it])   

Edição atual tal como às 16h22min de 22 de fevereiro de 2022

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:

Outra forma de analisar o caso da oscilção quando usado o método explícito de Euler, é abrindo as contas. Escrevendo então a energia como:

Onde fazemos . Usando então:

Temos:

FIcamos então apenas:

Ou ainda:

Então a cada passo, a energia aumenta com um fator .


O mé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 
#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-Cromer
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)