【问题标题】:Matlab simulation errormatlab仿真错误
【发布时间】:2017-02-18 22:03:48
【问题描述】:

我对 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)

【问题讨论】:

  • W 是一个向量,因此W.^2 是一个向量,因此lambda*W.^2-N 是一个向量。但是您正试图将其放入Z 的一个位置,即Z(k)。
  • 谢谢菲尔。写这篇的时候没注意!干杯:)

标签: matlab stochastic-process


【解决方案1】:

确实缺少一些索引,但我认为您会受益于以更“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)

结果示例:

【讨论】:

  • 欣赏这个!我应该学习这种 Matlab 类型的编码!谢谢:)
【解决方案2】:

你忘记了索引

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

应该是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 2012-04-23
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多