在 Matlab 中模拟非线性 SDE
Simulating non-linear SDE in Matlab
我有一个看起来像 GBM 的非线性过程,但不是因为平方根噪声。两个 Mu 都是常数,l(在一个 Mu 和 sigma 前面)是一个参数。西格玛也是一个常数。 N是增加的人口。
这不容易解析解决。
最终,我有兴趣在 Matlab 中以 "continous" 时间步开始这些人,改变每个过程的参数 l,看看它是什么样子。
由于我从未在 Matlab 中使用 SDE 做过任何事情,所以我有点迷茫。我看过不同的 SDE 求解器,但我似乎无法让它们工作。如前所述,我不希望解决任何问题,只是操纵不同的人口规模、时间和这个参数 l。
谁能给我指出正确的方向?
基于 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
我有一个看起来像 GBM 的非线性过程,但不是因为平方根噪声。两个 Mu 都是常数,l(在一个 Mu 和 sigma 前面)是一个参数。西格玛也是一个常数。 N是增加的人口。
这不容易解析解决。
最终,我有兴趣在 Matlab 中以 "continous" 时间步开始这些人,改变每个过程的参数 l,看看它是什么样子。
由于我从未在 Matlab 中使用 SDE 做过任何事情,所以我有点迷茫。我看过不同的 SDE 求解器,但我似乎无法让它们工作。如前所述,我不希望解决任何问题,只是操纵不同的人口规模、时间和这个参数 l。
谁能给我指出正确的方向?
基于 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