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