Euler-Maruyama 方法数值算例

pdf原文件

将随机微分方程写成积分形式有
X(t)=X_0+\int_0 ^t f(X(s))ds+\int_0 ^t g(X(s))dW(s), 0\le t\le T. (1)

其中f, g都是标量函数并且初始条件X_0是随机变量。这里的积分采用的是 Ito 积分,方程的解X(t)是随t变化的随机变量。现在定义一种求解上述方程的数值方法,并且将数值方法在时间步长趋于 0 时所得的随机变量X(t)作为方程的解。将方程写为微分形式有

dX(t) = f (X(t))dt + g(X(t))dW (t), X(0) = X_0 , 0\le t \le T. (2)

在区间[0, T ]采用一个算法来求解上面微分方程,首先进行离散处理。使 \Delta t = T /L,其中L为某一正整数,并且有\tau _j= j \Delta t。数值近似 X(\tau _j)表示成X_j。Euler-Maruyama 具有如下形式

X_j = X_{j-1} + f (X_{j-1})\Delta t + g(X_{j-1})(W(\tau _j)- W (\tau _{j-1} )), j = 1, 2, ..., L. (3)

方程 (3) 可以由积分形式来理解,积分形式为

X(\tau _j ) = X(\tau _{j-1} ) +\int_{\tau _{j-1}} ^{\tau _j} f (X(s))ds +\int _{\tau _{j-1}} ^{\tau _j} g(X(s))dW (s). (4)

方程 (3) 中每一项都和方程 (4) 相对应,当g\equiv 0时,方程 (3) 退化成 Euler 方法。

首先我们将离散 Brownian 路径来生成方程 (3) 所需要的增量W (\tau _j)- W (\tau_{j-1}),为了方便起见,我们将时间步长选为 Brownian 路径增量\delta t的整数倍R\delta t,其中R\ge 1为整数。这样可以使得采用 Euler-Maruyama 计算的时间点序列\{ \tau _j \}是包含在 Brownian 路径的时间序列\{ \tau _j \}中的。列举一个将 Euler-Maruyama 方法应用到线性 SDE 的例子

dX(t) = \lambda X(t)dt + \mu X(t)dW (t), X(0) = X_0. (5)

其中\lambda\mu都是实常数;因此在方程 (2) 中f (X) = \lambda Xg(X) = \mu X。这个是金融数学中的Black-Scholes 偏微分方程可以由方程 (5) 得到 [2]。方程 (5) 的解析解为 [3]

X(t) = X(0) \exp((\lambda -\mu ^2)t + \mu W (t)). (6)

\lambda = 2, \mu = 1, X_0 = 1。令 Brownian 路径在区间[0, 1]之间和\delta t = 2^{-8},并且按照方程 (6) 得到方程的解析解 Xture。然后采用 Euler-Maruyama 计算时采用时间步\Delta t = R\delta t,令R = 4。采用Euler-Maruyama 的一般步长所对应的增量W (\tau _j ) -W (\tau _{j-1} )的数值为

W (\tau _j ) - W (\tau_{j-1}) = W (jR\delta t)-W ((j-1)R\delta t) =\sum _{k=jR-R+1} ^{jR} dW_k.

由此得到 Euler-Maruyama 方法的数值解。得到结果如图 1

此时在t=T的点数值解和解析解的误差为emerr = 0.6907,当取R = 1时,如图 1,在t = T的点数值解和解析解的误差为 emerr = 0.0821

Matlab程序

randn('state',100)
lambda=2;mu=1;Xzero=1;
T=1;N=5000;dt=1/N;
dW=sqrt(dt)*randn(1,N);
W=cumsum(dW);

Xtrue=Xzero*exp((lambda-0.5*mu^2)*([dt:dt:T])+mu*W);
plot([0:dt:T],[Xzero,Xtrue],'k-'),hold on;

R=1;Dt=R*dt;L=N/R;
Xem=zeros(1,L);
Xtemp_em=Xzero;
for j=1:L
    t=j*Dt;
    Winc=sum(dW(R*(j-1)+1:R*j));
    Xtemp_em=Xtemp_em+Dt*lambda*Xtemp_em+mu*Xtemp_em*Winc; 
    Xem(j)=Xtemp_em;
end

plot([0:Dt:T],[Xzero,Xem],'k--*'),hold off;
xlabel('{$t$}','Interpreter','latex','FontSize',12)
ylabel('{$X_t$}','Interpreter','latex','FontSize',16,'Rotation',0,'HorizontalAlignment','right')

emerr=abs(Xem(end)-Xtrue(end));

参考文献

[1] Desmond J. Higham, An Algorithmic Introduction to Numerical Simulation of Stochatic Differential Equations, SIAM REVIEW, 43(3), 2001, 525-546.

[2] J. C. Hull, Options, Futures, and Other Derivatives, 6th ed., Pearson PH, 2009, 307-309.

[3] X. Mao, Stochatic Differential Equations and Applications, Horwood, Chichester, 1997, 105.

 

 

 

 

 

 

 

 

  • 8
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值