Этот пример показывает, как программно и визуально идентифицировать классы в марковской цепи. Пример также извлекает рекуррентный класс из цепи для последующего анализа.
Создайте цепь Маркова с восемью состояниями из случайным образом сгенерированной матрицы перехода с 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=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
присваивает номера интервалов каждому состоянию, чтобы идентифицировать принадлежность к классу. Программные результаты совпадают с визуальными результатами.
Чтобы охарактеризовать асимптотическое поведение цепи, выделите рекуррентный класс путем формирования подцепи. Чтобы создать подцепь:
Идентифицируйте повторяющийся класс в марковской цепи.
Идентифицируйте номер интервала для повторяющегося класса.
Передайте объект цепи Маркова и номер интервала в subchain
.
recurrentClass = find(ClassRecurrence,1); recurrentState = find((bins == recurrentClass),1); sc = subchain(mc,recurrentState);
sc
является dtmc
объект модели, представляющий рекуррентный класс в mc
.
Постройте график подцепи. Укажите вероятности перехода при помощи ребра цветов. Укажите маркеры узлов и цвета для переходных и периодических состояний и коммуникационных классов.
figure; graphplot(sc,'ColorEdges',true,'ColorNodes',true);
Как ожидалось, подцепь имеет один класс, состоящий из четырех рекуррентных состояний.