exponenta event banner

Определение классов в цепи Маркова

В этом примере показано, как программно и визуально идентифицировать классы в цепи Маркова. В примере также извлекается повторяющийся класс из цепочки для дальнейшего анализа.

Создайте цепочку Маркова из восьми состояний из случайно сгенерированной матрицы перехода с 50 неосуществимыми переходами в случайных расположениях. Неосуществимый переход - это переход, вероятность возникновения которого равна нулю. Назначьте произвольные имена состояниям.

numStates = 8;
Zeros = 50;
stateNames = strcat(repmat("Regime ",1,8),string(1:8));
rng(1617676169) % For reproducibility
mc = mcmix(8,'Zeros',Zeros,'StateNames',stateNames);

Визуально классифицировать состояния в цепи Маркова путём построения диграфа. Укажите маркеры узлов и цвета для переходных и повторяющихся состояний и передаваемых классов.

figure;
graphplot(mc,'ColorNodes',true);

Figure contains an axes. The axes contains 5 objects of type graphplot, line. These objects represent Transient, Aperiodic.

Цепь имеет четыре класса, три переходных и один апериодический. Апериодический класс состоит из четырёх рецидивирующих состояний.

Программно классифицировать состояния в цепи Маркова. Верните следующее:

  • Индексы классов, bins

  • Членство в классе, ClassStates

  • Являются ли классы повторяющимися, ClassRecurrence

  • Периоды классов, ClassPeriod

[bins,ClassStates,ClassRecurrence,ClassPeriod] = classify(mc)
bins = 1×8

     3     4     4     2     1     4     3     4

ClassStates=1×4 cell array
    {["Regime 5"]}    {["Regime 4"]}    {1x2 string}    {1x4 string}

ClassRecurrence = 1x4 logical array

   0   0   0   1

ClassPeriod = 1×4

     1     1     1     1

ClassStates{:}
ans = 
"Regime 5"
ans = 
"Regime 4"
ans = 1x2 string
    "Regime 1"    "Regime 7"

ans = 1x4 string
    "Regime 2"    "Regime 3"    "Regime 6"    "Regime 8"

classify присваивает номера ячеек каждому состоянию для идентификации членства в классе. Программные результаты соответствуют визуальным результатам.

Чтобы охарактеризовать асимптотическое поведение цепи, выделяют рецидивирующий класс, образуя подцепь. Чтобы создать подцепь, выполните следующие действия.

  1. Определите повторяющийся класс в цепи Маркова.

  2. Определите номер ячейки повторяющегося класса.

  3. Передать объект цепочки Маркова и номер ячейки в subchain.

recurrentClass = find(ClassRecurrence,1);
recurrentState = find((bins == recurrentClass),1); 

sc = subchain(mc,recurrentState);

sc является dtmc объект модели, представляющий повторяющийся класс в mc.

Постройте график подцепи. Укажите вероятности перехода с помощью краевых цветов. Укажите маркеры узлов и цвета для переходных и повторяющихся состояний и передаваемых классов.

figure;
graphplot(sc,'ColorEdges',true,'ColorNodes',true);

Figure contains an axes. The axes contains 2 objects of type graphplot, line. This object represents Aperiodic.

Как и ожидалось, подцепь имеет один класс, состоящий из четырех повторяющихся состояний.

См. также

Объекты

Функции

Связанные темы