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

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

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

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

См. также

Объекты

Функции

Похожие темы