线性代数

特征值和特征向量

什么是特征值和特征向量

行列式本质上是方阵的一个属性, 而特征值和特征向量也是方阵的一个属性. 其中的**“特征"描述的就是方阵的"特征”**, 更加准确的说对于一个矩阵既可以理解成变换又可以理解成空间,所谓的理解成空间是因为一个矩阵可以表示空间的基.

而特征值和特征向量更主要的是从变换的视角看方阵,当我们把方阵理解成一个变换,这个变换拥有一些特征. 这些特征将被特征值和特征向量表示出来.

具体看一个例子:

A=(4211)(4211)(14)=(45)A=\begin{pmatrix} 4 & -2\\ 1 & 1 \end{pmatrix}\\ \begin{pmatrix} 4 & -2\\ 1 & 1 \end{pmatrix}\begin{pmatrix} 1\\ 4 \end{pmatrix}=\begin{pmatrix} -4\\ 5 \end{pmatrix}

这个矩阵A可以理解为表示二维空间的一组基(4,1)T,(2,1)T(4,1)^T,(-2,1)^T, 也可理解为这个基对应坐标系的坐标转换矩阵,可以将二维平面的一个点转换到另外一个位置,比如上面将(1,4)转换到(-4,5).

这个变换过程中我们比较关心一些特殊的向量:

(4211)(22)=(44)\begin{pmatrix} 4 & -2\\ 1 & 1 \end{pmatrix}\begin{pmatrix} 2\\ 2 \end{pmatrix}=\begin{pmatrix} 4\\ 4 \end{pmatrix} \\

(4211)(21)=(63)\begin{pmatrix} 4 & -2\\ 1 & 1 \end{pmatrix}\begin{pmatrix} 2\\ 1 \end{pmatrix}=\begin{pmatrix} 6\\ 3 \end{pmatrix}

这些向量通过矩阵A转换后,方向没有改变,结果是原来的常数倍.

用数学式子表达:

Au=λuA\vec{u}=\lambda\vec{u}

其中λ\lambda 称为A的特征值(eigenvalue) ,u\vec{u} 称为A对应于λ\lambda 的特征向量eigenvector .

具体有什么用? 后续可见

如何求解特征值和特征向量?观察上面式子,可知零向量肯定满足,是平凡解.

所以特征向量不考虑零向量. 但λ=0\lambda=0 并不平凡,Au=0A\vec{u}=0 ,此时是一个齐次方程组是有非零解的. A可逆就只有零解,此时希望u\vec{u} 有非零解,这个A不可逆,所以如果λ=0\lambda=0 是矩阵A的一个特征值,就说明A不可逆,反映了A的特征,并不是任意一个矩阵其特征值都可以为0. 所以特征值可以为0.

(AλI)u=0希望该方程有非零解,因此有det(AλI)=0特征方程(A-\lambda I)\vec{u}=0\\ 希望该方程有非零解,因此有\\ det(A-\lambda I)=0 \quad 特征方程

因此转换为了一个行列式的问题,行列式是求特征值和特征向量的基础. 这个方程也称为特征方程.

AλI=4λ211λ=λ25λ+6=(λ2)(λ3)=0λ1=2,λ2=3λ1=2,(A2I)u=0u=(11)Tsλ2=3,(A3I)u=0u=(21)Ts|A-\lambda I|= \left| \begin{array}{ccc} 4-\lambda &-2 \\ 1&1-\lambda \\ \end{array} \right|\\=\lambda^2-5\lambda+6\\=(\lambda-2)(\lambda-3)=0\\ \lambda_1=2,\lambda_2=3\\ \lambda_1=2,(A-2I)\vec{u}=0\\ \downarrow\\ \vec{u}=(1\quad 1)^Ts \\ \lambda_2=3,(A-3I)\vec{u}=0\\ \downarrow\\ \vec{u}=(2\quad 1)^Ts

至此矩阵A的特征值以及对应的特征向量求出来了.

对应一个λ\lambda 特征值的特征向量不止一个,而是一组,即无数个. 如果u是A对应λ\lambda 的一个特征向量,则ku也是一个特征向量. k0k\ne0

特征向量组成了AλIA-\lambda I 零空间,刨除零向量.

Eλ={O}{λ的特征向量}E_\lambda =\{O\}\cup\{\lambda 的特征向量\}

EλE_\lambda 称为λ\lambda 对应的特征空间.

特征值和特征向量的性质

通过上面的讲解可知,对于方阵A:

image-20251221105121428

多了新的一条等价命题,如果A可逆,则0不是A的特征值.

性质1:对角矩阵(上三角、下三角)的特征值是其对角线上的元素.(证明略)

性质2:若λ\lambda 是A的特征值,则λm\lambda ^mAmA^m 的特征值. (取-1也成立 )

数学归纳法:m=1成立,Au=λu假设m=k成立,Aku=λkum=k+1,Ak+1u=A.Aku=λkAu=λkλu=λk+1u数学归纳法:m=1成立,A\vec{u}=\lambda\vec{u}\\ 假设m=k成立,A^k\vec{u}=\lambda^k\vec{u}\\ 当m=k+1时,A^{k+1}\vec{u}=A.A^k\vec{u}\\=\lambda^kA\vec{u}\\ =\lambda^k\lambda\vec{u}\\=\lambda^{k+1}\vec{u}

推论:若λ\lambda 是A的特征值,则λ1\lambda ^{-1}A1A^{-1} 的特征值.

已知Au=λuA1Au=A1λuu=A1λuA1u=λ1u已知A\vec{u}=\lambda\vec{u}\\ A^{-1}A\vec{u}=A^{-1}\lambda\vec{u}\\ \vec{u}=A^{-1}\lambda\vec{u}\\ A^{-1}\vec{u}=\lambda^{-1}\vec{u}

性质3:如果矩阵A含有两个不同的特征值,则他们对应的特征向量线性无关.

Au=λ1uAv=λ2v反证法:假设线性相关u=kv,k0Au=A(kv)=k(Av)λ1u=kλ2vλ1kv=kλ2vk(λ2λ1)v=0λ2=λ1,矛盾A\vec{u}=\lambda_1\vec{u} \quad A\vec{v}=\lambda_2\vec{v}\\ 反证法:假设线性相关\\ \vec{u}=k\vec{v},k\ne0 \\ A\vec{u}=A(k\vec{v})=k(A\vec{v})\\ \lambda_1\vec{u}=k\lambda_2\vec{v}\\ \lambda_1k\vec{v}=k\lambda_2\vec{v}\\ k(\lambda_2-\lambda_1)\vec{v}=0\\ \lambda_2=\lambda_1,矛盾

代码求解特征值和特征向量示例:

1
2
3
4
5
6
7
8
9
10
11
import numpy as np
from numpy.linalg import eig


if __name__ == "__main__":

A1 = np.array([[4,-2],[1,1]])

eigenvalues, eigenvectors = eig(A1)
print(eigenvalues)
print(eigenvectors)

image-20251221114713852

这个结果与上面例子求解的结果对应.

矩阵相似型

如果矩阵A, B满足A=P1BPA=P^{-1}BP ,则称A和B相似.

类比相似三角形. 矩阵相似本质上是从不同视角观察相同的内容.

如果P是一个坐标系,则A变换是在P坐标系下观察的B变换。

A[x]p=P1BP[x]pA[\vec{x}]_p=P^{-1}BP[\vec{x}]_p

image-20251221125133825

A和B本质是一个变换,只是观察的坐标系不同.

如果A和B相似,A和B的特征方程相同,特征值相同.

det(AλI)=det(P1BPλI)=det(P1BPλP1P)=det(P1BPP1λP)=det(P1(BλI)P)=det(P1)det(BλI)det(P)=det(BλI)det(P1P)=det(BλI)det(A-\lambda I)=det(P^{-1}BP-\lambda I)=det(P^{-1}BP-\lambda P^{-1}P)\\= det(P^{-1}BP- P^{-1}\lambda P)\\ =det(P^{-1}(B-\lambda I) P)\\ =det(P^{-1})det(B-\lambda I)det(P)\\ =det(B-\lambda I)det(P^{-1}P)\\ =det(B-\lambda I)

这就是特征值和特征向量真正表征的”特征“,当我们把矩阵看作一个变换,这个变换不管从哪个角度哪个坐标系去看,它们都具有相同的特征. 既然已经知道对于一个变换可以从不同的角度去看,我们肯定希望找到一个最好的角度,用这个最好的角度去看它使得计算变换容易.

矩阵对角化

在P坐标系下观察B看到的是A,那么就可以变换P坐标系相应A就产生了变化,希望找到一个最好的A使得B这个变化非常简单. 这就是矩阵对角化所做的任务.

如果A有n个线性无关的特征向量,则A和某个D相似.

A=PDP1A=PDP^{-1}

D变换是P坐标系下观察到的A.

那么一个A如何分解成PDP1PDP^{-1} 的形式?答案藏在特征值和特征向量中.

一个矩阵A如果可以被对角化的话:

D=(λ10...00λ2...0............00...λn)P=(u1u2...un)D=\begin{pmatrix} \lambda_1&0&...&0 \\ 0&\lambda_2&...&0 \\ ...&...&...&... \\ 0&0&...&\lambda_n \\ \end{pmatrix} \quad P=(\vec{u_1} \quad \vec{u_2}\quad ...\quad \vec{u_n})

D主对角线上的元素是矩阵A的特征值,P是对应的特征向量组成的特征向量矩阵.

如果A有n个不相同的特征值,则A可以被对角化.

如果A没有n个不相同的特征值,A不一定不能被对角化.

对角化代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
from numpy.linalg import eig, inv
from LA.LinearSystem import rank
from LA.Matrix import Matrix


def diagonalzie(A):
assert A.ndim ==2
assert A.shape[0] == A.shape[1]

eigvalues, eigvectors = eig(A)

P = eigvectors
if rank(Matrix(P.tolist())) != A.shape[0]:
print("Matrix can not be diagonalized")
return None, None, None

D = np.diag(eigvalues)
Pinv = inv(P)

return P, D, Pinv

if __name__ == "__main__":

A1 = np.array([[4,-2],
[1,1]])
P1, D1, Pinv1 = diagonalzie(A1)
print(P1)
print(D1)
print(Pinv1)
print(P1.dot(D1).dot(Pinv1))

image-20251221133448771

对角化应用

求解矩阵的幂:

A2=PDP1PDP1=PD2P1A3=PDP1PDP1PDP1=PD3P1An=PDnP1D=(λ10...00λ2...0............00...λn)D2=(λ120...00λ22...0............00...λn2)Dn=(λ1n0...00λ2n...0............00...λnn)A^2=PDP^{-1}PDP^{-1}=PD^2P^{-1}\\ A^3=PDP^{-1}PDP^{-1}PDP^{-1}=PD^3P^{-1}\\ A^n=PD^nP^{-1}\\ D=\begin{pmatrix} \lambda_1&0&...&0 \\ 0&\lambda_2&...&0 \\ ...&...&...&... \\ 0&0&...&\lambda_n \\ \end{pmatrix} \quad D^2=\begin{pmatrix} \lambda_1^2&0&...&0 \\ 0&\lambda_2^2&...&0 \\ ...&...&...&... \\ 0&0&...&\lambda_n^2 \\ \end{pmatrix} \quad D^n=\begin{pmatrix} \lambda_1^n&0&...&0 \\ 0&\lambda_2^n&...&0 \\ ...&...&...&... \\ 0&0&...&\lambda_n^n \\ \end{pmatrix}

这样计算矩阵的幂只用到了两次矩阵乘法.

为什么关心矩阵的幂?

大量问题的形式都跟矩阵的幂有关:

uk=Aku0\vec{u}_k=A^k\vec{u}_0