如何用欧拉方法对微分方程进行数值积分?

时间:2015-06-07 17:30:44

标签: matlab differential-equations numerical-integration stochastic

我想用MATLAB数值求解随机微分方程(SDE),我编写的代码只是不识别sde函数!

问题如下:

 dz=v*dt +sqrt(2*Ds)*dw_t
 where v = 1/(N*delta) * sigma f_i (i=1- N)
 N= 100,
 delta = e6,

和f_i由以下等式计算:

 for z>=z0 , f_i = -kappa*(z0_i -z)  and kappa = .17
 for z<z0 ,  f_i = -kappaT*(z0_i -z) and kappaT = 60

请注意,z0_i的初始值随机分布在60nm范围内。

 Ds = 4e4

和dw_t是Wiener过程中的增量。

首先,我不知道如何设置z的条件,而我没有它的价值! 其次,Euler算法与方程完全匹配,但我不知道为什么带sde函数的代码不起作用!

1 个答案:

答案 0 :(得分:0)

为了在数字上解决SDE,您需要一个初始条件(IC)来处理您想要编码的函数。在你的情况下,我猜它是z。如果您想在没有明确声明IC的情况下这样做,可以将其编写为带IC的功能。然后进行测试,您将输入随机IC。

另外,我不清楚你的z0是否也是随机的并且随时间变化,是每个时间步长随机生成的,还是只是随机生成一次的常数。更简单的是,如果z0只是z的IC,那么你的f_i只是检查z在时间步长中是增加还是减少,以决定z如何改变下一个时间步。请澄清一下,你的问题会更清楚。

在不使用求解器的情况下模拟SDE并不太难。您可以尝试并获得更好的结果,因为有时您真的需要学习求解器的行为才能使其工作。如果您选择编写自己的求解器以确保准确性,我建议采用蒙特卡罗方法。

我希望我的回答有所帮助。如果您还有任何疑问,请随时提出。