Matlab仿真错误
Matlab simulation error
我对 Matlab 完全陌生。我正在尝试模拟维纳和泊松组合过程。
为什么我会得到下标赋值维度不匹配?
我正在尝试模拟
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)
你忘了索引
Z(k)=lambda*W.^2-N
一定是
Z(k)=lambda*W(k).^2-N(k)
确实缺少一些索引,但我认为您将受益于更 'Matlab way' 重写您的代码。下面的代码利用了 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)
结果示例:
我对 Matlab 完全陌生。我正在尝试模拟维纳和泊松组合过程。
为什么我会得到下标赋值维度不匹配?
我正在尝试模拟
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)
你忘了索引
Z(k)=lambda*W.^2-N
一定是
Z(k)=lambda*W(k).^2-N(k)
确实缺少一些索引,但我认为您将受益于更 'Matlab way' 重写您的代码。下面的代码利用了 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)
结果示例: