Método de Leapfrog
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:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \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}}
Então para a equação da velocidade temos que:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle v\left(t+\Delta t/2\right)\approx\frac{x\left(t+\Delta t\right)-x\left(t\right)}{\Delta t}}
Ou ainda:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle x\left(t+\Delta t\right)=x\left(t\right)+v\left(t+\Delta t/2\right)\Delta t}
E aplicando a mesma ideia para a aceleração:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle a\left(t\right)\approx\frac{v\left(t+\Delta t/2\right)-v\left(t-\Delta t/2\right)}{\Delta t}}
Logo:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle v\left(t+\Delta t/2\right)=a\left(t\right)\Delta t+v\left(t-\Delta t/2\right)}
Temos então:
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \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}}
Exemplo
Aplicando o algoritmo para o sistema massa-mola visto no método de Euler-Cromer: Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \frac{d^{2}x}{dt^{2}}=-\frac{k}{m}x=-\omega^{2}x }
Podemos ressaltar ainda que Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle a =-\omega^{2}x } 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
- ↑ https://young.physics.ucsc.edu/115/leapfrog.pdf (Peter Young, Universidade da California)