矩阵的特征值,在马尔科夫链中应用非常广泛。什么是马尔科夫链呢?马尔科夫链是一个概率矩阵。所谓的概率矩阵是有N个概率向量组成的。举个例子,假如有一个移民模型
目的地 | 北京 | 上海 |
---|---|---|
北京 | 0.4 | |
上海 | 0.3 |
这个矩阵代表由北京移民到上海的概率为0.3,有上海移民到北京的概率为0.4。
那么设初始北京有1000万人,上海有1200万人。
第一次移民后北京的人口为留在北京的 1000 × 0.7 1000\times0.7 1000×0.7 +上海移民过来的$ 1000 \times0.4$
第一次移民后上海的人口为留在上海的 1000 × 0.3 1000\times0.3 1000×0.3 +北京移民过来的 1200 × 0.6 1200\times0.6 1200×0.6
这其实就是矩阵乘以向量嘛。
( 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=pAp−p=0(A−I)p=0
所以解 ( A − I ) p = 0 (A-I)p=0 (A−I)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)])
特征值与特征向量和马尔科夫链的稳态向量概念相似。特征值是这样定义的:
对于矩阵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的特殊场景而已。特征向量有无穷多个,但是特征值的个数是有限的。从特征值的几何意义就是,矩阵不过是把某些向量给延长(或缩短)了而已。
求特征值的通用方法,就是大学课本教给我们的方法。
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
但是为了避免首项的系数是负数,要把 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(λI−A)=0。
对 d e t ( λ I − A ) = 0 det(\lambda I-A)=0 det(λI−A)=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=⎝⎛21−112−1−1−12⎠⎞λI−A=⎝⎛λ−21−11λ−2−1−1−1λ−2⎠⎞det(λI−A)=λ3−6λ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 λ3−6λ2+9λ−4=0就是矩阵的特征方程。
前面说过矩阵不过是把自己的特征向量给延长或缩短了,为了求特征值和特征向量,我们有以下的方程:
( A − λ I ) v = 0 (A-\lambda I)v=0 (A−λI)v=0
把某个特征值代进去,得到的 A − λ I A-\lambda I A−λI是一个矩阵,这个矩阵会把对应的特征向量变成0向量。这群向量构成了一个空间,这个空间就叫做特征空间。
可以举个例子:
A = ( 2.0 1.0 − 1.0 1.0 2.0 − 1.0 − 1.0 − 1.0 2.0 ) A − λ I = ( 1.0 1.0 − 1.0 1.0 1.0 − 1.0 − 1.0 − 1.0 1.0 ) A=\begin{pmatrix} 2.0 & 1.0 & -1.0\\ 1.0 & 2.0 & -1.0\\ -1.0 & -1.0 & 2.0 \end{pmatrix}\\ A-\lambda I=\begin{pmatrix} 1.0 & 1.0 & -1.0\\ 1.0 & 1.0 & -1.0\\ -1.0 & -1.0 & 1.0 \end{pmatrix}\\ A=⎝⎛2.01.0−1.01.02.0−1.0−1.0−1.02.0⎠⎞A−λI=⎝⎛1.01.0−1.01.01.0−1.0−1.0−1.01.0⎠⎞
然后我们根据定义解下齐次线性方程组就可以了。
( 1.0 1.0 − 1.0 1.0 1.0 − 1.0 − 1.0 − 1.0 1.0 ) ∼ ( 1.0 1.0 − 1.0 0.0 0.0 0.0 0.0 0.0 0.0 ) ∴ v = k 1 ( 1 0 1 ) + k 2 ( 0 1 1 ) \begin{pmatrix} 1.0 & 1.0 & -1.0\\ 1.0 & 1.0 & -1.0\\ -1.0 & -1.0 & 1.0 \end{pmatrix} \sim \begin{pmatrix} 1.0 & 1.0 & -1.0\\ 0.0 & 0.0 & 0.0\\ 0.0 & 0.0 & 0.0 \end{pmatrix}\\ \therefore v=k_1\begin{pmatrix}1\\0\\1\end{pmatrix}+k_2\begin{pmatrix}0\\1\\1\end{pmatrix} ⎝⎛1.01.0−1.01.01.0−1.0−1.0−1.01.0⎠⎞∼⎝⎛1.00.00.01.00.00.0−1.00.00.0⎠⎞∴v=k1⎝⎛101⎠⎞+k2⎝⎛011⎠⎞
所以这个特征空间的两个基就求出来了。我们再试一下下一个特征值4:
A = ( 2.0 1.0 − 1.0 1.0 2.0 − 1.0 − 1.0 − 1.0 2.0 ) A − λ I = ( − 2.0 1.0 − 1.0 1.0 − 2.0 − 1.0 − 1.0 − 1.0 − 2.0 ) A=\begin{pmatrix} 2.0 & 1.0 & -1.0\\ 1.0 & 2.0 & -1.0\\ -1.0 & -1.0 & 2.0 \end{pmatrix}\\ A-\lambda I=\begin{pmatrix} -2.0 & 1.0 & -1.0\\ 1.0 & -2.0 & -1.0\\ -1.0 & -1.0 & -2.0 \end{pmatrix}\\ A=⎝⎛2.01.0−1.01.02.0−1.0−1.0−1.02.0⎠⎞A−λI=⎝⎛−2.01.0−1.01.0−2.0−1.0−1.0−1.0−2.0⎠⎞
同样,解一下这个齐次方程组:
( − 2.0 1.0 − 1.0 1.0 − 2.0 − 1.0 − 1.0 − 1.0 − 2.0 ) ∼ ( − 2.0 1.0 − 1.0 0.0 1.0 1.0 0.0 0.0 0.0 ) ∴ v = k ( 0 1 1 ) \begin{pmatrix} -2.0 & 1.0 & -1.0\\ 1.0 & -2.0 & -1.0\\ -1.0 & -1.0 & -2.0 \end{pmatrix} \sim \begin{pmatrix} -2.0 & 1.0 & -1.0\\ 0.0 & 1.0 & 1.0\\ 0.0 & 0.0 & 0.0 \end{pmatrix}\\ \therefore v=k\begin{pmatrix}0\\1\\1\end{pmatrix} ⎝⎛−2.01.0−1.01.0−2.0−1.0−1.0−1.0−2.0⎠⎞∼⎝⎛−2.00.00.01.01.00.0−1.01.00.0⎠⎞∴v=k⎝⎛011⎠⎞
这样两个特征值的特征空间就求出来了。
有了特征向量和特征向量构成的特征空间,我们知道 A − λ I A-\lambda I A−λI可以把特征空间里的向量变成0。我们再想想, ( A − λ I ) 2 (A-\lambda I)^2 (A−λI)2能不能把某个向量变成0呢?三次方呢?四次方呢?有了方向,数学家们就开始思考了,于是有了广义特征向量的定义:
( A − λ I ) j v = 0 (A-\lambda I)^jv=0 (A−λI)jv=0
公式中v被成为广义特征向量generalized eigenvector,对于某个固定的v,上述公式中的 j j j的最小值是广义特征向量的下标index。毫无疑问,特征向量本身是一个j=1的广义特征向量。我们举个例子:
A = ( 2 1 1 − 2 − 1 − 2 1 1 2 ) λ = 1 A= \begin{pmatrix} 2 & 1 & 1\\ -2 & -1 & -2\\ 1 & 1 & 2 \end{pmatrix}\\ \lambda=1 A=⎝⎛2−211−111−22⎠⎞λ=1
以 λ 1 = 2 \lambda_1=2 λ1=2为例子,求它的特征方程:
A − I = ( 1 1 1 − 2 − 2 − 2 1 1 1 ) ∼ ( 1 1 1 0 0 0 0 0 0 ) v = k 1 ( − 1 1 0 ) + k 2 ( − 1 0 1 ) ( A − I ) 2 = ( 0 0 0 0 0 0 0 0 0 ) v = k 1 ( 1 0 0 ) + k 2 ( 0 1 0 ) + k 3 ( 0 0 1 ) A-I= \begin{pmatrix} 1 & 1 & 1\\ -2 & -2 & -2\\ 1 & 1 & 1 \end{pmatrix} \sim \begin{pmatrix} 1 & 1 & 1\\ 0 & 0 & 0\\ 0 & 0 & 0 \end{pmatrix}\\ v=k_1\begin{pmatrix}-1\\1\\0\end{pmatrix}+k_2\begin{pmatrix}-1\\0\\1\end{pmatrix}\\ (A-I)^2= \begin{pmatrix} 0 & 0 & 0\\ 0 & 0 & 0\\ 0 & 0 & 0 \end{pmatrix}\\ v=k_1\begin{pmatrix}1\\0\\0\end{pmatrix}+k_2\begin{pmatrix}0\\1\\0\end{pmatrix}+k_3\begin{pmatrix}0\\0\\1\end{pmatrix}\\ A−I=⎝⎛1−211−211−21⎠⎞∼⎝⎛100100100⎠⎞v=k1⎝⎛−110⎠⎞+k2⎝⎛−101⎠⎞(A−I)2=⎝⎛000000000⎠⎞v=k1⎝⎛100⎠⎞+k2⎝⎛010⎠⎞+k3⎝⎛001⎠⎞
所以j到2时,再乘什么都是0矩阵了,广义特征向量就是任意向量,再乘方就没意义了。
对于上述的规律,我们总在j增大到一定程度后,广义特征向量所在的空间是不会增大的。所以对某个特定的特征值定义了以下空间:
E j ( λ ) = { v ∣ ( A − λ I ) j v = 0 } E_j(\lambda)=\{v|(A-\lambda I)^jv=0\} Ej(λ)={v∣(A−λI)jv=0}
当 j j j无穷大时定义的空间 E ∞ ( λ ) E_\infty(\lambda) E∞(λ),被称为广义特征空间generalized eigenspace。但是也不要看到无穷就悲观,因为前面我们说了当j到一定程度时, E j ( λ ) E_j(\lambda) Ej(λ)空间不再扩大,这个时候就等于广义特征空间,这时候的 j j j被称为广义特征向量最大下标maximum index of
a generalized eigenvector of A associated to λ,数学符号为 m a x − i n d ( λ ) max-ind(\lambda) max−ind(λ)。实际上 m a x − i n d ( λ ) max-ind(\lambda) max−ind(λ)等于该特征值最大约当块的行数。所以利用这个特性,可以快速确定矩阵的约当标准型。如下面的矩阵:
( 2 1 − 1 1 2 − 1 − 1 − 1 2 ) λ 1 = λ 2 = 1 , λ 3 = 4 \begin{pmatrix} 2 & 1 & -1\\ 1 & 2 & -1\\ -1 & -1 & 2 \end{pmatrix}\\ \lambda_1=\lambda_2=1,\lambda_3=4 ⎝⎛21−112−1−1−12⎠⎞λ1=λ2=1,λ3=4
它的约当标准型有两种可能:
( 1 1 0 0 1 0 0 0 4 ) o r ( 1 0 0 0 1 0 0 0 4 ) \begin{pmatrix} 1 & 1 & 0\\ 0 & 1& 0\\ 0 & 0 & 4 \end{pmatrix}or \begin{pmatrix} 1 & 0 & 0\\ 0 & 1& 0\\ 0 & 0 & 4 \end{pmatrix} ⎝⎛100110004⎠⎞or⎝⎛100010004⎠⎞
那么到底是哪一种?这个时候就需要用特征空间了,求出 m a x − i n d ( 1 ) max-ind(1) max−ind(1)。那只能拿特征方程计算下呗:
A − λ I = ( 1 1 − 1 1 1 − 1 − 1 − 1 1 ) ∼ ( 1 1 − 1 0 0 0 0 0 0 ) ( A − λ I ) 2 = ( 3 3 − 3 3 3 − 3 − 3 − 3 3 ) ∼ ( 1 1 − 1 0 0 0 0 0 0 ) A-\lambda I=\begin{pmatrix} 1 & 1 & -1\\ 1 & 1 & -1\\ -1 & -1 & 1 \end{pmatrix} \sim \begin{pmatrix} 1 & 1 & -1\\ 0 & 0 & 0\\ 0 & 0 & 0\end{pmatrix}\\ (A-\lambda I)^2=\begin{pmatrix} 3 & 3 & -3\\ 3 & 3 & -3\\ -3 & -3 & 3 \end{pmatrix}\sim \begin{pmatrix} 1 & 1 & -1\\ 0 & 0 & 0\\ 0 & 0 & 0 \end{pmatrix}\\ A−λI=⎝⎛11−111−1−1−11⎠⎞∼⎝⎛100100−100⎠⎞(A−λI)2=⎝⎛33−333−3−3−33⎠⎞∼⎝⎛100100−100⎠⎞
特征方程的二次方并没有变成0矩阵,说明 m a x − i n d ( 1 ) = 1 max-ind(1)=1 max−ind(1)=1,所以约当标准型为:
( 1 0 0 0 1 0 0 0 4 ) \begin{pmatrix} 1 & 0 & 0\\ 0 & 1& 0\\ 0 & 0 & 4 \end{pmatrix} ⎝⎛100010004⎠⎞