2015-08-13 114 views
0

我有这种看起来像GBM的非线性过程,但不是因为平方根噪声。 Mu的常量都是常量,l(在一个Mu和sigma的前面)是一个参数。西格玛也是一个常数。 N是增加的人口。在Matlab中模拟非线性SDE

dynamic

这是不容易解析求解。最终,我有兴趣从Matlab中用“连续”的时间步骤开始讨论这些家伙,改变每个过程的参数l,并且看看是什么样子。

由于我从未在SDE的Matlab中做过任何事情,所以我有点失落。我看过不同的SDE求解器,但我似乎无法让它们工作。如上所述,我不希望解决任何问题,只是操纵不同的人口规模,时间和这个参数l。

任何人都可以指出我正确的方向吗?

+0

这不是ODE,而是[SDE](https://en.wikipedia.org/wiki/Stochastic_differential_equation)。它看起来像[CIR过程]的一种形式(https://en.wikipedia.org/wiki/Cox-Ingersoll-Ross_model)。如果你有Matlab的[金融工具箱](http://mathworks.com/help/finance/),你可以使用['cir'](http://mathworks.com/help/finance/cir.html)或者手动指定您的SDE。否则,您可以在Github上查看我的[SDETools](https://github.com/horchler/SDETools)。 – horchler

+0

是的。它接近CIR流程。但是,我不想要平均反转部分,所以我需要自己指定一些东西。我已经下载了你的SDETools并安装了它,但在实际操作中仍然有些失落。我会看看你的一些例子。谢谢! – TMorville

+0

如果您不熟悉SDE和Euler-Maruyma集成,我强烈建议阅读* [随机微分方程数值模拟的算法简介](http://dx.doi.org/10.1137/S0036144500378302)*由Desmond J.Hahham继续。本文介绍了很多Matlab的例子(尽管一些代码已经过时了,当然还没有针对性能进行优化)。论文中Matlab文件的URL不起作用,但可以在这里找到(http://personal.strath.ac.uk/d.j.higham/algfiles.html)。 – horchler

回答

0

基于Desmond J. Higham,我结束了这个,看起来很丑陋的方法。这很慢。如果有人对我如何矢量化或包含一个SDE求解器(如SDETools)以更快地模拟它提出任何建议,我将非常感激。

clear; 
clc; 

clf 
T = 35; 
N = 2^12; 
Delta = T/N;   
lambda = 0.1; 
sigma = 4; 
Xzero = 1; 
P = 500; 

Xem = zeros(1,N+1);  
Xem(1) = Xzero; 

for i = 1:P 
    for j = 1:N 

     if log(Xem(j)) < 0 
      Xem(j) = nan; 
     end 

     Winc = sqrt(Delta)*randn; 
     Xem(j+1) = Xem(j) + lambda*Delta*Xem(j) + sigma*sqrt(Xem(j))*Winc; 

    end 
    plot(0:Delta:T,log(Xem)) 
    xlabel('t','FontSize',16), ylabel('X','FontSize',16) 
    hold on; 
end