将随机微分方程写成积分形式有
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 X和 g(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。
参考文献
[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.
微分方程的本质特征是方程中含有导数项,数值解法的第一步就是设法消除其导数值,这个过程称为离散化。实现离散化的基本途径是用向前差商来近似代替导数,这就是欧拉算法实现的依据。欧拉(Euler)算法是数值求解中最基本、最简单的方法,但其求解精度较低,一般不在工程中单独进行运算。所谓数值求解,就是求问题的解y(x)在一系列点上的值y(xi)的近似值yi。