给定以下马尔可夫矩阵:
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]
。到目前为止还不错。根据wikipedia的说法:
静态概率向量被定义为一个向量,在转移矩阵的应用下不会改变;也就是说,它被定义为概率矩阵的左特征向量,与特征值1相关:
所以我应该能够计算具有特征值1的A
的左特征向量,这也应该给我静态概率。 Scipy的实现eig
有一个左关键字:
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]
?
eig
返回归一化的向量。在我的脑海中,我期望得到一个归一化的概率分布(L1范数),而scipy给出了更明显的平方和的平方根(L2范数)。回想起来,我应该注意到两个组件的比率在两种情况下是相同的。谢谢! - Hooked