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

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

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

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

См. также

Объекты

Функции

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте