我想用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函数的代码不起作用!
答案 0 :(得分:0)
为了在数字上解决SDE,您需要一个初始条件(IC)来处理您想要编码的函数。在你的情况下,我猜它是z。如果您想在没有明确声明IC的情况下这样做,可以将其编写为带IC的功能。然后进行测试,您将输入随机IC。
另外,我不清楚你的z0是否也是随机的并且随时间变化,是每个时间步长随机生成的,还是只是随机生成一次的常数。更简单的是,如果z0只是z的IC,那么你的f_i只是检查z在时间步长中是增加还是减少,以决定z如何改变下一个时间步。请澄清一下,你的问题会更清楚。
在不使用求解器的情况下模拟SDE并不太难。您可以尝试并获得更好的结果,因为有时您真的需要学习求解器的行为才能使其工作。如果您选择编写自己的求解器以确保准确性,我建议采用蒙特卡罗方法。
我希望我的回答有所帮助。如果您还有任何疑问,请随时提出。