0

对于离散时间马尔可夫链问题,我有以下内容:

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 次,然后将结果乘以初始向量?

有人告诉我,计算很简单,但即使阅读了一些书,我也无法意识到该怎么做。

当然,欢迎解释,但最重要的是,我希望得到这个具体案例的确切答案。

4

1 回答 1

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,阿尔伯特。

于 2014-05-25T05:22:57.360 回答