4

次のマルコフ行列があるとします。

import numpy, scipy.linalg
A = numpy.array([[0.9, 0.1],[0.15, 0.85]])

定常確率が存在し、 に等しくなり[.6, .4]ます。これは、行列の大きな累乗を取ることで簡単に確認できます。

B = A.copy()
for _ in xrange(10): B = numpy.dot(B,B)

ここB[0] = [0.6, 0.4]に。ここまでは順調ですね。ウィキペディアによると:

定常確率ベクトルは、遷移行列の適用下で変化しないベクトルとして定義されます。つまり、固有値 1 に関連付けられた確率行列の左固有ベクトルとして定義されます。

したがって、固有値が 1 の の左固有ベクトルを計算できるはずAです。これにより、定常確率も得られるはずです。Scipy の実装にeigは left キーワードがあります。

scipy.linalg.eig(A,left=True,right=False)

与えます:

(array([ 1.00+0.j,  0.75+0.j]), array([[ 0.83205029, -0.70710678],
   [ 0.5547002 ,  0.70710678]]))

つまり、支配的な左固有ベクトルは次のとおり[0.83205029, 0.5547002]です。私はこれを間違って読んでいますか?[0.6, 0.4]固有値分解を使用してを取得するにはどうすればよいですか?

4

2 に答える 2

8

に~1.39 を掛ける[0.83205029, 0.5547002]だけです。[0.6, 0.4]

「物理的」観点からは、成分の合計が 1 に等しい固有ベクトルが必要ですが、固有ベクトルを何らかの係数でスケーリングしても、その「固有性」は変わりません

なら\vec{v} A = \lambda \vec{v}、明らかに(\alpha \vec{v}) A = \lambda (\alpha \vec{v})

したがって、取得[0.6, 0.4]するには次のことを行う必要があります。

>>> v = scipy.linalg.eig(A,left=True,right=False)[1][:,0]
>>> v
array([ 0.83205029,  0.5547002 ])
>>> v / sum(v)
array([ 0.6,  0.4])
于 2012-05-08T20:18:20.883 に答える