1

我想在 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 是维纳过程中的一个增量。

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

4

1 回答 1

0

为了对 SDE 进行数值求解,您需要为要编码的函数提供初始条件 (IC)。在你的情况下,我猜是z。如果您想在不明确声明 IC 的情况下这样做,则可以将其编写为接受 IC ​​的函数。然后进行测试,您将输入随机 IC。

此外,我不清楚您的 z0 是否也是随机的并随时间变化,是每个时间步随机生成的,还是仅随机生成一次的常数。更简单的是,如果 z0 只是 z 的 IC,那么您的 f_i 只需检查 z 在整个时间步中是否增加或减少,以确定 z 将如何改变下一个时间步。请澄清这一点,您的问题看起来会更清楚。

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

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

于 2016-11-04T17:48:20.247 回答