Part I · 第 1 章 线性代数 · 1.11

特征值与特征向量

矩阵会把大多数向量推离原来的方向,但总有几条特殊的直线:向量落在上面,只会被拉长、压短或翻到另一侧,方向不变。这些方向叫特征向量,伸缩的倍数叫特征值。找到它们,一个纠缠的矩阵就拆成几个互不干扰的一维问题:机器人会不会稳定下来、会不会来回振荡、不确定性椭圆朝向哪里,都能直接读出来。

约 35 分钟 前置:1.3 矩阵即变换 · 1.5 行列式 · 1.6 逆、秩与零空间 6 个交互

    1为什么机器人需要它

    机器人的控制器每隔几毫秒读一次状态误差(位置差多少、速度差多少),再算出下一步的指令。把这个闭环线性化,几乎总能写成

    $$ \mathbf x_{k+1} = A\,\mathbf x_k \quad\Longrightarrow\quad \mathbf x_k = A^k \mathbf x_0 . $$

    误差会逐渐消失,会来回振荡,还是越滚越大?答案不藏在 \(A\) 的某一个元素里,而藏在 \(A\) 的特征值 (eigenvalues) 里。这是特征值在机器人里最重要的用途,但不是唯一的:

    • 稳定性:上面这个问题。所有特征值的模都小于 1,系统就会稳定下来;有一个大于 1,就会发散(见下文第 4 和第 7 部分)。
    • 不确定性椭圆:状态估计给出的协方差矩阵是对称矩阵,它的特征向量就是椭圆的长短轴方向,特征值决定轴有多长(4.4 节)。
    • 旋转轴:任何三维旋转都固定了一条直线,这条轴的方向就是旋转矩阵的特征向量,特征值恰好是 1(见下文第 7 部分)。
    • 振动模态:柔性机械臂的每一种“摇晃方式”是一个特征向量,对应的特征值是固有频率的平方。
    • SVD 与 PCA:1.12 节的奇异值分解,以及点云的主成分分析,都建立在对称矩阵的特征分解之上。

    2直觉:哪些方向不被“推歪”

    1.3 节里,我们把矩阵看成对整个平面的一次动作。向量 \(\mathbf v\) 经过矩阵 \(A\) 变成 \(A\mathbf v\),通常两者指向不同的方向:矩阵把它推离了原来那条过原点的直线。

    不过,常常有几个特殊的方向。向量站在上面时,矩阵只会沿着这条线把它拉长、压短,或翻到另一侧,却不会让它转弯。这样的方向叫特征向量 (eigenvector),伸缩的倍数叫特征值 (eigenvalue)。“eigen” 是德语,意思是“自己的、固有的”:这是矩阵自己的方向。

    特征值的数值直接告诉你沿这条线发生了什么:

    • \(\lambda > 1\):被拉长;\(0 < \lambda < 1\):被压短;\(\lambda = 1\):原地不动。
    • \(\lambda < 0\):翻到原点的另一侧(再按 \(|\lambda|\) 伸缩)。
    • \(\lambda = 0\):整条线被压成原点。这正是 1.6 节的零空间:特征值 0 意味着矩阵不可逆。

    拖动下面左图里的琥珀色向量 \(\mathbf v\)(它只能绕圆走)。灰色虚线是 \(\mathbf v\) 所在的直线,青色箭头是 \(A\mathbf v\)。只要 \(A\mathbf v\) 离开了这条线,\(\mathbf v\) 就不是特征向量。右图画的是“偏了多少”:从 \(\mathbf v\) 转到 \(A\mathbf v\) 的夹角 \(\delta\) 的正弦。曲线碰到 0 的地方,就是 \(A\mathbf v\) 回到这条线上的地方。靠近特征方向时,\(\mathbf v\) 会被轻轻吸住。

    FIG 1谁被推歪了?
    v 与 Av
    sin δ 随 v 的方向变化
    紫色虚线是这个矩阵真正的特征方向。注意三种矩阵的曲线:第一个矩阵的曲线在两条线上回到 0:0°(与 180° 是同一条线)和 135°(两条特征线);旋转的曲线是一条不碰 0 的水平线(没有特征线,每个向量都被转了同样的角);剪切的曲线只在 0°/180° 这一条线上轻轻碰到 0,不穿过(只有一条特征线)。
    • 选“一般矩阵”,拖动 \(\mathbf v\),让 \(A\mathbf v\) 落回 \(\mathbf v\) 所在的直线上。能找到几个这样的位置(别忘了对面还有一个)?
    核心洞见

    特征向量是被矩阵“沿着自己的线”作用的向量:\(A\mathbf v = \lambda\mathbf v\)。在这条线上,矩阵的复杂动作退化成一个数 \(\lambda\)。如果能找到足够多条这样的线,整个矩阵就只是“沿几个方向各自乘一个数”。

    3动手玩:特征方向探测器

    现在换到完整的实验室。先造一个矩阵:拖动红色的 Aî 和绿色的 Aĵ 手柄,或者直接改数字,或者点预设。然后用琥珀色探针 \(\cv{\mathbf v}\) 去找特征方向:读数条显示 \(\mathbf v\) 与 \(A\mathbf v\) 所在两条直线的夹角。夹角小于 4° 时探针会闪一下,并在那条线上留下一个紫色标记。“扫描一圈”会让 \(\mathbf v\) 自己转一整圈。

    圆周上那一圈细线是 72 个单位向量 \(\mathbf u\) 到 \(A\mathbf u\) 的位移(一只“刺猬”)。\(\mathbf u\) 是特征向量时,\(A\mathbf u = \lambda\mathbf u\) 仍在同一条线上,这根刺就是沿半径方向的;其他的刺都斜着扎出去。打开“显示答案”,真正的特征线(紫色虚线)和沿半径的刺会被标出来。

    FIG 2特征方向探测器
    矩阵 A(拖动数字或输入)
    预设
    琥珀色 \(\mathbf v\) 是探针,青色是 \(A\mathbf v\),灰色虚线是 \(\mathbf v\) 所在的直线,青色椭圆是单位圆的像。紫色标记是你已经找到的特征方向,旁边写着特征值。如果矩阵是旋转,扫完一圈你什么也找不到:这就是“没有实特征向量”。
    试一试
    • 选预设“对称”(\(A=\begin{bmatrix}2&1\\1&2\end{bmatrix}\)),只靠探针找到它的两个特征方向。读一下两个特征值和两个方向的夹角。
    • 做一个没有实特征向量的矩阵,用“扫描一圈”确认:探针永远没有对齐。提示:想想 1.3 节的哪个动作会让每个向量都转弯。
    • 找一个有特征值 −1 的矩阵,并用探针把对应的特征方向标出来。这个方向上的向量发生了什么?
    • 选“剪切”,再扫描一圈。为什么只有一个特征方向?(想想剪切把哪些向量推歪、推歪多少。)

    4第二种视角:把矩阵一遍遍用下去

    控制循环每个周期都把同一个规则用一次:\(\mathbf x_{k+1} = A\mathbf x_k\)。我们真正关心的是很多步以后的 \(\mathbf x_k = A^k\mathbf x_0\)。特征向量让这件事变得很简单。把起点拆成特征向量的组合 \(\mathbf x_0 = c_1\mathbf v_1 + c_2\mathbf v_2\),由于每个 \(\mathbf v_i\) 被 \(A\) 作用时只乘自己的 \(\lambda_i\):

    $$ \mathbf x_k = A^k\mathbf x_0 = c_1\,\lambda_1^{\,k}\,\mathbf v_1 + c_2\,\lambda_2^{\,k}\,\mathbf v_2 . $$

    每个分量各自按 \(\lambda_i^k\) 生长或衰减,互不干扰。于是:

    • \(|\lambda|\) 最大的分量最终胜出:所有轨迹都弯向主特征向量(dominant eigenvector),每步伸缩约 \(|\lambda_{\max}|\) 倍。
    • 所有 \(|\lambda_i| < 1\):每个分量都在缩小,轨迹收敛到原点(稳定)。只要有一个 \(|\lambda_i| > 1\),轨迹就会发散。
    • \(\lambda < 0\):这个分量每一步翻到原点另一侧,轨迹“之字形”前进。
    • 复特征值 \(\lambda = re^{\pm i\varphi}\):每一步转 \(\varphi\) 角并伸缩 \(r\) 倍,轨迹是螺旋。\(r<1\) 向内收,\(r>1\) 向外散,\(r=1\) 在椭圆上转圈。

    在下面的画布上点击可以丢下新的种子点(最多 40 个)。拖动步数滑块或按“播放”,看每个种子走出的轨迹。右侧小图把特征值画在复平面上,单位圆是稳定与否的分界线。

    FIG 3反复作用:\(\mathbf x_{k+1}=A\mathbf x_k\)
    复平面中的特征值
    矩阵 A
    预设
    空心圈是起点,实心点是第 \(k\) 步的位置,细线是走过的路。紫色虚线是真实的特征线(有实特征值时)。“归一化”模式每一步都把向量缩回单位长度,只看方向:这就是幂迭代,方向会收敛到主特征向量(正负号可能每步翻转)。
    试一试
    • 用实特征值的矩阵(比如默认的那个),让步数 ≥ 12,所有种子排成同一条线。这条线是哪条线?
    • 做出向内的螺旋:复特征值且 \(|\lambda|<0.95\),步数 ≥ 10。
    • 再做出向外的螺旋:复特征值且 \(|\lambda|>1.05\)。这时特征值在复平面里落在单位圆的哪一侧?
    幂迭代与实际计算

    “不断乘 \(A\),再归一化”就是幂迭代。它只能找到最大的那一个特征值,但足够便宜,大型稀疏矩阵常用它。通用的特征值求解器(NumPy 的 np.linalg.eig、Eigen 的 EigenSolver,背后是 LAPACK)用的是 QR 算法,可以看成同时对所有方向做幂迭代的加强版。

    5第三种视角:对称矩阵是特例

    满足 \(A = A^\top\)(关于对角线对称)的矩阵,在机器人里随处可见:协方差矩阵、惯量矩阵、Hessian(3.5 节),还有 1.12 节要用的 \(A^\top A\)。它们有两条很好的性质:

    1. 特征值一定是实数。
    2. 不同特征值对应的特征向量一定互相垂直。

    所以它们总能写成 \(A = Q\Lambda Q^\top\):先用 \(Q^\top\) 把特征向量转到坐标轴上,再沿坐标轴拉伸(\(\Lambda\) 是对角矩阵,对角线上是特征值),最后用 \(Q\) 转回来。这里的 \(Q\) 是 1.10 节的正交矩阵,它的列就是特征向量。单位圆变成椭圆,椭圆的两根轴恰好就是特征向量,半轴长就是 \(|\lambda_i|\)。

    左图是一个对称矩阵:拖动阶段滑块,看圆被转、拉、转回的过程;拖动椭圆轴端点的圆圈可以改变特征值和方向。右图是同一个矩阵加上一点“旋转成分”:\(N = S + tJ\),其中 \(J=\begin{bmatrix}0&1\\-1&0\end{bmatrix}\)。\(N\) 不再对称,看看椭圆的轴还是不是特征向量。

    FIG 4对称 vs. 非对称
    对称 S = QΛQᵀ
    非对称 N = S + tJ
    琥珀色和紫色的线是特征向量(较大特征值用琥珀色)。左图中它们互相垂直,并且恰好落在椭圆的两根轴上,角标是直角。右图里青色粗线是椭圆真正的轴,虚线是 \(N\) 的特征向量:随着 \(t\) 增大,两者分开,特征向量之间也不再垂直。当 \(|t|\) 超过特征值之差的一半,特征向量消失,特征值变成复数。
    试一试
    • 把阶段滑块从 ① 拖到 ③(或按“播放”),看对称矩阵怎样“转、拉、转回”。
    • 增大 \(t\),让右图两个特征向量的夹角偏离 90° 至少 10°,而特征值仍是实数。
    • 继续增大 \(t\),直到右图的特征向量消失。这时 \(t\) 和特征值之差满足什么关系?
    核心洞见

    对称矩阵:特征向量就是椭圆的轴,特征值就是(带符号的)半轴长。这就是为什么协方差矩阵的特征向量给出不确定性椭圆的方向(4.4 节),也是点云 PCA 的原理。非对称矩阵的椭圆轴一般不是特征向量,那该怎么办?1.12 节的办法是:造一个对称矩阵 \(A^\top A\),用它的特征分解找到椭圆的轴,这就是奇异值分解。

    6再看数学

    提示:把鼠标悬停在公式中带底色的符号上,FIG 2 会加粗对应的箭头,悬停 \(\lambda\) 时还会临时显示真正的特征线。

    定义

    设 \(A\) 是 \(n\times n\) 矩阵。如果一个非零向量 \(\mathbf v\) 和一个数 \(\lambda\) 满足下式,\(\lambda\) 就叫 \(A\) 的特征值,\(\mathbf v\) 叫对应的特征向量:

    $$ \hl{Av}{\cx{A\mathbf v}} \;=\; \hl{lam}{\lambda}\,\hl{v}{\cv{\mathbf v}}, \qquad \mathbf v \neq \mathbf 0 . $$

    要求 \(\mathbf v\neq\mathbf 0\) 是因为零向量对任何 \(\lambda\) 都成立,没有信息。注意特征向量的任何非零倍数还是特征向量,所以真正确定的是一条特征线(所有这些倍数组成的直线)。同一个特征值的所有特征向量,加上零向量,组成一个子空间,叫特征空间。

    怎么找:特征多项式

    把 \(\lambda\mathbf v\) 移到左边:\(A\mathbf v - \lambda\mathbf v = (A-\lambda I)\mathbf v = \mathbf 0\)。这是一个齐次方程组。1.6 节告诉我们,它有非零解,当且仅当 \(A-\lambda I\) 不可逆(零空间不只有零向量);1.5 节告诉我们,不可逆等价于行列式为 0:

    $$ (A-\lambda I)\mathbf v = \mathbf 0 \ \text{有非零解} \iff \det(A-\lambda I) = 0 . $$

    对 \(2\times 2\) 矩阵 \(A=\begin{bmatrix}a&b\\c&d\end{bmatrix}\),展开就是一个关于 \(\lambda\) 的二次方程,叫特征多项式 (characteristic polynomial):

    $$ \det(A-\lambda I) = \lambda^2 - \underbrace{(a+d)}_{\operatorname{tr}A}\,\lambda + \underbrace{(ad-bc)}_{\det A} = 0, $$ $$ \lambda = \frac{\operatorname{tr}A}{2} \pm \sqrt{\Big(\frac{\operatorname{tr}A}{2}\Big)^2 - \det A}\,. $$

    由根与系数的关系,\(\lambda_1+\lambda_2 = \operatorname{tr}A\),\(\lambda_1\lambda_2 = \det A\):迹等于特征值之和,行列式等于特征值之积。后一条很直观:1.5 节说行列式是面积的缩放倍数,而特征方向上各自伸缩 \(\lambda_1,\lambda_2\) 倍,面积自然缩放 \(\lambda_1\lambda_2\) 倍。它还给出一个心算技巧:先取平均 \(m=\operatorname{tr}A/2\),再取乘积 \(p=\det A\),特征值就是 \(m\pm\sqrt{m^2-p}\)。

    算一个例子

    取 FIG 2 里的“对称”预设 \(A=\begin{bmatrix}2&1\\1&2\end{bmatrix}\)。迹为 4,行列式为 3:

    $$ \lambda^2 - 4\lambda + 3 = (\lambda-3)(\lambda-1) = 0 \;\Rightarrow\; \lambda_1 = 3,\ \lambda_2 = 1 . $$ $$ \lambda_1=3:\ \ (A-3I)\mathbf v=\begin{bmatrix}-1&1\\1&-1\end{bmatrix}\mathbf v=\mathbf 0 \;\Rightarrow\; \mathbf v_1=\begin{bmatrix}1\\1\end{bmatrix}, $$ $$ \lambda_2=1:\ \ (A-I)\mathbf v=\begin{bmatrix}1&1\\1&1\end{bmatrix}\mathbf v=\mathbf 0 \;\Rightarrow\; \mathbf v_2=\begin{bmatrix}1\\-1\end{bmatrix}. $$

    验证:\(A\mathbf v_1 = (3,3) = 3\mathbf v_1\),\(A\mathbf v_2 = (1,-1) = 1\cdot\mathbf v_2\)。两条特征线在 45° 和 135° 上,正是你在 FIG 2 里用探针找到的位置,而且互相垂直(这是对称矩阵的特点)。

    判别式的三种情况

    根号里的 \(\Delta=(\operatorname{tr}A/2)^2-\det A\) 决定了矩阵长什么样:

    \(\Delta\)特征值特征线例子
    \(\Delta>0\)两个不同的实数两条非均匀缩放、对称(非数量矩阵)、镜像、投影
    \(\Delta=0\)一个重根两种可能:\(A=\lambda I\)(每个方向都是);或只有一条(缺陷矩阵)单位矩阵;剪切
    \(\Delta<0\)一对共轭复数 \(a\pm bi\)没有实特征线旋转

    对角化与矩阵的幂

    如果 \(A\) 有 \(n\) 个线性无关的特征向量,把它们并排作为 \(V\) 的列,\(\Lambda\) 是特征值组成的对角矩阵。逐列写出 \(A\mathbf v_i=\lambda_i\mathbf v_i\) 就是 \(AV=V\Lambda\),而 \(V\) 的列是一组基(1.2 节),所以 \(V\) 可逆:

    $$ A = V\Lambda V^{-1}, \qquad A^k = V\Lambda^{k}V^{-1}, \qquad \Lambda^k=\begin{bmatrix}\lambda_1^k&0\\0&\lambda_2^k\end{bmatrix}. $$

    用 1.3 节的被动视角来读:\(V^{-1}\) 把标准坐标换算成“特征坐标”,\(\Lambda\) 在每个特征坐标上各自乘一个数,\(V\) 再换算回来。连乘 \(k\) 次时,中间的 \(V^{-1}V\) 全部抵消,只剩 \(\Lambda^k\),这就是第 4 部分里 \(\lambda_i^k\) 的来历。对上面的例子:

    $$ A^k = \underbrace{\begin{bmatrix}1&1\\1&-1\end{bmatrix}}_{V}\begin{bmatrix}3^k&0\\0&1\end{bmatrix}\underbrace{\tfrac12\begin{bmatrix}1&1\\1&-1\end{bmatrix}}_{V^{-1}} = \frac12\begin{bmatrix}3^k+1 & 3^k-1\\ 3^k-1 & 3^k+1\end{bmatrix}. $$

    取 \(k=1\) 得回 \(A\) 本身;\(k\) 很大时,两行几乎相同,每个向量都被推向 \((1,1)\) 方向:幂迭代的结论。

    复特征值就是“旋转加缩放”

    当 \(\Delta<0\),特征值是 \(\lambda=a\pm bi\),其中 \(a=\operatorname{tr}A/2\),\(b=\sqrt{-\Delta}\)。写成极坐标形式 \(\lambda=re^{\pm i\varphi}\),模长 \(r=\sqrt{a^2+b^2}=\sqrt{\det A}\),辐角 \(\varphi=\operatorname{atan2}(b,a)\)。矩阵 \(\begin{bmatrix}a&-b\\b&a\end{bmatrix}=r\,R(\varphi)\) 恰好是“旋转 \(\varphi\),再放大 \(r\) 倍”。任何特征值为 \(a\pm bi\) 的实 \(2\times2\) 矩阵,本质上都是这个动作,只是透过一个歪斜的坐标系去看。所以反复作用的轨迹是螺旋:每步转 \(\varphi\),长度乘 \(r\)。

    纯旋转矩阵 \(R(\theta)\) 的特征值是 \(e^{\pm i\theta}\),\(r=1\):旋转不改变长度,只有 \(\theta=0\) 或 \(\pi\) 时才有实特征向量(\(\theta=\pi\) 时 \(\lambda=-1\),每个向量都被翻到对面)。

    对称矩阵:谱定理

    如果 \(A=A^\top\),那么特征值全是实数,并且可以选出一组标准正交的特征向量。把它们作为列组成 \(Q\),\(Q^\top Q=I\)(1.10 节),于是 \(V^{-1}=Q^\top\),不用求逆:

    $$ A = Q\Lambda Q^\top = \lambda_1\,\mathbf q_1\mathbf q_1^\top + \lambda_2\,\mathbf q_2\mathbf q_2^\top . $$

    垂直性的证明只要两行:设 \(A\mathbf v_1=\lambda_1\mathbf v_1\),\(A\mathbf v_2=\lambda_2\mathbf v_2\),\(\lambda_1\neq\lambda_2\)。则 \(\lambda_1(\mathbf v_1\!\cdot\!\mathbf v_2)=(A\mathbf v_1)\!\cdot\!\mathbf v_2=\mathbf v_1\!\cdot\!(A^\top\mathbf v_2)=\mathbf v_1\!\cdot\!(A\mathbf v_2)=\lambda_2(\mathbf v_1\!\cdot\!\mathbf v_2)\),所以 \((\lambda_1-\lambda_2)(\mathbf v_1\!\cdot\!\mathbf v_2)=0\),即 \(\mathbf v_1\perp\mathbf v_2\)。(点积见 1.7 节;这里用到 \((A\mathbf x)\!\cdot\!\mathbf y=\mathbf x\!\cdot\!(A^\top\mathbf y)\)。)1.12 节会对 \(A^\top A\) 使用这个定理,来推出奇异值分解。

    稳定性判据

    第 4 部分的公式 \(\mathbf x_k=\sum c_i\lambda_i^k\mathbf v_i\) 直接给出结论。对离散时间系统 \(\mathbf x_{k+1}=A\mathbf x_k\),所有分量都衰减,当且仅当每个 \(|\lambda_i|<1\)。对连续时间系统 \(\dot{\mathbf x}=A\mathbf x\),解是 \(\mathbf x(t)=\sum c_i e^{\lambda_i t}\mathbf v_i\),每个分量以 \(e^{\operatorname{Re}\lambda_i\,t}\) 的速度变化,所以条件变成 \(\operatorname{Re}\lambda_i<0\):

    $$ \text{离散时间:}\quad \max_i |\lambda_i| < 1 \quad (\text{在单位圆内}) $$ $$ \text{连续时间:}\quad \max_i \operatorname{Re}\lambda_i < 0 \quad (\text{在左半平面}) $$
    实际怎么算

    NumPy 里,一般矩阵用 np.linalg.eig(A)(可能返回复数),对称矩阵用 np.linalg.eigh(S):它保证特征值是实数并按升序排列,特征向量标准正交,也更快、更准。Eigen 里对应的是 EigenSolver 和 SelfAdjointEigenSolver。如果你知道矩阵是对称的(协方差、\(A^\top A\)),一定用 eigh。

    7机器人中的它:控制器的稳定性与旋转轴

    离散时间的 PD 控制

    一辆单位质量的小车,位置 \(p\),速度 \(v\),用 PD 控制把它拉回原点:推力 \(u=-k_p\,p-k_d\,v\)(弹簧 \(k_p\) 加阻尼 \(k_d\))。控制器每隔 \(\Delta t\) 秒运行一次,我们用半隐式欧拉法离散化:先更新速度,再用新速度更新位置:

    $$ v^{+} = v + \Delta t\,(-k_p\,p - k_d\,v), \qquad p^{+} = p + \Delta t\, v^{+} . $$

    以 \(\mathbf x=(p,v)\) 为状态,这是 \(\mathbf x_{k+1}=(A-BK)\,\mathbf x_k\),其中 \(A\) 是无控制时的动力学,\(BK\) 是反馈。注意:判断稳定性要看闭环矩阵 \(A-BK\) 的特征值,而不是 \(A\) 的(这个 \(A\) 的特征值是 1 和 1,本身就不稳定):

    $$ A=\begin{bmatrix}1&\Delta t\\0&1\end{bmatrix},\quad B=\begin{bmatrix}\Delta t^2\\ \Delta t\end{bmatrix},\quad K=\begin{bmatrix}k_p&k_d\end{bmatrix}, $$ $$ A-BK=\begin{bmatrix}1-\Delta t^2k_p & \Delta t\,(1-\Delta t\,k_d)\\ -\Delta t\,k_p & 1-\Delta t\,k_d\end{bmatrix}. $$

    它的迹和行列式有很简洁的形式:\(\operatorname{tr}=2-\Delta t^2k_p-\Delta t\,k_d\),\(\det=1-\Delta t\,k_d\)。代入第 6 部分的公式就得到两个特征值,只要两个都落在单位圆里,小车就会稳定下来。注意:如果时间是连续的,任何正增益 \(k_p,k_d\) 都稳定;离散以后,增益和 \(\Delta t\) 一大,特征值就会冲出单位圆。拖动滑块,把特征值(右上小图)、相平面轨迹和时间响应对着看。

    FIG 5离散 PD 控制:特征值决定一切
    相平面 (p, v):可拖动起点
    特征值与单位圆
    时间响应 p(t),起点 p = 1, v = 0
    圆点是每个控制周期的状态,淡绿色带是 ±2% 的“已稳定”区间,紫色虚线是 \(C\rho^k\):由特征值预测的衰减(或增长)速度,\(\rho=\max|\lambda|\),\(C\) 取使它刚好包住前 40 步响应的最小值。仿真曲线的包络和它平行,这就是“特征值决定行为”的直接证据。读数里的“实测”是仿真里 \(|\mathbf x|\) 每步实际缩放的倍数,应当接近 \(\rho\)。
    试一试
    • 找到一组增益,让小车不超调地稳定下来:两个特征值都是 \((0,1)\) 内的实数。提示:阻尼要够,但 \(k_p\) 别太大。
    • 让它振荡但仍然稳定:特征值是复数,而且 \(|\lambda|<0.98\)。
    • 把增益调大,让系统发散(\(|\lambda|>1\))。然后保持增益不变,把 \(\Delta t\) 调小,看它能不能被救回来。
    真实系统里

    机器人的低层关节控制环通常跑在 1 kHz 左右,原因正是这里看到的:控制周期 \(\Delta t\) 越长,同样的增益越容易让特征值越过单位圆。调增益时不要只看超调,也要看闭环特征值离单位圆还有多远:靠得太近,对模型误差和通信延迟就没有余量。连续时间的判据 \(\operatorname{Re}\lambda<0\) 与离散时间的 \(|\lambda|<1\) 通过 \(z=e^{s\Delta t}\) 相连:左半平面被映射到单位圆内部。

    三维旋转的轴:特征值为 1 的特征向量

    把绕 z、y、x 轴的三个旋转连乘(1.10 节),得到一个看上去很复杂的 \(3\times3\) 旋转矩阵 \(R\)。欧拉旋转定理说:它仍然只是绕某一条固定轴转一个角度。这条轴上的向量不受影响,\(R\mathbf n=\mathbf n\),也就是说 \(\mathbf n\) 是 \(R\) 的特征向量,特征值 \(\lambda=1\)。由 \((R-I)\mathbf n=\mathbf 0\),\(\mathbf n\) 垂直于 \(R-I\) 的每一行,所以取两行的叉积(1.8 节)就能找到它。另外两个特征值是复数 \(e^{\pm i\theta}\),\(\theta\) 就是转角(\(\operatorname{tr}R=1+2\cos\theta\))。拖动三个欧拉角,看那条紫色的不动轴。

    FIG 6任何旋转都有一条不动轴
    半透明的细坐标轴是世界坐标系,标有 x′、y′、z′ 的粗坐标轴是转动后的坐标系 \(R\)。紫色轴是 \(R-I\) 的零空间,即特征值 1 的特征向量。红色虚线圆是 \(x\) 轴尖端绕轴走的圆,紫色弧是它实际转过的角 \(\theta\)。无论怎样组合三个角,转过之后这条轴上的点都没有动。拖动画面可以转动视角。
    • 把三个欧拉角都设成非零(至少 15°),确认合成的旋转仍然只有一条紫色轴,且读数里 \(R\mathbf n=\mathbf n\)。
    • 让旋转轴恰好是竖直的 z 轴(转角大于 20°)。可以把哪两个角设为 0 来做到?
    真实系统里:协方差椭圆与旋转的“不动点”

    协方差椭圆。SLAM 和卡尔曼滤波给出的位置协方差 \(\Sigma\) 是对称矩阵(4.4 节)。\(\Sigma=Q\Lambda Q^\top\):\(Q\) 的列是椭圆的轴方向,\(\sqrt{\lambda_i}\) 是 1σ 椭圆的半轴长(椭圆是单位圆在 \(Q\Lambda^{1/2}Q^\top\) 下的像)。最大特征值对应机器人最不确定的方向。FIG 4 左图就是这幅图,只是半轴长是 \(\lambda_i\) 而不是 \(\sqrt{\lambda_i}\)。
    旋转轴。从旋转矩阵求出轴和转角(FIG 6 做的事),是 5.2 节“轴角表示”和 5.6 节对数映射的出发点:\(\operatorname{Log}(R)=\theta\,\mathbf n\)。

    8常见误区

    误区 1:特征向量是唯一确定的

    只有特征线是确定的:\(\mathbf v\) 的任何非零倍数(包括 \(-\mathbf v\))一样是特征向量。库函数返回的通常是单位长度,但正负号是任意的,不同机器、不同版本可能不同。特征值重复时,特征空间是整个平面或子空间,任何一组基都行。所以别逐元素比较两次运行的特征向量;要比较方向,用 \(|\mathbf u\cdot\mathbf v|\) 接近 1,或者先约定一个符号规则(比如让最大分量为正)。

    误区 2:特征向量一定互相垂直

    只有对称矩阵才保证这一点(FIG 4 右图)。一般矩阵的特征向量可以夹成任意角度,这时 \(V^{-1}\neq V^\top\),别图省事用转置。特征向量越“斜”,矩阵越“非正规”:即使所有 \(|\lambda_i|<1\),状态也可能先暂时增长很大,再衰减。

    误区 3:每个方阵都能对角化

    不是。剪切 \(\begin{bmatrix}1&1\\0&1\end{bmatrix}\) 的特征值 1 是重根,却只有 x 轴这一条特征线:特征向量不够,凑不出基,叫缺陷矩阵 (defective)。为什么?\(A-I=\begin{bmatrix}0&1\\0&0\end{bmatrix}\) 的零空间只有 x 轴。这类矩阵的幂不再是 \(\lambda^k\) 那么简单:\(A^k=\begin{bmatrix}1&k\\0&1\end{bmatrix}\),虽然 \(|\lambda|=1\),状态却线性增长。在稳定性分析里,\(|\lambda|=1\) 的缺陷矩阵属于不稳定。

    误区 4:特征值就是“拉伸了多少”

    特征值只描述特征方向上的伸缩。剪切的特征值是 1 和 1,似乎什么都没拉伸,可它实际上能把某些向量拉到 1.62 倍(它的奇异值是 1.62 和 0.62)。想知道“最多能拉多长、最少压成多短”,要用奇异值(1.12 节)。只有对称(更一般地,正规)矩阵的奇异值才等于特征值的绝对值。

    误区 5:连续时间和离散时间的稳定条件混用

    连续时间 \(\dot{\mathbf x}=A\mathbf x\):稳定当且仅当 \(\operatorname{Re}\lambda<0\)。离散时间 \(\mathbf x_{k+1}=A\mathbf x_k\):稳定当且仅当 \(|\lambda|<1\)。把它们搞混会得到荒唐的结论:\(\lambda=0.5\) 在离散系统里稳定,在连续系统里却是指数发散;\(\lambda=-2\) 在连续系统里稳定,在离散系统里却发散。先问清楚:你手里的 \(A\) 是“每步更新”,还是“变化率”?

    误区 6:在代码里用特征多项式求特征值

    手算 \(2\times2\) 很方便,但写进程序是个坏主意。五阶及以上的多项式没有求根公式(阿贝尔–鲁菲尼定理),多项式的根对系数的微小扰动极其敏感,数值上会损失大量精度。实际软件用 QR 迭代等直接作用在矩阵上的算法(eig、eigh),不会显式构造特征多项式。

    9小练习

    1. 某个矩阵有特征值 3 和 1,对应的特征向量分别是 \((1,1)\) 和 \((1,-1)\)。向量 \((2,0)\) 被它送到哪里?
    \((2,0)\) 本身不是特征向量,要先拆开:\((2,0)=(1,1)+(1,-1)\)。于是 \(A(2,0)=3(1,1)+1\cdot(1,-1)=(4,2)\)。选 \((6,0)\) 是把 \((2,0)\) 当成了特征值为 3 的特征向量。
    2. 系统 \(\mathbf x_{k+1}=A\mathbf x_k\) 的 \(A\) 有特征值 0.9 和 −1.1。会发生什么?
    离散时间稳定要求每个 \(|\lambda_i|<1\)。\(|-1.1|=1.1>1\),所以这个分量以 \(1.1^k\) 增长,又因为符号为负,每步左右翻转。0.9 那个分量在衰减,但迟早被 −1.1 的分量淹没。负号本身不是问题(\(-0.5\) 就很稳定),问题是模长。
    3. 一个 \(2\times2\) 矩阵的迹为 2,行列式为 5。反复作用 \(\mathbf x_{k+1}=A\mathbf x_k\) 会怎样?
    特征多项式 \(\lambda^2-2\lambda+5=0\),判别式 \(\Delta=1-5=-4<0\),所以 \(\lambda=1\pm2i\):复数,轨迹是螺旋。模长 \(|\lambda|=\sqrt{5}\approx2.24>1\)(也等于 \(\sqrt{\det A}\)),所以向外发散。
    4. 一个对称矩阵的特征值 4 对应特征向量 \((1,2)\),另一个特征值是 1。第二个特征向量的方向是?
    对称矩阵不同特征值的特征向量互相垂直。与 \((1,2)\) 垂直的方向满足点积为 0:\((2,-1)\cdot(1,2)=2-2=0\)。\((1,-2)\) 的点积是 \(-3\),\((2,1)\) 的是 4,都不垂直。如果这是一个协方差矩阵,\((2,-1)\) 就是椭圆较短的那根轴。
    5. 剪切矩阵 \(\begin{bmatrix}1&1\\0&1\end{bmatrix}\) 的两个特征值都是 1。下面哪个说法正确?
    \(A-I=\begin{bmatrix}0&1\\0&0\end{bmatrix}\) 的零空间只有 x 轴,所以只有一条特征线(缺陷矩阵)。但 \(\begin{bmatrix}0\\1\end{bmatrix}\mapsto\begin{bmatrix}1\\1\end{bmatrix}\),长度从 1 变成 \(\sqrt2\)。拉伸程度要看奇异值(1.618 和 0.618,见 1.12 节),不是特征值。剪切的特征值是实数(判别式为 0),并且不是每个向量都转弯:x 轴上的向量就没动。

    10延伸阅读

    • 3Blue1Brown, Essence of Linear Algebra — 第 14 章“特征向量与特征值”,以及第 15 章“计算特征值的一个小技巧”(本课用到的迹与行列式心算法)
    • G. Strang, Introduction to Linear Algebra, Ch. 6 — 特征值与特征向量(对角化、对称矩阵、稳定性)
    • K. J. Åström & R. M. Murray, Feedback Systems, Ch. 5–6 — 线性系统与状态反馈:特征值如何决定稳定性与响应
    • J. Ström et al., Immersive Linear Algebra — 特征值与特征向量一章,带交互插图
    • G. Strang, MIT 18.06 Linear Algebra — 第 21–22 讲:特征值、对角化与矩阵的幂