В этом примере показано, как программно и визуально идентифицировать классы в цепи Маркова. В примере также извлекается повторяющийся класс из цепочки для дальнейшего анализа.
Создайте цепочку Маркова из восьми состояний из случайно сгенерированной матрицы перехода с 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);

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