特征值
特征值的分解
方阵 A 的特征值和特征向量分别为满足以下条件的标量 λ 和非零向量 υ
Aυ = λυ。
对于对角矩阵的对角线上的特征值 Λ 以及构成矩阵列的对应特征向量 V,公式为
AV = VΛ。
如果 V 是非奇异的,这将变为特征值分解。
A = VΛV–1。
微分方程 dx/dt = Ax 的系数矩阵就是一个很好的示例:
A = 0 -6 -1 6 2 -16 -5 20 -10
此方程的解用矩阵指数 x(t) = etAx(0) 表示。语句
lambda = eig(A)
生成包含 A
的特征值的列向量。对于该矩阵,这些特征值为复数:
lambda = -3.0710 -2.4645+17.6008i -2.4645-17.6008i
每个特征值的实部都为负数,因此随着 t 的增加,eλt 将会接近零。两个特征值 ±ω 的非零虚部为微分方程的解提供了振动分量 sin(ωt)。
使用这两个输出参量,eig
便可以计算特征向量并将特征值存储在对角矩阵中:
[V,D] = eig(A)
V = -0.8326 0.2003 - 0.1394i 0.2003 + 0.1394i -0.3553 -0.2110 - 0.6447i -0.2110 + 0.6447i -0.4248 -0.6930 -0.6930 D = -3.0710 0 0 0 -2.4645+17.6008i 0 0 0 -2.4645-17.6008i
第一个特征向量为实数,另外两个向量互为共轭复数。所有三个向量都归一化为具有等于 1 的欧几里德长度 norm(v,2)
。
矩阵 V*D*inv(V)
(可更简洁地写为 V*D/V
)位于 A
的舍入误差界限内。inv(V)*A*V
或 V\A*V
都在 D
的舍入误差界限内。
多重特征值
某些矩阵没有特征向量分解。这些矩阵是不可对角化的。例如:
A = [ 1 -2 1 0 1 4 0 0 3 ]
对于此矩阵
[V,D] = eig(A)
生成
V = 1.0000 1.0000 -0.5571 0 0.0000 0.7428 0 0 0.3714 D = 1 0 0 0 1 0 0 0 3
λ =1 时有一个双精度特征值。V
的第一列和第二列相同。对于此矩阵,并不存在一组完整的线性无关特征向量。
舒尔分解
许多高级矩阵计算不需要进行特征值分解。而是使用舒尔分解。
A = USU ′ ,
其中,U 是正交矩阵,S 是对角线上为 1×1 和 2×2 块的块上三角矩阵。特征值是通过 S 的对角元素和块显示的,而 U 的列提供了正交基,它的数值属性要远远优于一组特征向量。
例如,比较下面的亏损矩阵的特征值和舒尔分解:
A = [ 6 12 19 -9 -20 -33 4 9 15 ]; [V,D] = eig(A)
V = -0.4741 + 0.0000i -0.4082 - 0.0000i -0.4082 + 0.0000i 0.8127 + 0.0000i 0.8165 + 0.0000i 0.8165 + 0.0000i -0.3386 + 0.0000i -0.4082 + 0.0000i -0.4082 - 0.0000i D = -1.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 1.0000 - 0.0000i
[U,S] = schur(A)
U = -0.4741 0.6648 0.5774 0.8127 0.0782 0.5774 -0.3386 -0.7430 0.5774 S = -1.0000 20.7846 -44.6948 0 1.0000 -0.6096 0 0.0000 1.0000
矩阵 A
为亏损矩阵,因为它不具备一组完整的线性无关特征向量(V
的第二列和第三列相同)。由于 V
的列并非全部是线性无关的,因此它有一个很大的条件数,大约为 1e8
。但 schur
可以计算 U
中的三个不同基向量。由于 U
是正交矩阵,因此 cond(U) = 1
。
矩阵 S
的实数特征值作为对角线上的第一个条目,并通过右下方的 2×2 块表示重复的特征值。2×2 块的特征值也是 A
的特征值:
eig(S(2:3,2:3))
ans = 1.0000 + 0.0000i 1.0000 - 0.0000i