UA MATH575B 数值分析下VI 统计物理的随机模拟方法1

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δ(t1t2),其中 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ρ=Dx22ρ
这个是一维的扩散方程, 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πDt 1exp(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 ARs×s,bRs,cRs
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=1sAijkj)x(t+h)=x(t)+j=1sbjkj
其中 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)

要解这个随机过程可以用随机模拟的方法:

  1. 第一步,从标准正态分布中抽一个样本 ζ \zeta ζ
  2. 第二步,根据 x i + 1 = x i + 2 D τ ζ x_{i+1} = x_{i} + \sqrt{2D\tau} \zeta xi+1=xi+2Dτ ζ更新随机过程的值;

重复这两步,直到达到设置的时间上限。

由此我们可以总结出模拟一个随机微分方程的一般性做法:

  1. 用数值ODE的方法导出SDE解的递推关系
  2. 生成正态分布的随机数,根据递推关系模拟这个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δ(t1t2) D > 0 D>0 D>0。用这个例子介绍两种离散化的规则:

  1. 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ζ
  2. 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=xi12Dτ 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+τdt1tt+τ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=1Txixi+τ
其中 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(ts)ξ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+τ=Ete(ts)ξsdst+τe(t+τr)ξrdr=tt+τe(ts)e(t+τr)Eξsξrdsdr=tt+τe(ts)e(t+τr)δ(rs)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=1Txixi+τ
估计自相关函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值