对于离散时间马尔可夫链问题,我有以下内容:
1)转换矩阵:
0.6 0.4 0.0 0.0
0.0 0.4 0.6 0.0
0.0 0.0 0.8 0.2
1.0 0.0 0.0 0.0
2)初始概率向量:
1.0 0.0 0.0 0.0
所以,我写了下面的SciLab代码来获取静止向量:
P = [0.6, 0.4, 0, 0; 0, 0.4, 0.6, 0; 0, 0, 0.8, 0.2; 1,0,0,0]
PI = [1,0,0,0]
R=PI*P
count=0;
for i = 1 : 35 // stationary vector is obtained at iteration 33, but i went futher to be sure
R=R*P;
count=count+1
disp("count = "+string(count))
end
PI // shows initial probability vector
P // shows transition matrix
R // shows the resulting stationary vector
在迭代次数33
之后,获得以下得到的静止向量:
0.2459016 0.1639344 0.4918033 0.0983607
我必须执行哪些手动计算才能到达上面的静止向量而不必将转换矩阵乘以33次然后将结果乘以初始向量?
有人告诉我,这些计算非常简单,但即使看完了一些书,我也无法意识到该做什么。
当然,欢迎解释,但最重要的是我希望得到这个具体案例的确切答案。
感谢您的帮助!
的La-罗克
答案 0 :(得分:0)
您可以使用以下短代码解决Octave上的DTMC:
P = [
0.6, 0.4, 0, 0;
0, 0.4, 0.6, 0;
0, 0, 0.8, 0.2;
1, 0, 0, 0
]
pis = [P' - eye(size(P)); ones(1, length(P))] \ [zeros(length(P), 1); 1]
或使用此代码的SAGE:
P = matrix(RR, 4, [
[0.6, 0.4, 0, 0],
[ 0, 0.4, 0.6, 0],
[ 0, 0, 0.8, 0.2],
[ 1, 0, 0, 0]
])
I = matrix(4, 4, 1); # I; I.parent()
s0, s1, s2, s3 = var('s0, s1, s2, s3')
eqs = vector((s0, s1, s2, s3)) * (P-I); eqs[0]; eqs[1]; eqs[2]; eqs[3]
pis = solve([
eqs[0] == 0,
eqs[1] == 0,
eqs[2] == 0,
eqs[3] == 0,
s0+s1+s2+s3==1], s0, s1, s2, s3)
在两者上,稳态概率向量的结果是:
pis =
0.245902
0.163934
0.491803
0.098361
我希望它有所帮助。
WBR, 阿尔伯特。