韦尔莱算法是一种用于求解牛顿运动方程的数值方法,被广泛应用于分子动力学模拟以及视频游戏中。韦尔莱算法的优点在于:数值稳定性比简单的欧拉方法高很多,并保持了物理系统中的时间可逆性与相空间体积元体积守恒的性质。
Carl Størmer首次应用韦尔莱算法求解磁场中运动粒子的轨迹,因此韦尔莱算法又被称为Størmer算法。1967年法国物理学家Loup Verlet将其应用于分子动力学计算,从此韦尔莱算法流行起来。
基本韦尔莱算法[编辑]
牛顿运动方程为
![{\displaystyle a(t)={\frac {f(t)}{m}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/45c923c1a23be3388de529baac8c3e0f8b1b147a)
代入到粒子的坐标关于时间步的Taylor展式中
![{\displaystyle r(t+\Delta t)=r(t)+v(t)\Delta t+{\frac {a(t)}{2}}\Delta t^{2}+{\frac {1}{3!}}{\frac {d^{3}r}{dt^{3}}}\Delta t^{3}+{\mathcal {O}}(\Delta t^{4})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2c39aab557dbb82b168969c8d0196a57a566a448)
得
![{\displaystyle r(t+\Delta t)=r(t)+v(t)\Delta t+{\frac {f(t)}{2m}}\Delta t^{2}+{\frac {1}{3!}}{\frac {d^{3}r}{dt^{3}}}\Delta t^{3}+{\mathcal {O}}(\Delta t^{4})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/06db72e7c673fc984f1b7f5285b31cf5dd7d0f4c)
同理
![{\displaystyle r(t-\Delta t)=r(t)-v(t)\Delta t+{\frac {f(t)}{2m}}\Delta t^{2}-{\frac {1}{3!}}{\frac {d^{3}r}{dt^{3}}}\Delta t^{3}+{\mathcal {O}}(\Delta t^{4}):}](https://wikimedia.org/api/rest_v1/media/math/render/svg/62f1ef6b702d2c91200b598f8960a1093910b5ea)
两式相加,得
![{\displaystyle r(t+\Delta t)+r(t-\Delta t)=2r(t)+{\frac {f(t)}{m}}\Delta t^{2}+{\mathcal {O}}(\Delta t^{4})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e3e27fbc338255ef56872d4730e3eb34e2f25cbc)
则
![{\displaystyle r(t+\Delta t)\simeq 2r(t)-r(t-\Delta t)+{\frac {f(t)}{m}}\Delta t^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ec25f0020de773f565718af7e556fea473c70134)
新位置的计算误差为四阶,
为时间步。因为韦尔莱算法中不涉及速度,如果希望得到速度,须从轨线中推导速度表达式:
![{\displaystyle v(t)={\frac {r(t+\Delta t)-r(t-\Delta t)+{\mathcal {O}}(\Delta t^{3})}{2\Delta t}}={\frac {r(t+\Delta t)-r(t-\Delta t)}{2\Delta t}}+{\mathcal {O}}(\Delta t^{2})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/bf8b18b61494ca43882ac851fcf6611ec7ffbe18)
速度表示的韦尔莱算法[编辑]
一般地,速度表示下的韦尔莱算法更为常用,它可以给出同一时间变量下的速度和位置。它实际上与基本的韦尔莱算法等价,精度相同。
首先对位置进行 Taylor 展开
![{\displaystyle r(t+\Delta t)=r(t)+v(t)\Delta t+{\frac {f(t)}{2m}}\Delta t^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7d6e7d0aaa406b23d6f0df2f3638ce7ad8687b87)
![{\displaystyle r(t+2\Delta t)=r(t+\Delta t)+v(t+\Delta t)\Delta t+{\frac {f(t+\Delta t)}{2m}}\Delta t^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/87605390a3c2546317522984a5caaf9d363e000f)
对两式相减可得
![{\displaystyle r(t+2\Delta t)+r(t)=2r(t+\Delta t)+\left[v(t+\Delta t)-v(t)\right]\Delta t+{\frac {f(t+\Delta t)-f(t)}{2m}}\Delta t^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/76fb51db2075f08d6cd04cf579b1bf2294a7f790)
将最初的 Verlet 公式中的
换为
,
![{\displaystyle r(t+2\Delta t)\simeq 2r(t+\Delta t)-r(t)+{\frac {f(t+\Delta t)}{m}}\Delta t^{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/fac94b95fc3cab80e7ab41e34a1a62afe35a6e9d)
代入前式,可得
![{\displaystyle v(t+\Delta t)=v(t)+{\frac {f(t+\Delta t)+f(t)}{2m}}\Delta t}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b018f1378f929b8ba3ddf4ab5d6baac47bcd36ae)
此式即为速度表示的韦尔莱算法。实际常用的计算步骤为,
1.首先通过 Taylor 展开
计算得到位置
2.由
和系统的相互作用势条件(如果相互作用仅依赖位置
)可以求的力场
3.由速度表示的韦尔莱公式求出新的速度
。
参考文献[编辑]
- Daan Frenkel. 第四章. "Understanding Molecular Simulation - From Algorithms to Applications" Academic Press. 2002.