1. 程式人生 > >Verlet積分演算法簡介

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) 進行泰勒展開

taylor expansions

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

displacement expression in verlet algorithm

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

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

velocity expression in verlet algorithm

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

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' 時刻的加速度

,相當於將已知條件向前推進了一步(可以對比紅色的部分)。

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

1469256656172035.jpg

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