【问题标题】:Nested for loop error or indexing error in MATLABMATLAB中的嵌套for循环错误或索引错误
【发布时间】:2019-09-15 11:21:57
【问题描述】:

我从头开始创建了这段代码。我想绘制我的“观察到的”和“状态”的图和/或直方图(这些是 2 个矩阵)。在第 200 次迭代时出现了一些问题,其中我的状态矩阵变为全 0,没有数据输入到状态矩阵中。任何人都可以对代码进行故障排除吗?我可能的状态是 {1,2,3}。

更新: 当我调整我的 n 值时,它会调整它将填充多少长度 T。因此,n=5,只运行 T 的 1/5,n=1,运行整个 T 长度。我需要一个 nxT 矩阵最后(5X1000)。问题在于我设置 for 循环的方式。 我仍然无法解决错误。

%Initialize A,pi,T

N = 3; # of states
%A is transition prob matrix
A = [.99,.005,.005;.005,.990,.005;.005,.005,.990];
%pi is initial state vector
pi = [1/3,1/3,1/3];
%T is # of observations per simulation
T = 1000;
%n is # of simulations
n = 5;
%Allocate space for the state matrix
State = zeros(n,T);
Observe = zeros(n,T);
%Create dummy emission matrix, must be row stochastic 
B = ones(n,T)./T;
%loop over # of simulations
for i=1:1:n
    x = rand(1);
    if x <= (1/3)
        State(i,1) = 1;
    elseif x > (1/3) && x <= (2/3)
        State(i,1) = 2;
    else
        State(i,1) = 3;
    end
    if State(i,1) == 1
        b = -1;
    elseif State(i,1) == 2
        b = 0;
    else
        b = 1;
    end
    Observe(i,1)= normrnd(b,1);
    for k=2:1:T
        %Possible state 1,2,3
        State(k) = randsample(N, 1, true, A(State(k-1),:));
        if State == 1
            c = -1;
        elseif State == 2
            c = 0;
        else
            c = 1;
        end
        Observe(i,k)= normrnd(c,1);
    end
end

【问题讨论】:

  • 我刚刚再次运行 T = 200,它停止在第 40 列输入数据。因此,该程序仅适用于状态矩阵长度的前 1/5。我似乎无法弄清楚为什么。
  • if State == 1 很可能不会做你想做的事。而State(k) 也可能是错误的,应该是State(i,k)。
  • @CrisLuengo 我认为它应该是 State(i,k),但我收到了这个错误:
  • 位置 1 的索引无效。数组索引必须是正整数或逻辑值。 hm 中的错误(第 36 行) State(i,k) = randsample(3, 1, true, A(State(k-1),:));
  • 确实,State == 1 也是一个大矩阵,而不是布尔值。您在那里也缺少索引。

标签: matlab loops random hidden-markov-models


【解决方案1】:
State(k) = randsample(N, 1, true, A(State(k-1),:));

此行在 State(k-1) 内的位置 1 中缺少索引 (i)。应该是:

State(i,k) = randsample(N, 1, true, A(State(i,k-1),:));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-12
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    相关资源
    最近更新 更多