6.1 特征值

1 马尔科夫链

  矩阵的特征值,在马尔科夫链中应用非常广泛。什么是马尔科夫链呢?马尔科夫链是一个概率矩阵。所谓的概率矩阵是有N个概率向量组成的。举个例子,假如有一个移民模型,这个模型里,由北京移民到上海的概率为0.3,上海移民到北京的概率为0.4。
  那么设初始北京有1000万人,上海有1200万人。
  第一次移民后北京的人口为留在北京的 1000 × 0.7 1000\times0.7 1000×0.7 +上海移民过来的 1200 × 0.4 1200 \times 0.4 1200×0.4
  第一次移民后上海的人口为留在上海的 1200 × 0.6 1200\times0.6 1200×0.6 +北京移民过来的 1000 × 0.3 1000\times0.3 1000×0.3
  这其实就是矩阵乘以向量嘛。
( 0.7 0.4 0.3 0.6 ) × ( 1000 1200 ) \begin{pmatrix} 0.7 &0.4 \\ 0.3 &0.6 \end{pmatrix}\times\begin{pmatrix}1000\\1200\end{pmatrix} (0.70.30.40.6)×(10001200)
  那么概率矩阵为:
( 0.7 0.4 0.3 0.6 ) \begin{pmatrix} 0.7 &0.4 \\ 0.3 &0.6 \end{pmatrix} (0.70.30.40.6)
  因为概率的总和是1,所以概率矩阵的每个概率向量,向量里的数字加起来和为1。初始向量为:
( 1000 1200 ) \begin{pmatrix}1000\\1200\end{pmatrix} (10001200)
  我们可以用python代码试验这个过程。

from com.youngthing.mathalgorithm.matrix import Matrix

if __name__ == '__main__':
    probability = Matrix([[0.7, 0.4], [0.3, 0.6]])
    vector = Matrix([[1000], [1200]])
    for i in range(1, 100):
        vector = probability * vector
        print(i, "vector=", vector.lines[0][0], vector.lines[1][0])
    print("vector=", vector)

  在第i=29时,这个向量不再变化,也就是说北京和上海的人口不再变化。python运行结果如下:

29 vector= 1257.1428571428564 942.8571428571427
30 vector= 1257.1428571428564 942.8571428571424
31 vector= 1257.1428571428564 942.8571428571424

  这个向量叫做马可夫链的稳态向量。
  那么稳态向量怎么求呢?如果用上面的循环代码求,那也太蠢了。
  稳态向量的求法是用公式:
A p = p A p − p = 0 ( A − I ) p = 0 Ap=p\\ Ap-p=0\\ (A-I)p=0 Ap=pApp=0(AI)p=0
  所以解 ( A − I ) p = 0 (A-I)p=0 (AI)p=0这个方程就可以了
  但是因为稳态向量有多个,所以最好取一个总和为1的向量。所以python代码如下:

def steady_state_vector(self):
    # 首先构造矩阵A-I
    size = len(self.__lines)
    unit_matrix = Matrix(self.unit_matrix(size))
    # A - I = 0
    final_matrix = (self - unit_matrix).append(Matrix([[0] for _ in self.__lines]))
    # 最后概率总和=1
    # 不要第一行
    final_matrix.__lines[0] = [1 for _ in final_matrix.lines[0]]
    print(final_matrix)
    return final_matrix.gaussian_reduction()

  这里新加了矩阵的减法:

def __sub__(self, other):
    return Matrix([[e - other.__lines[y][x] for x, e in enumerate(line)] for y, line in enumerate(self.__lines)])

2 特征值与特征向量

  特征值与特征向量和马尔科夫链的稳态向量概念相似。特征值是这样定义的:
  对于矩阵A和一个非零向量v,如果有:
A v = λ v Av=\lambda v Av=λv
  那么 λ \lambda λ就是A的特征值,v就是A的特征向量。和马尔科夫链的稳态向量对比一下:
A p = p Ap=p Ap=p
  可见马尔可夫链的稳态向量就是特征值 λ = 1 \lambda=1 λ=1的特殊场景而已。特征向量有无穷多个,但是特征值的个数是有限的。从特征值的几何意义就是,矩阵不过是把某些向量给延长(或缩短)了而已。

3 行列式法求特征值

  求特征值的通用方法,就是大学课本教给我们的方法。
A v − λ v = 0 ( A − λ I ) v = 0 d e t ( A − λ I ) = 0 Av-\lambda v=0\\ (A-\lambda I)v=0\\ det(A-\lambda I)=0 Avλv=0(AλI)v=0det(AλI)=0
  为什么要取行列式为0呢?因为行列式不为0,只有0解,0向量是不能作为特征向量的。
  但是为了避免首项的系数是负数,要把 d e t ( A − λ I ) = 0 det(A-\lambda I)=0 det(AλI)=0换成 d e t ( λ I − A ) = 0 det(\lambda I-A)=0 det(λIA)=0
  对 d e t ( λ I − A ) = 0 det(\lambda I-A)=0 det(λIA)=0的计算,会得到一个多项式方程,这个多项式方程就叫做特征方程。举个例子:
A = ( 2 1 − 1 1 2 − 1 − 1 − 1 2 ) λ I − A = ( λ − 2 1 − 1 1 λ − 2 − 1 − 1 − 1 λ − 2 ) d e t ( λ I − A ) = λ 3 − 6 λ 2 + 9 λ − 4 = ( λ − 1 ) 2 ( λ − 4 ) = 0 λ 1 = λ 2 = 1 , λ 3 = 4 A=\begin{pmatrix} 2& 1& -1\\ 1& 2& -1\\ -1& -1& 2 \end{pmatrix}\\ \lambda I-A=\begin{pmatrix} \lambda-2& 1& -1\\ 1& \lambda-2& -1\\ -1& -1& \lambda-2 \end{pmatrix}\\ det(\lambda I-A)=\lambda^3 - 6\lambda^2 + 9\lambda - 4\\ =(\lambda-1)^2(\lambda-4)=0\\ \lambda_1=\lambda_2=1,\lambda_3=4 A= 211121112 λIA= λ2111λ2111λ2 det(λIA)=λ36λ2+9λ4=(λ1)2(λ4)=0λ1=λ2=1,λ3=4
  在上面的例子中 λ 3 − 6 λ 2 + 9 λ − 4 = 0 \lambda^3 - 6\lambda^2 + 9\lambda - 4=0 λ36λ2+9λ4=0就是矩阵的特征方程。
  那对于复杂的矩阵,特征方程怎么求呢?接下来,我会介绍一种机械的方法,也就是用矩阵的迹来求特征多项式,就是我的下一篇文章:5.2 用迹求特征多项式

单位特性向量

  因为每个特征值对应的特征向量可以有多个,为了标准化,把长度为1的特征向量定为标准特征向量,也叫单位特征向量normalized eigenvector。具体的计算比较简单,就是将向量的各个坐标都除于向量的长度,就完成了单位化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒过来摸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值