2

我对 Matlab 完全陌生。我正在尝试模拟 Wiener 和 Poisson 的组合过程。

为什么我得到下标分配维度不匹配?

我正在尝试模拟

Z(t)=lambda*W^2(t)-N(t)

哪里W是维纳过程,N是泊松过程。

我正在使用的代码如下:

T=500
dt=1
K=T/dt
W(1)=0
lambda=3
t=0:dt:T
for k=1:K
r=randn
W(k+1)=W(k)+sqrt(dt)*r
N=poissrnd(lambda*dt,1,k)
Z(k)=lambda*W.^2-N
end
plot(t,Z)
4

2 回答 2

0

你忘记了索引

Z(k)=lambda*W.^2-N

肯定是

Z(k)=lambda*W(k).^2-N(k)
于 2017-02-18T22:55:36.313 回答
0

确实缺少一些索引,但我认为您会从以更“Matlab 方式”重写代码中受益。以下代码使用 Matlab 基本变量是矩阵的事实,并以矢量化方式计算结果。尝试理解这种写作,因为这是更有效地利用 Matlab 的方法,同时编写更短且可读的代码:

T = 500;
dt = 1;
K = T/dt;
lambda = 3;
t = 1:dt:T;
sqdtr = sqrt(dt)*randn(K-1,1); % define sqrt(dt)*r as a vector
N = poissrnd(lambda*dt,K,1); % define N as a vector
W = cumsum([0; sqdtr],1); % cumulative sum instead of the loop
Z = lambda*W.^2-N; % summing the processes element-wiesly
plot(t,Z)

结果示例:

维纳

于 2017-02-19T09:34:28.363 回答