- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
给定以下马尔可夫矩阵:
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 :
A stationary probability vector is defined as a vector that does not change under application of the transition matrix; that is, it is defined as a left eigenvector of the probability matrix, associated with eigenvalue 1:
所以我应该能够计算 A
的left 特征向量,特征值为 1,这也应该给出平稳概率。 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]
?
最佳答案
[0.83205029, 0.5547002]
只是 [0.6, 0.4]
乘以~1.39。
尽管从“物理”的角度来看,您需要其分量之和等于 1 的特征向量,scaling eigenvector by some factor does not change it's "eigenness" :
如果 , 那么显然
因此,要获得 [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])
关于python - 左特征向量在 scipy 中没有给出正确的(马尔可夫)固定概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10504158/
我在学习道路上遇到了一项任务。 对于均值 μ=np 和方差 σ**2=np(1−p) 的二项式分布 X∼Bp,n,我们希望上限概率 P (X≥c⋅μ) 对于 c≥1。三界介绍: Formulas 任务
给定以下马尔可夫矩阵: import numpy, scipy.linalg A = numpy.array([[0.9, 0.1],[0.15, 0.85]]) 平稳概率存在且等于[.6, .4]。
我是一名优秀的程序员,十分优秀!