Método de Leapfrog: 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
 
(2 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 47: Linha 47:
#Constantes
#Constantes
m=1  ; k= 1.; w2= k/m
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
#Valores iniciais
x=[1]; v0=0; tx=[0]; tv=[dt/2]
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
#Usamo Euler-Cromer para calcular a velocidade em t=dt/2
Linha 60: Linha 60:
   x.append(x[it]+dt*v[it])   
   x.append(x[it]+dt*v[it])   
   tx.append(dt+it*dt)
   tx.append(dt+it*dt)
   a=-w2*x[it+1]
   v.append(v[it]-w2*x[it+1]*dt)
  v.append(v[it]+a*dt)
   tv.append(dt/2+(1+it)*dt)
   tv.append(dt/2+(1+it)*dt)



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)