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

De Física Computacional
Ir para navegação Ir para pesquisar
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...'
 
Jhordan (discussão | contribs)
Sem resumo de edição
Linha 30: Linha 30:
<math display="block">\det\left(\overline{M}\right)=1+\left(\omega\Delta t\right)^{2}>1</math>
<math display="block">\det\left(\overline{M}\right)=1+\left(\omega\Delta t\right)^{2}>1</math>


Ométodo de Euler-Crome propõe usar <math display="inline">v\left(t+\Delta t\right)</math> no lugar de <math display="inline">v\left(t\right)</math> para calcular <math display="inline">x\left(t+\Delta t\right)</math>. Manipulando temos, lembrando que podemos substituir o valor de <math display="inline">v\left(t+\Delta t\right)</math>:
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:
 
<math display="block">\begin{align}
E\left(t+\Delta t\right) & =\frac{1}{2}mv^{2}\left(\Delta t+t\right)+\frac{1}{2}kx^{2}\left(\Delta t+t\right)\\
& =\frac{1}{2}m\left(v^{2}\left(\Delta t+t\right)+\omega^{2}x^{2}\left(\Delta t+t\right)\right)\end{align}</math>
 
Onde fazemos <math display="inline">\omega^{2}=k/m</math>. Usando então:
 
<math display="block">\begin{align}
v\left(\Delta t+t\right) & =v\left(t\right)-\omega^{2}x\left(t\right)\Delta t\\
x\left(\Delta t+t\right) & =x\left(t\right)+v\left(t\right)\Delta t\end{align}</math>
 
Temos:
 
<math display="block">\begin{align}
E\left(t+\Delta t\right) & =\frac{1}{2}m\left(\left(v\left(t\right)-\omega^{2}x\left(t\right)\Delta t\right)^{2}+\omega^{2}\left(x\left(t\right)+v\left(t\right)\Delta t\right)^{2}\right)\\
& =\frac{1}{2}m\left[v^{2}\left(t\right)+\omega^{4}x^{2}\left(t\right)\Delta t^{2}-2v\left(t\right)\omega^{2}x\left(t\right)\Delta t\right.\\
& \left.+\omega^{2}x^{2}\left(t\right)+\omega^{2}v^{2}\left(t\right)\Delta t^{2}+2v\left(t\right)\omega^{2}x\left(t\right)\Delta t\right]\\
& =\frac{1}{2}m\left[\left(v^{2}\left(t\right)+\omega^{2}x^{2}\left(t\right)\right)+\omega^{2}\left(v^{2}\left(t\right)+\omega^{2}x^{2}\left(t\right)+\right)\Delta t^{2}\right.\\
& \left.v\left(t\right)\omega^{2}x\left(t\right)\Delta t-v\left(t\right)\omega^{2}x\left(t\right)\Delta t\right]\end{align}</math>
 
FIcamos então apenas:
 
<math display="block">\begin{align}
E\left(t+\Delta t\right) & =E\left(t\right)+E\left(t\right)\omega^{2}\Delta t^{2}\end{align}</math>
 
Ou ainda:
 
<math display="block">\begin{align}
E\left(t+\Delta t\right) & =E\left(t\right)\left(1+\omega^{2}\Delta t^{2}\right)\end{align}</math>
 
Então a cada passo, a energia aumenta com um fator <math display="inline">\left(1+\omega^{2}\Delta t^{2}\right)</math>.
 
 
O método de Euler-Crome propõe usar <math display="inline">v\left(t+\Delta t\right)</math> no lugar de <math display="inline">v\left(t\right)</math> para calcular <math display="inline">x\left(t+\Delta t\right)</math>. Manipulando temos, lembrando que podemos substituir o valor de <math display="inline">v\left(t+\Delta t\right)</math>:


<math display="block">\begin{align}x\left(t+\Delta t\right) & =x\left(t\right)+v\left(t\right)\Delta t\\
<math display="block">\begin{align}x\left(t+\Delta t\right) & =x\left(t\right)+v\left(t\right)\Delta t\\

Edição das 16h42min 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:

dvdt=ω2x(t)dxdt=v(t)

Aplicando o método de Euler então:

v(t+Δt)=v(t)ω2x(t)Δtx(t+Δt)=x(t)+v(t)Δt

Em notação matricial temos:

(x(t+Δt)v(t+Δt))=(1Δtω2Δt1)(x(t)v(t))u(t+Δt)=Mu(t)

Porém a matriz M transforma o vetor u(t) no vetor u(t+Δt), 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 1, uma vez que essevolume deve se manter constante. Para o método de Euler temos:

det(M)=1+(ωΔt)2>1

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:

E(t+Δt)=12mv2(Δt+t)+12kx2(Δt+t)=12m(v2(Δt+t)+ω2x2(Δt+t))

Onde fazemos ω2=k/m. Usando então:

v(Δt+t)=v(t)ω2x(t)Δtx(Δt+t)=x(t)+v(t)Δt

Temos:

E(t+Δt)=12m((v(t)ω2x(t)Δt)2+ω2(x(t)+v(t)Δt)2)=12m[v2(t)+ω4x2(t)Δt22v(t)ω2x(t)Δt+ω2x2(t)+ω2v2(t)Δt2+2v(t)ω2x(t)Δt]=12m[(v2(t)+ω2x2(t))+ω2(v2(t)+ω2x2(t)+)Δt2v(t)ω2x(t)Δtv(t)ω2x(t)Δt]

FIcamos então apenas:

E(t+Δt)=E(t)+E(t)ω2Δt2

Ou ainda:

E(t+Δt)=E(t)(1+ω2Δt2)

Então a cada passo, a energia aumenta com um fator (1+ω2Δt2).


O método de Euler-Crome propõe usar v(t+Δt) no lugar de v(t) para calcular x(t+Δt). Manipulando temos, lembrando que podemos substituir o valor de v(t+Δt):

x(t+Δt)=x(t)+v(t)Δt=x(t)+v(t+Δt)Δt=x(t)+[v(t)ω2x(t)Δt]Δt=x(t)(1ω2Δt2)+v(t)Δt

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

(x(t+Δt)v(t+Δt))=(1ω2Δt2Δtω2Δt1)(x(t)v(t))u(t+Δt)=Mu(t)

Calculando então o novo determinante, temos:

det(M)=1ω2Δt2+(ωΔt)2=1

Algumas observações que podem ser feitas: a primeira é que também podemos fazer diferente e usar x(t+Δt) no lugar de x(t) para calcular v(t+Δt). E a segunda é que quando olhamos para nossa aproximação, temos um intervalo de tempo Δt entre v(t+Δt) e v(t). No método de Euler original, usamo a velocidade no começo intervalo (v(t)) para calcular a nova posição (x(t+Δt), no de Euler-Cramer usamos no fim do intervalo (v(t+Δt)), 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)