识别马尔可夫链中的类
这个例子展示了如何以编程方式和可视化的方式识别马尔可夫链中的类。该示例还从链中提取了一个循环类以供进一步分析。
从随机生成的转移矩阵中创建一个八状态马尔可夫链,在随机位置上有50个不可行的转移。一个不可行的过渡是发生概率为零的转换。为状态指定任意名称。
numStates = 8;零= 50;stateNames = strcat(repmat(“政权”1 8)字符串(1:8));rng (1617676169)%用于再现性MC = McMix (8,“零”0,“StateNames”, stateNames);
通过绘制有向图可视地对马尔可夫链中的状态进行分类。为瞬态和循环状态以及通信类指定节点标记和颜色。
图;graphplot (mc,“ColorNodes”,真正的);
该链有四类,三类是瞬态的,一类是非周期的。非周期类由四个循环态组成。
以编程方式对马尔可夫链中的状态进行分类。返回如下:
类指标,
垃圾箱
类会员,
ClassStates
类是否循环,
ClassRecurrence
班时间,
ClassPeriod
[bin,ClassStates, classrecursive,ClassPeriod] = category (mc)
垃圾箱=1×83 4 4 2 1 4 3 4
ClassStates =1×4单元格数组{["政权5"]}{["政权4"]}{1x2 string} {1x4 string}
ClassRecurrence =1x4逻辑阵列0 0 0 1
ClassPeriod =1×41 1 1 1
ClassStates {:}
ans =“政权5”
ans =“政权4”
ans =1 x2字符串“体制1”“体制7”
ans =1 x4字符串"体制2" "体制3" "体制6" "体制8"
分类
为每个状态分配bin号以标识类成员。编程结果与可视化结果一致。
为了描述链的渐近行为,通过形成子链来隔离循环类。创建子链:
识别马尔可夫链中的循环类。
确定循环类的bin号。
将马尔可夫链对象和bin号传递给
子链
.
recurrentClass = find(classrecursive,1);recurrentState = find((bins == recurrentClass),1);sc = subchain(mc,recurrentState);
sc
是一个dtmc
中的循环类的模型对象mc
.
绘制子链的有向图。使用边缘颜色表示转换概率。为瞬态和循环状态以及通信类指定节点标记和颜色。
图;graphplot (sc,“ColorEdges”,真的,“ColorNodes”,真正的);
正如预期的那样,子链有一个由四个循环状态组成的类。