【发布时间】:2012-05-08 18:16:24
【问题描述】:
给定以下马尔可夫矩阵:
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 的 left 特征向量,这也应该给我平稳概率。 Scipy's implementation of 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]?
【问题讨论】:
标签: python scipy markov-chains