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

[0.83205029, 0.5547002]只是[0.6, 0.4]乘以〜1.39 。

尽管从“物理”的角度来看,您需要其分量之和等于 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 回答
0

就特征向量而言,该eig函数返回单位向量。

所以,如果我们取 v = [0.6, 0.4],它的长度是: l = np.sqrt(np.square(a).sum())l = np.linalg.norm(v),所以归一化向量(从 中返回scipy.linalg.eig)是:

>>> v = np.array([.6, .4])
>>> l = np.sqrt(np.square(a).sum())
>>> v / l
array([0.83205029, 0.5547002 ])

因此,如果您需要向量是马尔可夫链中的随机向量概率向量,只需对其进行缩放,使其总和为 1.0

于 2018-11-03T21:24:57.570 回答