自牛顿提出牛顿三定律到量子力学被提出之前,分子运动都是由经典的牛顿力学描述。牛顿力学中,应用最广泛的是牛顿第二定律:
F
=
m
∗
a
F = m * a
F=m∗a
(
1
)
(1)
(1)
在分子动力学中,力
F
F
F由分子间的相互作用势能
U
U
U对小球的位置
x
x
x求导得到,即
F
=
d
U
(
x
)
d
x
F = \frac{dU(x)}{dx}
F=dxdU(x)
(
2
)
(2)
(2)
(
1
)
(1)
(1)式中的加速度
a
a
a则可以通过分子的位置
x
x
x对时间的二次导得到
a
=
d
2
x
d
t
2
a = \frac{d^2x}{dt^2}
a=dt2d2x
(
3
)
(3)
(3)
而在实际的计算机模拟中,我们只能通过数值模拟的方式,对导数进行求解。即速度
v
v
v可以表示成
Δ
x
\Delta x
Δx比上
Δ
t
\Delta t
Δt:
v
ˉ
=
Δ
x
Δ
t
\bar v=\frac{\Delta x}{\Delta t}
vˉ=ΔtΔx
(
4
)
(4)
(4)
我们只有知道
t
t
t时刻分子的位置以及
t
+
Δ
t
t+\Delta t
t+Δt时刻分子的位置,才能知道分子在
[
t
,
t
+
Δ
t
]
[t ,t+\Delta t]
[t,t+Δt]这段时间的平均速度,当
t
t
t足够小时,这种平均速度即等价于瞬时速度。在欧拉积分中,我们将这种平均速度视作分子在时刻t的瞬时速度,即可以将
(
4
)
(4)
(4)式改写为:
x
(
t
+
Δ
t
)
=
x
(
t
)
+
v
(
t
)
∗
Δ
t
x(t+\Delta t)=x(t) + v(t) * \Delta t
x(t+Δt)=x(t)+v(t)∗Δt
(
5
)
(5)
(5)
对于加速度
a
a
a,由于我们已经将分子间的相互作用势能写作了
x
x
x的函数形式,则为
a
=
F
m
=
d
U
(
x
)
d
x
a=\frac{F}{m}=\frac{dU(x)}{dx}
a=mF=dxdU(x)
(
6
)
(6)
(6)
因此只要知道
t
t
t时刻分子的受力
F
F
F,我们就可以通过力
F
F
F得到
t
+
Δ
t
t+\Delta t
t+Δt时刻的速度
v
(
t
+
Δ
t
)
v(t+\Delta t)
v(t+Δt):
v
(
t
+
Δ
t
)
=
v
(
t
)
+
F
m
∗
Δ
t
v(t+\Delta t)=v(t) + \frac{F}{m}*\Delta t
v(t+Δt)=v(t)+mF∗Δt
(
7
)
(7)
(7)
在计算机中,通过迭代
(
5
)
(5)
(5)式和
(
7
)
(7)
(7)式就能简单地模拟出分子的运动。
我们可以用C++代码接口简单地模拟出分子运动`:
void Move::Euler_integration(particle* s, const int& N, const double& dt)
{
for (int i = 0; i < N; ++i) {
vecScaleAdd(s[i].x, s[i].x, dt, s[i].v);
vecScaleAdd(s[i].v, s[i].v, dt, s[i].f);
}
}`