天天看點

粒子運動模拟 - Verlet積分算法簡介

http://www.techbrood.com/zh/news/webgl/%E7%B2%92%E5%AD%90%E8%BF%90%E5%8A%A8%E6%A8%A1%E6%8B%9F---verlet%E7%A7%AF%E5%88%86%E7%AE%97%E6%B3%95%E7%AE%80%E4%BB%8B.html

Verlet算法是經典力學(牛頓力學)中的一種最為普遍的積分方法,被廣泛運用在分子運動模拟(Molecular Dynamics Simulation),行星運動以及織物變形模拟等領域。Verlet算法要解決的問題是,給定粒子t時刻的位置r和速度v,得到t+dt時刻的位置r(t+dt)和速度v(t+dt)。最簡單的方法是前向計算(考慮目前和未來)的速度位移公式,也就是顯式歐拉方法,但精度不夠,且不穩定。Verlet積分是一種綜合過去、現在和未來的計算方法(居中計算),精度為O(4), 穩定度好,且計算複雜度不比顯式歐拉方法高多少。

對于Verlet算法詳細的介紹,可以參考維基百科:Verlet integration .

Verlet算法簡要介紹

1. 将 x(t+Δt) 和 x(t-Δt) 進行泰勒展開

粒子運動模拟 - Verlet積分算法簡介

2. 将以上兩個表達式進行相加,得到位置表達式

粒子運動模拟 - Verlet積分算法簡介

這個式子就顯明,如果知道目前時刻的位置和加速度,前一時刻的位置,就可以推算出下一時刻的位置。

3. 将1中的兩個式子相減,再同時除以 2Δt 即可獲得速度表達式

粒子運動模拟 - Verlet積分算法簡介

這個式子顯明,隻有在知道前一時刻和後一時刻的位置時,才有可能知道目前時刻的速度。也就是說,在目前時刻不能獲得速度資訊,必須要等到下一時刻的位置确定以後,才能傳回來計算目前的速度。

4. 力(加速度)根據目前的位置 x(t),基于一定的勢函數進行更新

Verlet算法積分步運作過程

根據verlet算法,要計算t' ( = t+Δt)時刻的位置,必須知道 t'-2Δt 時刻和 t'-Δt 時刻的位置, t'-2Δt 的速度和 t'-Δt 時刻的加速度。具體演繹過程如下:

1. 根據 t'-Δt 和 t'-2Δt 時刻的位置、 t'-Δt 時刻的加速度 ,獲得目前時刻 t' 的位置。

2. 根據目前時刻 t' 的位置,更新目前位置下的加速度(受力)。

3. 同時,可以更新 t'-Δt 時刻的速度。(速度是附帶更新了,不更新速度并不妨礙積分過程繼續下去。)

那麼,現在就獲得了 t' 時刻的位置, t'-Δt 時刻的速度和 t' 時刻的加速度,相當于将已知條件向前推進了一步(可以對比紅色的部分)。

接下來的過程就是重複上面的過程。下圖生動的反映了這個過程。

粒子運動模拟 - Verlet積分算法簡介

其中t表示時間,r表示位置,v表示速度,a表示加速度。

繼續閱讀