Вложен для ошибки цикла или индексации в MATLAB - PullRequest
0 голосов
/ 26 апреля 2019

Я создал этот код с нуля.Я хочу составить график и / или гистограмму из моих "Наблюдаемых" и "Состояние" (это 2 матрицы).Некоторая проблема возникает на 200-й итерации, когда моя матрица состояний просто становится равной 0, данные не вводятся в матрицу состояний.Кто-нибудь может устранить неисправность кода?Мои возможные состояния: {1,2,3}.

ОБНОВЛЕНИЕ: Когда я настраиваю свое значение n, оно регулирует, сколько длины T он заполнит.Итак, n = 5, работает только для 1/5 от T и 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

1 Ответ

0 голосов
/ 26 апреля 2019
State(k) = randsample(N, 1, true, A(State(k-1),:));

В этой строке отсутствует индекс (i) в позиции 1 внутри State (k-1). Должно быть:

State(i,k) = randsample(N, 1, true, A(State(i,k-1),:));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...