Método de Euler-Cromer: mudanças entre as edições
(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...') |
Sem resumo de edição |
||
(2 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
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> | ||
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\\ | ||
Linha 64: | Linha 98: | ||
#Constantes | #Constantes | ||
m=1 ; k= 1.; w2= k/m | 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 70: | 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)