Идентифицируйте классы в цепи Маркова

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

Создайте Цепь Маркова с восемью состояниями из случайным образом сгенерированной матрицы перехода с 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);

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

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

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

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

  • Являются ли классы текущими, ClassRecurrence

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

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

     3     4     4     2     1     4     3     4

ClassStates = 1x4 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 array
    "Regime 1"    "Regime 7"

ans = 1x4 string array
    "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);

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

Смотрите также

Объекты

Функции

Похожие темы