Método de Leapfrog: mudanças entre as edições

De Física Computacional
Ir para navegação Ir para pesquisar
(Criou página com '<pre> </pre>')
 
Sem resumo de edição
 
(9 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
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<ref>[https://young.physics.ucsc.edu/115/leapfrog.pdf https://young.physics.ucsc.edu/115/leapfrog.pdf] (Peter Young, Universidade da California)</ref>., e tendo as seguintes equações do movimento:
<math display="block">\begin{align}
\frac{dx}{dt} & =v\\
\frac{dv}{dt} & =a\end{align}</math>
Sendo a [[Derivada Numérica | derivada numérica]]:
<math display="block">\begin{align}
v\left(t\right) & \approx\frac{x\left(+\Delta t\right)-x\left(t-\Delta t\right)}{2\Delta t}\\
& \approx\frac{x\left(t+\Delta t/2\right)-x\left(t-\Delta t/2\right)}{\Delta t}\end{align}</math>
Então para a equação da velocidade temos que:
<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:
<math display="block">x\left(t+\Delta t\right)=x\left(t\right)+v\left(t+\Delta t/2\right)\Delta t</math>
E aplicando a mesma ideia para a aceleração:
<math display="block">a\left(t\right)\approx\frac{v\left(t+\Delta t/2\right)-v\left(t-\Delta t/2\right)}{\Delta t}</math>
Logo:
<math display="block">v\left(t+\Delta t/2\right)=a\left(t\right)\Delta t+v\left(t-\Delta t/2\right)</math>
Temos então:
<math display="block">\begin{align}
v\left(t+\Delta t/2\right) & =v\left(t-\Delta t/2\right)+a\left(t\right)\Delta t\\
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 o sistema massa-mola visto no [[Método de Euler-Cromer | método de Euler-Cromer]]:
<math display="block"> \frac{d^{2}x}{dt^{2}}=-\frac{k}{m}x=-\omega^{2}x </math>
Podemos ressaltar ainda que <math>a =-\omega^{2}x </math>  e <math>  \frac{dv}{dt}=\frac{d^{2}x}{dt^{2}}</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
#Parâmetros
dt  = 0.1 ; tau = 2*np.pi; tf=4*tau ; Np= int(tf/dt)
#Valores iniciais
x=[1]; v0=0; tx=[0]; tv=[dt/2]
#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 Leapfrog
for it  in range(Np):
  x.append(x[it]+dt*v[it]) 
  tx.append(dt+it*dt)
  v.append(v[it]-w2*x[it+1]*dt)
  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
#para termos velocidade e posição no mesmo instante
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 =
<references />

Edição atual tal como às 17h44min de 15 de março 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 o sistema massa-mola visto no método de Euler-Cromer:

Podemos ressaltar ainda que e .

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
#Parâmetros
dt  = 0.1 ; tau = 2*np.pi; tf=4*tau ; Np= int(tf/dt)
#Valores iniciais
x=[1]; v0=0; tx=[0]; tv=[dt/2]

#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 Leapfrog
for it  in range(Np):
  x.append(x[it]+dt*v[it])  
  tx.append(dt+it*dt)
  v.append(v[it]-w2*x[it+1]*dt)
  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
#para termos velocidade e posição no mesmo instante

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

  1. https://young.physics.ucsc.edu/115/leapfrog.pdf (Peter Young, Universidade da California)