Método de Verlet

De Física Computacional
Revisão de 11h22min de 5 de março de 2022 por Jhordan (discussão | contribs)
Ir para navegação Ir para pesquisar

Método de Verlet

Para o método de Euler implícito havíamos utilizado a derivada a esquerda:

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 f'\left(t\right)\approx\frac{f\left(t\right)-f\left(t-\Delta t\right)}{\Delta t}}

Então se 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/":): {\textstyle y\left(t\right)=f'\left(t\right)} a segunda derivada é 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/":): {\textstyle y'\left(t\right)=f''\left(t\right)} , pela definição, da derivada a direita:

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 y'\left(t\right)=\lim_{\Delta t\rightarrow0}\frac{y\left(t+\Delta t\right)-y\left(t\right)}{\Delta t}=\lim_{\Delta t\rightarrow0}\frac{f'\left(t+\Delta t\right)-f'\left(t\right)}{\Delta t}}

Logo utilizando as aproximações:

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} f''\left(t\right) & \approx\frac{1}{\Delta t}\left(f'\left(t+\Delta t\right)-f'\left(t\right)\right)\\ & \approx\frac{1}{\Delta t}\left(\frac{f\left(t+\Delta t\right)-f\left(t+\Delta t-\Delta t\right)}{\Delta t}-\frac{f\left(t\right)-f\left(t-\Delta t\right)}{\Delta t}\right)\\ & \approx\frac{f\left(t+\Delta t\right)+f\left(t-\Delta t\right)-2f\left(t\right)}{\left(\Delta t\right)^{2}}\end{align}}

Isolando 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/":): {\textstyle f\left(t+\Delta t\right)} :

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} f\left(t+\Delta t\right) & =\left(\Delta t\right)^{2}f''\left(t\right)-f\left(t-\Delta t\right)+2f\left(t\right)\end{align}}

Temos o método de Verlet. Podemos notar que precisamos conhecer 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/":): {\textstyle f\left(t\right)} em dois tempos anteriores. Podemos utilizar outro algoritmo para o primeiro passo. Se 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/":): {\textstyle f\left(t\right)=x\left(t\right)} é posição, 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/":): {\textstyle f''\left(t\right)=\ddot{x}\left(t\right)=a\left(x,t\right)} logo podemos reescrever:

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} x\left(t+\Delta t\right) & =a\left(x,t\right)\left(\Delta t\right)^{2}-x\left(t-\Delta t\right)+2x\left(t\right)\end{align}}

Para calcular a energia, podemos obter a velocidade então utilizando a derivada centrada: 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\right)=\dot{x}\left(t\right)=\frac{x\left(t+\Delta t\right)-x\left(t-\Delta t\right)}{2\Delta t}} Alternativamente podemos obter o mesmo resultado em termos da expansão de Taylor:

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} x\left(t+\Delta t\right) & =x\left(t\right)+v\left(t\right)\Delta t+\frac{1}{2}a\left(t\right)\Delta t^{2}+\frac{1}{6}a'\left(t\right)\Delta t^{3}+\dots\\ x\left(t-\Delta t\right) & =x\left(t\right)-v\left(t\right)\Delta t+\frac{1}{2}a\left(t\right)\Delta t^{2}-\frac{1}{6}a'\left(t\right)\Delta t^{3}+\dots\end{align}}

Somando os dois termos, ficamos então com:

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-\Delta t\right)=2x\left(t\right)+a\left(t\right)\Delta t^{2}+\mathcal{O}\left(\Delta t^{4}\right)}

Obtemos então não só o algoritmo de Verlet, além de que sabemos que é uma expansão até a terceir ordem. Então o erro envolvido na truncaçã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/":): {\textstyle \mathcal{O}\left(\Delta t^{4}\right)} , e este é o erro local, associao a um único passo.

Além disso, se fizermos a diferença, obtemos o algoritmo da velocidade:

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-\Delta t\right)=2v\left(t\right)+\frac{1}{3}a'\left(t\right)\Delta t^{3}}

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 v\left(t\right)=\frac{x\left(t+\Delta t\right)+x\left(t-\Delta t\right)}{\Delta t}-\frac{1}{3}a'\left(t\right)\Delta t^{2}}

Logo temos um erro 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/":): {\textstyle \mathcal{O}\left(\Delta t^{2}\right)} na velocidade. Além do erro de truncação associado ao método de dierenças finita e que decai com o decaimento de 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/":): {\textstyle \Delta t} , também podemos lembrar que um erro de arredondamento, pois o computador usa uma quantidade finita de memória para representar os números. Isto, é, existe um número 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/":): {\textstyle \epsilon} em que para qualquer número 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/":): {\textstyle \alpha\leq\epsilon} 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/":): {\textstyle 1+\alpha=1} . 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/":): {\textstyle \epsilon} é o maior número que pode ser somado a 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/":): {\textstyle 1} sem alterar o resultado.

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 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{dv}{dt}=\frac{d^{2}x}{dt^{2}}} .

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-Cormer para obter o primeiro passo:
x.append(x[0]+dt*v[0])  
t.append(dt)

#Método de Verlet:
for it in range(1,Np):
  x.append(-w2*x[it]*dt*dt-x[it-1]+2*x[it]) #Método de Verlet
  v.append((x[it+1]-x[it-1])/(2*dt))
  E.append(k*x[it]**2/2+m*v[it]**2/2)
  t.append(dt+it*dt)

#plt.plot(t,x)
#plt.plot(t[:len(t)-1],v) #Velocidade tem um elemento a menos
#plt.plot(t[:len(t)-1],E)
plt.plot(x[:len(x)-1],v)

Método Velocidade de Verlet

O método de verlet é similar ao leapfrog, mas é síncrono e não exige inicialização. Pela derivada à direita com uma variação de 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/":): {\textstyle \Delta t/2} , obtemos uma equação para velocidade:

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\right)}{\Delta t/2}\longrightarrow v\left(t+\Delta t/2\right)=v\left(t\right)+a\left(t\right)\frac{\Delta t}{2}\qquad\left(1\right)}

Fazendo o mesmo processo do leapfrog para a posiçã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 v\left(t+\Delta t/2\right)\approx\frac{x\left(t+\Delta t\right)-x\left(t\right)}{\Delta t}\longrightarrow x\left(t+\Delta t\right)=x\left(t\right)+v\left(t+\Delta t/2\right)\Delta t}

Ainda podemos reescrever, substituindo:

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\right)\Delta t+a\left(t\right)\frac{\Delta t^{2}}{2}\qquad\left(2\right)}

Isto é, partindo de um tempo 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/":): {\textstyle t} onde conhecemos posição e velocidade, calculamos a velocidade em 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/":): {\textstyle t+\frac{\Delta t}{2}} e usamos essa velociade para calcular a poição em 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/":): {\textstyle t+\Delta t} . Agora para a velocidade no instante 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/":): {\textstyle t+\Delta t} , começamo com uma derivada centrada:

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\right)=\frac{x\left(t+\Delta t\right)-x\left(t-\Delta t\right)}{2\Delta t}\longrightarrow v\left(t+\Delta t\right)=\frac{x\left(t+2\Delta t\right)-x\left(t\right)}{2\Delta t}\qquad\left(3\right)}

Então pegamos o método de Verlet e avançamos 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/":): {\textstyle \Delta t} :

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} x\left(t+\Delta t\right) & =a\left(t\right)\Delta t^{2}-x\left(t-\Delta t\right)+2x\left(t\right)\\ x\left(t+2\Delta t\right) & =a\left(t+\Delta t\right)\Delta t^{2}-x\left(t\right)+2x\left(t+\Delta t\right)\end{align}}

E substituímos na velocidade (equação 3):

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\right) & =\frac{a\left(t+\Delta t\right)\Delta t^{2}-x\left(t\right)+2x\left(t+\Delta t\right)-x\left(t\right)}{2\Delta t}\\ = & a\left(t+\Delta t\right)\frac{\Delta t}{2}-+\frac{x\left(t+\Delta t\right)-x\left(t\right)}{\Delta t}\end{align}}

E usando então a equação para posição que encontramos (equação 2) para substituir 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/":): {\textstyle x\left(t+\Delta t\right)-x\left(t\right)}  :

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\right) & =a\left(t+\Delta t\right)\frac{\Delta t}{2}+\frac{x\left(t+\Delta t\right)-x\left(t\right)}{\Delta t}\\ = & v\left(t\right)+\left(a\left(t+\Delta t\right)+a\left(t\right)\right)\frac{\Delta t}{2}\end{align}}

Então agora utilizamos a posição em 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/":): {\textstyle t+\Delta t} para encontrarmos a velocidade no mesmo instante. 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} x\left(t+\Delta t\right) & =x\left(t\right)+v\left(t\right)\Delta t+a\left(t\right)\frac{\Delta t^{2}}{2}\\ v\left(t+\Delta t\right) & =v\left(t\right)+\left(a\left(t+\Delta t\right)+a\left(t\right)\right)\frac{\Delta t}{2}\end{align}}

Ou ainda simplesmente escrevendo explicitamente a equação 1:

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+\frac{\Delta t}{2}\right) & =v\left(t\right)+a\left(t\right)\frac{\Delta t}{2}\\ x\left(t+\Delta t\right) & =x\left(t\right)+v\left(t+\frac{\Delta t}{2}\right)\Delta t\\ v\left(t+\Delta t\right) & =v\left(t+\frac{\Delta t}{2}\right)+a\left(t+\Delta t\right)\frac{\Delta t}{2}\end{align}}


Exemplo

Resolvendo o mesmo exemplo anterior, temos:


Principais materiais utilizados

  1. The Second Derivative (Matthew Boelkins, David Austin & Steven Schlicker; LibreTexts)
  2. Verlet Method (Brasnislav K. Nikolic, Universidae de Delaware)