Método de Leapfrog: mudanças entre as edições
Ir para navegação
Ir para pesquisar
Sem resumo de edição |
Sem resumo de edição |
||
Linha 5: | Linha 5: | ||
\frac{dv}{dt} & =a\end{align}</math> | \frac{dv}{dt} & =a\end{align}</math> | ||
Sendo a [[Derivada Numérica]]: | Sendo a [[Derivada Numérica | derivada numérica]]: | ||
<math display="block">\begin{align} | <math display="block">\begin{align} | ||
Linha 15: | Linha 15: | ||
<math display="block">v\left(t+\Delta t/2\right)\approx\frac{x\left(t+\Delta t\right)-x\left(t\right)}{\Delta t}</math> | <math display="block">v\left(t+\Delta t/2\right)\approx\frac{x\left(t+\Delta t\right)-x\left(t\right)}{\Delta t}</math> | ||
Ou ainda | Ou ainda: | ||
<math display="block">x\left(t+\Delta t\right)=x\left(t\right)+v\left(t+\Delta t/2\right)\Delta t</math> | <math display="block">x\left(t+\Delta t\right)=x\left(t\right)+v\left(t+\Delta t/2\right)\Delta t</math> | ||
Linha 33: | Linha 33: | ||
x\left(t+\Delta t\right) & =x\left(t\right)+v\left(t+\Delta t/2\right)\Delta t\end{align}</math> | x\left(t+\Delta t\right) & =x\left(t\right)+v\left(t+\Delta t/2\right)\Delta t\end{align}</math> | ||
= Exemplo = | |||
Aplicando o algoritmo para: | |||
<math display="block"> \frac{d^{2}x}{dt^{2}}=-\frac{k}{m}x=-\omega^{2}x </math> | |||
<pre> | <pre> | ||
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]; v0=0; tx=[0]; tv=[dt/2] | |||
#Parâmetros | |||
dt = 0.1 ; tau = 2*np.pi; tf=4*tau ; Np= int(tf/dt) | |||
#Usamo Euler-Cromer para calcular a velocidade em t=dt/2 | |||
x_temp=x[0]+(dt/2)*v0 #Posição em t=dt/2 | |||
v=[v0-(dt/2)*x_temp*w2] #Velocidade em t=dt/2 | |||
#Método de Euler | |||
for it in range(Np): | |||
x.append(x[it]+dt*v[it]) | |||
tx.append(dt+it*dt) | |||
a=-w2*x[it+1] | |||
v.append(v[it]+a*dt) #Usamos x[it+1] ao invés de x[it] | |||
tv.append(dt/2+(1+it)*dt) | |||
#plt.plot(tx,x) | |||
#plt.plot(tv,v) | |||
#Para calcular a energia vamos pegar a média da velocidade | |||
vm=[v0] | |||
E=[k*(x[0]**2)/2+m*(v[0]**2)/2] | |||
for it in range(len(x)-1): | |||
vm.append((v[it+1]+v[it])/2) | |||
E.append(k*x[it+1]**2/2+m*v[it+1]**2/2) | |||
#plt.plot(tx,E) | |||
plt.plot(x,v) | |||
</pre> | </pre> | ||
= Citações = | = Citações = | ||
<references /> | <references /> |
Edição das 05h30min de 25 de fevereiro de 2022
Partindo da ideia que uma inclinação entre dois em uma curva é uma aproximação muito melhor da derivada no ponto médio em alguma das extremidades[1]., e tendo as seguintes equações do movimento:
Sendo a derivada numérica:
Então para a equação da velocidade temos que:
Ou ainda:
E aplicando a mesma ideia para a aceleração:
Logo:
Temos então:
Exemplo
Aplicando o algoritmo para:
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]; v0=0; tx=[0]; tv=[dt/2] #Parâmetros dt = 0.1 ; tau = 2*np.pi; tf=4*tau ; Np= int(tf/dt) #Usamo Euler-Cromer para calcular a velocidade em t=dt/2 x_temp=x[0]+(dt/2)*v0 #Posição em t=dt/2 v=[v0-(dt/2)*x_temp*w2] #Velocidade em t=dt/2 #Método de Euler for it in range(Np): x.append(x[it]+dt*v[it]) tx.append(dt+it*dt) a=-w2*x[it+1] v.append(v[it]+a*dt) #Usamos x[it+1] ao invés de x[it] tv.append(dt/2+(1+it)*dt) #plt.plot(tx,x) #plt.plot(tv,v) #Para calcular a energia vamos pegar a média da velocidade vm=[v0] E=[k*(x[0]**2)/2+m*(v[0]**2)/2] for it in range(len(x)-1): vm.append((v[it+1]+v[it])/2) E.append(k*x[it+1]**2/2+m*v[it+1]**2/2) #plt.plot(tx,E) plt.plot(x,v)
Citações
- ↑ https://young.physics.ucsc.edu/115/leapfrog.pdf (Peter Young, Universidade da California)