直观理解特征值(矩阵不去改变的那些方向)

把一张橡皮膜铺在桌上,在上面朝各个方向画一百支短箭头,然后拉伸这张膜,让它横向拉开的幅度是纵向的两倍。盯着那些箭头看。随着膜的变形,几乎所有箭头都朝水平方向摆了过去。只有两支纹丝不动。本来就水平的那支仍然水平,长度变成了两倍。竖直的那支仍然竖直,长度也没有变。
这两支箭头就是这次拉伸的特征向量,而数字 2 和 1 就是它的特征值。这个题目里的一切,那条带行列式的公式、特征多项式、对角化、矩阵一旦发生旋转就会冒出来的复数,全都是为了替一台你没法一眼看穿的机器找出这些特殊的箭头。
如果你还没读过直观理解矩阵,这篇就是它的续集。那篇文章搭好了一幅图像:矩阵是一台接收一段行程、再交还一段行程的机器。这一篇只向这台机器提一个问题:哪些行程你原封不动地放过了?
矩阵是一台机器,而多数箭头都会被掰弯
矩阵 接收一个向量 ,产出一个新向量 。对绝大多数输入而言,输出都会指向别处。剪切会把箭头掰斜。旋转会把每一支箭头都转过同一个角度。而在某个方向上拉得比别处更用力的拉伸,则会把箭头统统拖向那个拉力更强的方向。
把矩阵想成一座风洞。箭头送进去,风打在它们身上,出来时就弯了。有意思的问题不是一支普通箭头会遭遇什么,而是有没有哪支箭头是风吹不弯的:进去时朝哪儿,出来时还朝哪儿,只是长了一些或短了一些。
那些拒绝转向的箭头
的特征向量,是被这台机器留在自己那条直线上的非零向量 :
希腊字母 lambda,也就是 ,就是特征值:箭头被缩放的倍数。这条等式是说,机器作用在这支特定箭头上的效果,和单纯乘一个数没有任何区别。沿着特征向量,矩阵不再是矩阵,而变成了一个标量。
特征值用一个数就携带了大量信息:
- 表示机器把这个方向拉长了。
- 表示它把这个方向压短了。
- 表示它完全没有动这个方向。
- 表示它先把箭头翻转到相反方向,再进行缩放。
- 表示它把这个方向彻底碾成了零。机器沿着这条线把空间压扁了。
也要留意特征向量不是什么。它不是某一支具体的箭头,而是一个方向:如果 是特征向量,那么 也是,特征值相同。而零向量按定义被排除在外,因为任何矩阵都把零送成零,那样一来每个数都会成为特征值,整个概念也就没用了。
那条公式是从哪来的
教材把 直接甩给你,好像它是从天上掉下来的。其实它就来自上面那句话。
从 出发。右边是一个数乘一个向量。想把它挪到等号另一侧,就得先写成矩阵的形式,而 和 是一回事,其中 是什么也不做的单位矩阵。现在两边相减:
把它读成关于一台新机器 的陈述。它接收一支非零箭头 ,交还的却是零向量。一台把实实在在的箭头送成一个点的机器,至少已经把空间的某一个方向压扁了。在矩阵那篇文章里我们看到,行列式衡量的是有多少面积能在机器手下幸存,所以压扁空间的机器行列式为零:
整个推导就到此为止。特征值就是那些能让机器 崩掉的 ,而特征向量就是它崩塌所沿的方向。把行列式展开会得到一个关于 的多项式,称为特征多项式,它的根就是特征值。对 矩阵它是二次的;对 矩阵它是 次的,这也正是 矩阵最多只有 个特征值的原因。
一道慢慢算的例题
取矩阵
沿主对角线减去 ,再取行列式:
令它为零并因式分解:,于是特征值为 和 。
接下来为每个特征值找出方向。对 ,解 :
两行说的都是 ,所以特征向量是 的任意倍数。拿原来的机器验算一下:。这支对角方向的箭头出来时长了三倍,方向不变。
对 ,两行说的是 ,所以特征向量是 的任意倍数,而且确实有 。反对角方向的箭头毫发无损。
现在你可以用一句话描述这个矩阵了,而单看它那四个元素你是说不出来的:它沿对角方向把空间拉伸 3 倍,反对角方向原样不动。平面上其余每一支箭头都会被拖向对角方向,因为对角方向的分量增长得比另一个分量快三倍。
特征值透露了这台机器的哪些底细
有两条事实是从特征多项式里掉出来的,值得记住。
特征值之积等于行列式。在这个例子里 ,而 的行列式是 。这很合理:行列式是整台机器的面积缩放比,如果机器沿一个方向拉伸 3 倍、沿另一个方向拉伸 1 倍,面积自然就放大 3 倍。
特征值之和等于迹,也就是主对角线元素之和。这里是 。这两条都是快速检验,能确认你的算术没有出岔子。
再放宽一点看,特征值就是这台机器的谱。较大的那些,对应着机器反复作用之后会占据主导的方向。一台特征值为 和 的机器作用十次,会把第一个特征向量拉伸 倍,把第二个拉伸 倍。任何起始箭头只要含有哪怕一丝第一个方向的成分,最后都会几乎完美地与它对齐。这就是反复进行的过程最终总会落到某个特征向量上的原因:那是胜出的方向。
复特征值意味着旋转
把平面旋转 90 度。每一支箭头都转了向。没有任何方向被留在原处,所以本该一个特征向量都没有,而公式也正是这么说的。旋转矩阵是
它的特征多项式是 ,没有实数解。它的特征值是 和 。
这不是方法失灵了。这是方法在告诉你一件真相:这台机器在旋转,而旋转在实平面上没有不动的方向。复特征值正是“这里有个扭转”的标志。一般地,转角为 的旋转,其特征值是 和 ,正是欧拉公式里那些会旋转的数;而特征值形如 的矩阵会向内盘旋,一边转一边缩。如果复数在你眼里仍像一种障眼法,直观理解虚数会为你搭起把 看成四分之一圈旋转的图像,而它在这里扮演的正是这个角色。
对角化:换个座位坐,机器就变成了乘法
假设一个 矩阵拥有 个方向确实彼此不同的特征向量。那么这些特征向量就可以充当一套新的坐标轴。把每个向量改用“它含有多少各个特征向量的成分”来描述,机器立刻变得平凡:它无非是把每个坐标乘上对应的特征值。
写成式子,如果 是以特征向量为列的矩阵, 是由特征值构成的对角矩阵,那么
从右往左读。 把向量翻译成特征向量坐标, 缩放每个坐标, 再翻译回来。机器本身没有变。你只是找到了那几个座位,从那里望过去,它看上去就是一串数。
真正的回报在于求幂。把机器作用一百次,意味着
而 不过是把每个特征值取一百次方。原本要做一百次矩阵乘法的计算,变成了区区几次数的乘法。关于矩阵的一切长期行为问题,比如一个种群五十代之后会怎样、一次随机游走收敛到哪里、一段振动如何衰减,本质上都是关于 的问题。
为什么各行各业都在找特征向量
一旦你把特征向量看成“在重复作用下胜出的方向”,那些应用就不再像一份清单,而开始像同一个想法。
- PageRank。 谷歌最初的排名算法,就是一个描述哪些页面链向哪些页面的巨型矩阵中特征值为 1 的特征向量。它是那种再顺着链接多走一步也不会改变的注意力分布。
- 微分方程。 方程组 的解,沿每个特征向量由 拼搭而成。正特征值对应增长,负的对应衰减,复的对应振荡。特征值就是这个系统的各种速率。拉普拉斯变换同样是在搜寻指数行为,只不过用的是积分而不是行列式。
- 振动。 一座桥、一根吉他弦或一个分子都有固有频率,它们就是其刚度矩阵的特征值。特征向量则是它振动时呈现的形状。
- 数据。 主成分分析找的是协方差矩阵的特征向量。特征值最大的那个特征向量,指向数据变化最剧烈的方向,也正是你若要概括这批数据会首先选取的那根轴。
- 量子力学。 可观测量是算符的特征值。一次测量返回其中某一个特征值,而特征向量就是系统随之落定的状态。
每一种情形里方法都是同一个:找出机器不去改变的方向,复杂的行为便化为沿这些方向的乘法。
错误都出在哪里
这个题目里的错误相当固定,而且大多源于把图像弄丢了。
接受零向量。 解 时, 永远是允许的。但那不是特征向量。如果你唯一解出的就是零,说明你用错了 。
指望一行就能给出答案。 在上面那道例题里, 的两行说的是同一件事,。这种冗余不是错误,它正是压扁本身。如果两行给出的是相互独立、只有零解的方程,那就是特征值取错了。
默认特征向量总是够用。 两行分别是 和 的剪切矩阵,只有一个重复的特征值 ,却只有一个特征向量方向。它无法对角化。特征值有重根的地方,是需要动手检查而不是想当然的地方。
把两个词搞混。 特征值是一个数。特征向量是一个方向。题目问其中之一时,通常需要另一个作为中间步骤,而交回错误类型的答案,是丢分最常见的方式。
特征多项式里的符号出溜。 对 矩阵,这个多项式永远是 。照这个式子写,再检查两根之积是否等于行列式,就能拦下绝大多数疏漏。
没人要求却擅自单位化。 特征向量是它那条直线上的任意非零向量。把它缩放成长度 1 有时是必须的,更多时候是可选的;只在题目明确要求时才做,而且做的过程中千万别把方向弄丢。
Math Zen 能帮上什么
“一台机器拉伸某些方向、掰弯另一些方向”这幅图像,值得你花一小时盯着它琢磨。而那些机械操作,沿对角线减去 、展开行列式、因式分解、回代求出方向,则值得你做三十道题,因为上面每一个错误都是一种只能靠重复才能改掉的习惯。
Math Zen 的矩阵模块会不断生成新的特征值题目,并把答案与你的过程逐步比对,从 的特征多项式,一直到特征向量以及迹与行列式的验算,同时还配有它们所依赖的行列式与逆矩阵训练。每道题旁边的讲解展示的是压扁空间的那幅图像,而不只是代数步骤,这样公式就始终和它成立的理由连在一起。
核心总结
矩阵会掰弯多数箭头。特征向量就是它不去掰弯的那支箭头,而特征值则是它转而把这支箭头拉伸了多少。公式 无非是在陈述一个观察: 必定沿着特征向量把空间压扁,而压扁的机器行列式为零。复特征值意味着机器在旋转,对角化意味着换到那几个座位上去描述机器,从那里看它就是普普通通的乘法,而反复进行的过程最终会落在特征值最大的那个特征向量上,这正是搜索引擎、桥梁和种群到头来都归结为同一套计算的原因。
找出机器不去改变的方向,机器也就不再神秘了。
常见问题
- 用最通俗的话说,特征向量是什么?
- 矩阵的特征向量,就是这个矩阵不会去掰弯的方向。你把一支指向该方向的箭头送进矩阵,出来的箭头仍然指着同一条线,只是变长了、变短了,或者掉了个头。它被缩放的那个倍数就是特征值。除此之外,几乎每一支箭头出来后都会指向新的方向。
- 为什么求特征值要解 det(A - λI) = 0?
- 如果 Av = λv,那么对某个非零的 v 就有 (A - λI)v = 零向量。一个能把非零箭头送成零的矩阵,说明它已经把空间压扁了,而压扁的机器行列式必为零。所以特征值恰好就是那些让 det(A - λI) 变成零的 λ。
- 矩阵会不会一个实特征值都没有?
- 会。旋转 90 度会掰弯每一支箭头,没有任何实方向被留在原处,特征方程也就没有实根。它的特征值是复数 i 和 -i。复特征值正是一个矩阵在拉伸之外还带着旋转的标志。
- 特征值和特征向量有什么区别?
- 特征向量是一个方向,是矩阵始终留在自己那条直线上的箭头。特征值是一个数,是矩阵沿该方向把箭头拉长、压短或翻转的倍数。每个特征向量对应一个特征值;而同一个特征值可以由好几个特征向量共享。
- 特征值到底用来做什么?
- 它告诉你一个反复进行的过程最终会稳定在哪里。谷歌的 PageRank 就是链接矩阵中特征值为 1 的那个特征向量,桥梁的固有频率是其刚度矩阵的特征值,微分方程组里的增长率与衰减率是特征值,主成分分析挑出的则是数据协方差矩阵的特征向量。


