UA MATH575B 数值分析下VI 统计物理的随机模拟方法1
模拟SDE的解
以最简单的随机微分方程为例,考虑随机游走
d
x
t
=
ξ
t
d
t
dx_t = \xi_t dt
dxt=ξtdt
其中
ξ
t
\xi_t
ξt是白噪声,假设
⟨
ξ
t
1
,
ξ
t
2
⟩
=
2
D
δ
(
t
1
−
t
2
)
\langle \xi_{t_1},\xi_{t_2} \rangle = 2D\delta(t_1-t_2)
⟨ξt1,ξt2⟩=2Dδ(t1−t2),其中
D
>
0
D>0
D>0,
δ
\delta
δ是Dirac函数。假设随机过程
x
t
x_t
xt的概率密度函数为
ρ
(
t
,
x
)
\rho(t,x)
ρ(t,x),它满足Fokker-Planck方程:
∂
ρ
∂
t
=
D
∂
2
ρ
∂
x
2
\frac{\partial \rho}{\partial t} = D \frac{\partial^2 \rho}{\partial x^2}
∂t∂ρ=D∂x2∂2ρ
这个是一维的扩散方程,
D
D
D叫做扩散系数。这个方程的一个解是
ρ
(
t
,
x
)
=
1
4
π
D
t
exp
(
−
x
2
4
D
t
)
\rho(t,x) = \frac{1}{\sqrt{4\pi Dt}}\exp \left(- \frac{x^2}{4Dt} \right)
ρ(t,x)=4πDt1exp(−4Dtx2)
即
x
t
x_t
xt是高斯过程,分布可以记为
N
(
0
,
2
D
t
)
N(0,2Dt)
N(0,2Dt)。
现在对时间做离散化,记time step为
τ
\tau
τ,简单回顾一下解数值ODE的Runge-Kutta方法 (RK):对于动力系统
x
˙
=
f
(
t
,
x
)
∈
R
m
\dot{x}=f(t,x)∈\mathbb{R}^m
x˙=f(t,x)∈Rm,定义RK的系数为
A
∈
R
s
×
s
,
b
∈
R
s
,
c
∈
R
s
A∈\mathbb{R}^{s×s}, b∈\mathbb{R}^s,c∈\mathbb{R}^s
A∈Rs×s,b∈Rs,c∈Rs
k
i
=
h
f
(
t
+
c
i
h
,
x
(
t
)
+
∑
j
=
1
s
A
i
j
k
j
)
x
(
t
+
h
)
=
x
(
t
)
+
∑
j
=
1
s
b
j
k
j
k_i=hf(t+c_i h,x(t)+\sum_{j=1}^s A_{ij} k_j) \\ x(t+h)=x(t)+\sum_{j=1}^s b_j k_j
ki=hf(t+cih,x(t)+j=1∑sAijkj)x(t+h)=x(t)+j=1∑sbjkj
其中
s
s
s是RK方法的阶数,
h
h
h是步长,根据上述递推关系,可以计算出
x
(
t
)
x(t)
x(t)的序列。
对于随机微分方程
d
x
t
=
ξ
t
d
t
dx_t = \xi_t dt
dxt=ξtdt,考虑RK2:
A
=
[
0
0
1
2
0
]
,
b
=
[
0
,
1
]
T
,
c
=
[
0
,
1
2
]
T
,
h
=
τ
A = \left[ \begin{matrix} 0 & 0 \\ \frac{1}{2} & 0 \end{matrix} \right],b=[0,1]^T,c=[0,\frac{1}{2}]^T,h=\tau
A=[02100],b=[0,1]T,c=[0,21]T,h=τ
则
k
1
=
τ
ξ
i
,
k
2
=
τ
ξ
i
+
1
2
x
i
+
1
=
x
i
+
τ
ξ
i
+
1
2
k_1 = \tau \xi_i,k_2 = \tau \xi_{i+\frac{1}{2}} \\ x_{i+1} = x_i + \tau \xi_{i+\frac{1}{2}}
k1=τξi,k2=τξi+21xi+1=xi+τξi+21
x
i
+
1
=
x
i
+
τ
ξ
i
+
1
2
x_{i+1} = x_{i} + \tau \xi_{i+\frac{1}{2}}
xi+1=xi+τξi+21
其中
⟨
ξ
i
,
ξ
j
⟩
=
2
D
δ
i
j
/
τ
\langle \xi_{i},\xi_{j} \rangle = 2D\delta_{ij}/\tau
⟨ξi,ξj⟩=2Dδij/τ,其中
δ
i
j
\delta_{ij}
δij为Kronecker符号,所有
ξ
i
\xi_i
ξi都是独立同分布的。因此可以将上式写成:
x
i
+
1
=
x
i
+
2
D
τ
ζ
ζ
∼
N
(
0
,
1
)
x_{i+1} = x_{i} + \sqrt{2D\tau} \zeta\\\zeta \sim N(0,1)
xi+1=xi+2Dτζζ∼N(0,1)
要解这个随机过程可以用随机模拟的方法:
- 第一步,从标准正态分布中抽一个样本 ζ \zeta ζ;
- 第二步,根据 x i + 1 = x i + 2 D τ ζ x_{i+1} = x_{i} + \sqrt{2D\tau} \zeta xi+1=xi+2Dτζ更新随机过程的值;
重复这两步,直到达到设置的时间上限。
由此我们可以总结出模拟一个随机微分方程的一般性做法:
- 用数值ODE的方法导出SDE解的递推关系
- 生成正态分布的随机数,根据递推关系模拟这个SDE
例1下面的SDE表示几何随机游走
d
x
t
=
x
t
ξ
t
d
t
dx_t =x_t \xi_t dt
dxt=xtξtdt
其中
ξ
t
\xi_t
ξt是白噪声,假设
⟨
ξ
t
1
,
ξ
t
2
⟩
=
2
D
δ
(
t
1
−
t
2
)
\langle \xi_{t_1},\xi_{t_2} \rangle = 2D\delta(t_1-t_2)
⟨ξt1,ξt2⟩=2Dδ(t1−t2),
D
>
0
D>0
D>0。用这个例子介绍两种离散化的规则:
- Ito规则: x i + 1 = x i + 2 D τ x i ζ x_{i+1}=x_i + \sqrt{2D\tau}x_i \zeta xi+1=xi+2Dτxiζ
- Stratonovich规则: x i + 1 = x i + 2 D τ x i + x i + 1 2 ζ x_{i+1}=x_i + \sqrt{2D\tau}\frac{x_i + x_{i+1}}{2} \zeta xi+1=xi+2Dτ2xi+xi+1ζ
在这个例子中,Ito规则导出的结果是
E
x
i
+
1
=
E
x
i
=
x
0
Ex_{i+1}=Ex_i = x_0
Exi+1=Exi=x0,这个比较明显。但Stratonovich规则导出的是
x
i
+
1
=
x
i
1
+
2
D
τ
ζ
2
1
−
2
D
τ
ζ
2
=
x
i
(
1
+
2
D
τ
ζ
2
)
(
1
+
2
D
τ
ζ
2
+
2
D
τ
ζ
2
4
+
o
(
ζ
2
)
)
=
x
i
(
1
+
2
D
τ
ζ
+
D
τ
ζ
2
+
o
(
ζ
2
)
)
→
x
i
(
1
+
D
τ
+
2
D
τ
ζ
)
x_{i+1} = x_i \frac{1+ \sqrt{2D\tau} \frac{\zeta}{2}}{1- \sqrt{2D\tau} \frac{\zeta}{2}} = x_i(1+ \sqrt{2D\tau} \frac{\zeta}{2})(1+\sqrt{2D\tau} \frac{\zeta}{2}+2D\tau \frac{\zeta^2}{4}+o(\zeta^2)) \\ = x_i(1+\sqrt{2D\tau}\zeta + D\tau \zeta^2 + o(\zeta^2)) \to x_i(1+D\tau+\sqrt{2D\tau}\zeta )
xi+1=xi1−2Dτ2ζ1+2Dτ2ζ=xi(1+2Dτ2ζ)(1+2Dτ2ζ+2Dτ4ζ2+o(ζ2))=xi(1+2Dτζ+Dτζ2+o(ζ2))→xi(1+Dτ+2Dτζ)
因此
E
x
i
+
1
=
E
x
i
(
1
+
D
τ
)
Ex_{i+1} = Ex_i (1+D \tau)
Exi+1=Exi(1+Dτ)
因此这两个规则模拟出来的结果会有明显差别。
用蒙特卡罗方法估计SDE解的自相关函数
随着时间流逝,
x
t
x_t
xt信息减少的规律可以用自相关函数来表示,
K
X
X
(
τ
)
=
⟨
(
x
t
+
τ
−
x
t
)
2
⟩
=
∫
t
t
+
τ
d
t
1
∫
t
t
+
τ
d
t
2
⟨
ξ
t
1
ξ
t
2
⟩
=
2
D
τ
K_{XX}(\tau) = \langle (x_{t+\tau}-x_t)^2 \rangle = \int_t^{t+\tau} dt_1 \int_t^{t+\tau} dt_2 \langle \xi_{t_1} \xi_{t_2}\rangle =2D \tau
KXX(τ)=⟨(xt+τ−xt)2⟩=∫tt+τdt1∫tt+τdt2⟨ξt1ξt2⟩=2Dτ
随机游走的自相关函数显然只与两个时点的差有关,这种随机过程叫平稳随机过程。如果SDE的解比较复杂,甚至根本写不出解析解,很难直接计算自相关函数,我们可以用Monte Carlo方法估计自相关函数:
K
X
X
(
τ
)
=
E
x
t
x
t
+
τ
≈
1
T
∑
i
=
1
T
x
i
x
i
+
τ
K_{XX}(\tau) = Ex_tx_{t+\tau} \approx \frac{1}{T} \sum_{i=1}^T x_i x_{i+\tau}
KXX(τ)=Extxt+τ≈T1i=1∑Txixi+τ
其中
x
i
,
x
i
+
τ
x_i,x_{i+\tau}
xi,xi+τ可以用随机模拟得到。
例2 一个简单的单位根过程,假设扩散系数
D
=
1
2
D=\frac{1}{2}
D=21
d
x
t
=
(
−
x
t
+
ξ
t
)
d
t
dx_t = (-x_t + \xi_t )dt
dxt=(−xt+ξt)dt
参考SDE的第一讲,这个方程定义了一个Ornstein-Uhlenbeck过程,它的解是
x
t
=
∫
−
∞
t
e
−
(
t
−
s
)
ξ
s
d
s
x_t = \int_{-\infty}^t e^{-(t-s)}\xi_s ds
xt=∫−∞te−(t−s)ξsds
根据这个解计算自相关函数,第一行到第二行用到的性质是Ito Isometry:
K
X
X
(
τ
)
=
E
x
t
x
t
+
τ
=
E
∫
−
∞
t
e
−
(
t
−
s
)
ξ
s
d
s
∫
−
∞
t
+
τ
e
−
(
t
+
τ
−
r
)
ξ
r
d
r
=
∫
−
∞
t
∫
−
∞
t
+
τ
e
−
(
t
−
s
)
e
−
(
t
+
τ
−
r
)
E
ξ
s
ξ
r
d
s
d
r
=
∫
−
∞
t
∫
−
∞
t
+
τ
e
−
(
t
−
s
)
e
−
(
t
+
τ
−
r
)
δ
(
r
−
s
)
d
s
d
r
=
1
2
exp
(
−
τ
)
,
τ
≥
0
K_{XX}(\tau) = Ex_{t}x_{t+\tau} = E \int_{-\infty}^t e^{-(t-s)}\xi_s ds \int_{-\infty}^{t+\tau} e^{-(t+\tau-r)}\xi_r dr \\ =\int_{-\infty}^t \int_{-\infty}^{t+\tau} e^{-(t-s)}e^{-(t+\tau-r)} E\xi_s\xi_r dsdr \\ =\int_{-\infty}^t \int_{-\infty}^{t+\tau} e^{-(t-s)}e^{-(t+\tau-r)} \delta(r-s) dsdr = \frac{1}{2} \exp(-\tau),\tau\ge0
KXX(τ)=Extxt+τ=E∫−∞te−(t−s)ξsds∫−∞t+τe−(t+τ−r)ξrdr=∫−∞t∫−∞t+τe−(t−s)e−(t+τ−r)Eξsξrdsdr=∫−∞t∫−∞t+τe−(t−s)e−(t+τ−r)δ(r−s)dsdr=21exp(−τ),τ≥0
如果我们不知道Ito Isometry,要计算自相关函数的解析解就会比较麻烦,这时就可以用Monte Carlo方法来估计自相关函数。先用RK2得到SDE的数值算法:
x
i
+
1
=
e
−
τ
x
i
+
τ
ζ
≈
(
1
−
τ
)
x
i
+
τ
ζ
x_{i+1}=e^{-\tau}x_i + \sqrt{\tau} \zeta \approx (1-\tau)x_i + \sqrt{\tau} \zeta
xi+1=e−τxi+τζ≈(1−τ)xi+τζ
根据这个递推关系模拟SDE的解,然后根据
K
X
X
(
τ
)
=
E
x
t
x
t
+
τ
≈
1
T
∑
i
=
1
T
x
i
x
i
+
τ
K_{XX}(\tau) = Ex_tx_{t+\tau} \approx \frac{1}{T} \sum_{i=1}^T x_i x_{i+\tau}
KXX(τ)=Extxt+τ≈T1i=1∑Txixi+τ
估计自相关函数。