☰
特征值与特征向量:从几何重数到代数重数,拆解矩阵的灵魂
2026/10/14 0:33:27 网站建设 项目流程

先问一个问题:你拿到一个矩阵,是不是下意识就想去算行列式、算秩、解方程组?这些操作当然没错,但它们更像“体检报告”——告诉你矩阵健康不健康。而真正决定一个矩阵“性格”的,是特征值与特征向量。这俩东西才是矩阵的灵魂。

我们看一个最常见的场景:某个系统每走一步,状态都乘上同一个矩阵。一维还好说,就是个数的乘法;高维就麻烦了,因为向量不仅长度会变,方向通常也会被矩阵带偏。可偏偏有些向量是“倔驴”——矩阵作用上去,它们只改长度、不改方向。这些向量就是特征向量,被缩放的比例就是特征值。抓住了它们,超高维系统的长期行为就能一眼看穿。

今天这个标题落在“线代[5]”,已经是系列第5篇,所以我会默认你至少知道矩阵乘法、行列式、线性方程组这些基本功。要讲的东西有两块:第一块是特征值与特征向量的定义和求法,第二块是很多人草草带过但考试和工作里都特别要命的几何重数与代数重数。尤其是“几何重数 ≤ 代数重数”这个不等式,几乎是一切矩阵对角化、矩阵函数计算的命门,搞不懂它,后面学谱分解、学马尔可夫链、学图神经网络里的聚合操作都会磕磕绊绊。

这篇适合三类人:正在啃线性代数的大学生、需要补数学基础的数据方向从业者、还有那些用矩阵用了好几年但从来没认真想过“矩阵到底在干嘛”的工程师。我会按自己讲课的习惯来——先讲几何直觉,再补严格推导,最后扔几个真实场景里踩过的坑。

1. 特征值与特征向量:先看懂矩阵在空间里做了什么

1.1 一个例子带你进入“方向不变”的世界

拿一个具体的二阶矩阵开刀:

A = [[2, 1], [1, 2]]

随便取一个向量 x = [1, 0]ᵗ,乘一下 A 得到 [2, 1]ᵗ,长度变了,方向也明显偏了。再取 x = [1, 1]ᵗ,乘一下:A x = [3, 3]ᵗ = 3·[1, 1]ᵗ。方向一点没变,只是拉长了3倍。这就是特征向量的雏形。

再取 x = [1, -1]ᵗ,算一下:A x = [1, -1]ᵗ,发现不但方向没变,长度压根没变,缩放系数是1。一个矩阵在平面上,居然有一根方向完全不动、一根方向被拉长的“主轴”。这两根主轴就是特征向量,而3和1就是对应的特征值。

这背后的意义非常实在:任何向量都可以拆成这两根主轴方向的分量。矩阵作用一次,每个分量各自缩放自己那个倍数,方向却始终保持。于是循环迭代矩阵的过程,就变成“两个互相独立的一维乘法”在同时进行。这就是特征分解的全部浪漫所在。

1.2 严格定义其实只有两行

A 是 n 阶方阵,如果存在非零向量 v,使得

A v = λ v

那么 λ 称为特征值,v 称为属于 λ 的特征向量。注意两个关键词:“非零向量”“方阵”。非零是因为零向量永远满足方程,但没有信息量;方阵是因为只有方阵才能有“维数不变的映射”,而特征值这个东西本质上描述的是同一空间内的自映射,不是不同空间之间的映射。

把等式右边移过来:

(A - λI) v = 0

这个齐次方程组要有非零解,系数矩阵就必须不可逆,也就是

det(A - λI) = 0

这个式子叫特征方程,展开后是关于 λ 的 n 次多项式,叫特征多项式,记作 p(λ)。到这里,找特征值就变成了找多项式的根。这一步看起来轻巧,实际做题的时候,绝大多数时间都耗在这个行列式的计算上。

1.3 为什么要为一个“方向不变”的向量这么着迷

你可能觉得,方向不变的向量只是特例,值得这么大张旗鼓吗?值得,因为我上面说了,不是只有特征向量本身重要,而是任何向量都可以由特征向量线性表出。以二阶矩阵为例,只要两个特征向量 v₁、v₂ 不共线,任给 x,都能写成 x = c₁v₁ + c₂v₂。现在算 A 作用 k 次:

Aᵏx = c₁λ₁ᵏv₁ + c₂λ₂ᵏv₂

一个矩阵的 k 次幂,瞬间化成了两个标量幂的加权组合。没有这套语言,你算 Aᵏ 就得硬乘 k 遍矩阵,而 k = 100 的时候,手算基本就是灾难。特征向量把矩阵的高维复杂性拆分成了若干个一维伸缩过程,这才是核心价值。

还有更深的:什么样的矩阵可以被对角化成 A = SΛS⁻¹?答案就是存在 n 个线性无关的特征向量。能拆,才能简化;拆不开,就只能用约当标准形这种进阶工具。所以特征值、特征向量不是考试专用概念,它是整个矩阵理论的承重墙。

2. 代数重数:藏在多项式里的“重根计数”

2.1 特征多项式到底在数什么

特征多项式 p(λ) = det(A - λI) 是一个 n 次多项式。n 次多项式有几个根?按代数基本定理,在复数域里计重数的话,恰好有 n 个根。注意“计重数”三个字。

比如 p(λ) = (λ - 2)³(λ + 1),根是 2 和 -1。其中根 2 出现了三次,根 -1 出现了一次。我们说特征值 2 的代数重数是 3,特征值 -1 的代数重数是 1。代数重数就叫 algebraic multiplicity,缩写 AM。它本质上是在回答一个问题:这个根在多项式因式分解里占了几份。

为什么单独给它起个名字?因为不叫这个名字,你很难精确描述那些“同一个特征值重复出现”的矩阵。例如前面举的 A = [[2, 1], [1, 2]],特征多项式是 (λ - 2)² - 1 = λ² - 4λ + 3 = (λ - 1)(λ - 3)。两个不同的根,代数重数都等于 1,皆大欢喜。可你要是遇到 A = [[2, 0], [0, 2]],特征多项式 (λ - 2)²,根 2 出现两次,代数重数就是 2。

2.2 代数重数 ≥ 1 意味着什么

任何一个特征值,代数重数至少为 1。这听起来像废话,但它有一个直接推论:n 阶矩阵在复数域内一定有 n 个特征值(计重数)。哪怕矩阵全是实数,特征值也可能跑到复数里去。经典例子是旋转矩阵:

R = [[0, -1], [1, 0]]

特征多项式 λ² + 1 = 0,没有实根,但复数域里有 i 和 -i。所以实矩阵不保证有实特征值,但复数域里永远有“足够多”的特征值。这一点在判断矩阵能否对角化的时候特别关键:只在实数域里讨论,旋转矩阵没法对角化;允许复数以后,它照样可以对角化。学习的时候一定要有这个复数意识,否则容易被实矩阵“骗”了。

2.3 重根不能随便乱丢

大学里很多同学算特征值,算出来 (λ - 2)²(λ - 3) 之后,直接写“特征值为 2, 3”,初看没毛病,但应用到几何重数时就会出错。因为“2”占有两个代数重数,意味着它对应的特征空间最多也只能有二维,对应的特征向量最多也只能找全两个线性无关的。如果你写漏了一个 2,后面判断“三个特征向量是否能张成整个空间”就直接崩盘。

所以我的习惯是:特征值列表写成带重数的形式,例如“λ = 2(重数2),λ = 3(重数1)”。这样后续每一步检查都有据可依。别小看这个写法,它能让你在算几何重数时目标感强十倍。

代数重数的实操计算本身没什么花活,就是分解因式。但有一个经验值得分享:算特征多项式时,优先尝试用初等变换把行列式某一行或某一列化出公因式,而不是直接硬展开。硬展开会得到一个三次或四次多项式,因式分解会让人痛不欲生;先消出公因式,特征多项式直接带着 (λ - a) 因子出来,后面就顺了。这一招在考研题和期末卷里几乎必用。

3. 几何重数:特征空间到底“装”得下几个独立方向

3.1 每个特征值背后藏着一个子空间

固定一个特征值 λ₀,看方程 (A - λ₀I)v = 0。所有满足这个方程的非零向量,加上零向量,构成一个线性子空间,称为 λ₀ 的特征空间,记作 E_{λ₀}。几何重数,记为 GM,就是这个特征空间的维数:

GM(λ₀) = dim E_{λ₀} = n - rank(A - λ₀I)

这个“n - rank”的公式其实就是秩-零化度定理的直接应用。齐次方程的解空间维度,等于未知数个数减去系数矩阵的秩。这里未知数个数是 n,所以只需要算一个秩就行。

回到前面的例子 A = [[2, 1], [1, 2]]。对 λ = 3,A - 3I = [[-1, 1], [1, -1]],秩是 1,几何重数 = 2 - 1 = 1。对 λ = 1 也一样,几何重数 = 1。两个特征值各自撑起一根直线,恰好在平面上互补,整个平面被两根直线张成。这是最理想的情形。

3.2 几何重数的真正含义是“最多能找到几个线性无关的特征向量”

很多人算完特征值以后就直接开始找特征向量,找到两个就收工。但遇到重根,比如 λ = 2 的代数重数是 2,你至少要确认几何重数是不是也是 2。几何重数 = 2,说明这个特征值下存在两个线性无关的特征向量;几何重数 = 1,说明翻来覆去只能找到一根线,平面上其他方向都会被矩阵“扳弯”。

举一个亏损矩阵的经典例子:

J = [[1, 1], [0, 1]]

特征多项式是 (λ - 1)²,所以 λ = 1 的代数重数是 2。求特征向量:解 J - I = [[0, 1], [0, 0]],方程组是 0·x + y = 0,即 y = 0。所以特征向量只能是 [x, 0]ᵗ 这种形式,几何重数 = 1。也就是说,两个代数重数只换来了一个独立方向。这种矩阵叫“亏损矩阵”,它是特征向量无法张成整个空间的典型。

这类矩阵的特征空间只有一维,不管你把矩阵作用多少次,所有能保持方向的向量永远躺在那条 x 轴上。它像一个只有一条轴能自由转动,另一条轴总是被强行带偏的系统。这就是几何重数和代数重数之间的裂缝。

3.3 几何重数怎么高效率地算

我的建议是:不要每次都把整个特征空间解出来,直接算秩。步骤非常固定:

  1. 构造矩阵 A - λ₀I;
  2. 用高斯消元求它的秩 r;
  3. 几何重数 = n - r。

三步做完,不用解方程组也能知道特征空间维度。真正需要解方程组,是你后续要具体写特征向量的时候。几何重数告诉你“有多少个解向量”,解方程组告诉你“这些解向量具体长什么样”,两件事分开做会清爽很多。

另外要提醒一个经典误区:有人觉得,不同的特征值对应的特征向量张在一起,就组成了全空间。这句话只对“几何重数总和等于 n”的情况成立。如果每一个特征值都满足 GM = AM,那总维数刚好是 n,所有特征向量合起来能构成一组基。一旦某个特征值的 GM < AM,就算把所有特征空间的维数加在一起,也达不到 n,矩阵就缺“方向”了。

4. 几何重数和代数重数的不等式:能不能对角化的试金石

4.1 为什么一定是“≤”而不是其他

核心定理:对于任何一个特征值 λ₀,几何重数 ≤ 代数重数。理解这个不等式有两种层次。

直观层次:代数重数是特征多项式的因式重数,它测量的是“特征值在方程中被重复计数的规模”。几何重数是解空间的真实维数。一个特征值在多项式里占了好几份,但对应的独立方向却没那么多,因为多个方向可能被压缩到极少数几根“不变直线”上。打个比方,代数重数像名额,几何重数像实际到岗人数;名额可以批得多,但到岗总有上限。

严格层次:设 GM(λ₀) = g,即特征空间 E_{λ₀} 里有 g 个线性无关的向量 e₁, ..., e_g。把它们扩充成整个空间的一组基,A 在这组基下的矩阵,前 g 列里除了对角元是 λ₀,其余位置因为 A eᵢ = λ₀eᵢ 而对角线上方全是 0。整个矩阵呈现出块上三角形式,左上角是一块 λ₀I_g。因此它的特征多项式至少带有 (λ - λ₀)ᵍ 因子,所以代数重数 ≥ g。这个证明是教科书标准证法,却很少人愿意写出来,但它恰恰是理解不等式最扎实的一条路。

4.2 等式成立与矩阵可对角化的等价关系

有了不等式,就自然有一个判断规则:一个矩阵可对角化,当且仅当每一个特征值都满足

GM(λ) = AM(λ)

为什么这个条件足够?因为几何重数总和等于 n,说明能找到 n 个线性无关的特征向量,把它们排成矩阵 S 的列,就有 A = SΛS⁻¹。反过来,如果能对角化,那么 S 的每一列都是特征向量,第 λ₀ 对应的列数刚好就是 AM(λ₀),而特征向量的最大线性无关数又是 GM(λ₀),两者必须相等。

实操里最常用的推论是:如果所有特征值互不相同,即每个 AM = 1,且每个 GM 至少是 1(因为特征向量一定存在、特征空间至少一维),所以 GM 只能等于 1,矩阵必然可对角化。大多数考试题走的就是这条捷径。但一旦出现重特征值,就必须老老实实地对比 GM 和 AM,没有捷径。

4.3 判断顺序不对,白算一大堆

我见过很多人在判断一个矩阵能否对角化时,上来就解所有特征向量,然后数个数。效率很低。我的建议顺序是:

  1. 算特征多项式,分解因式,列出每个特征值及其代数重数;
  2. 对每个代数重数 ≥ 2 的特征值,单独算 GM;
  3. 只要有一个 GM < AM,立刻判死刑,不需要再解其他特征向量;
  4. 全部 GM = AM,再回头把特征向量解出来。

这个顺序帮你把计算量压到最低。因为 90% 的问题只需要卡住那个“重根”的几何重数就够了。其余单根根本不用验证,GM 自动等于 1。

这些内容不是书斋里的空谈。判断对角化的能力,直接影响你能不能把一个矩阵写成 SΛS⁻¹,进而影响你能不能快速算矩阵指数 eᴬ、算马尔可夫链的收敛速度、算地图上节点的影响力排序。重数不一致时,矩阵没法对角化,你就得另请“约当标准形”这尊大神。可以说,几何重数与代数重数的差值,就是你未来要对约当块付出的学习成本。

5. 实操中的高频问题与排查方案

5.1 算特征值总是出错,先检查行列式化简

特征方程求错,后面全盘皆输。我总结出三个高频翻车点。

第一,展开 (A - λI) 的行列式时,符号混乱。特别是主对角线上的 aᵢᵢ - λ,每一项都必须保证 aᵢᵢ 和 λ 之间是减号。有人习惯把 A 写成 λI - A,得到行列式 det(λI - A),这其实是特征多项式的另一种约定(首项系数 +1),两种约定都行,但千万别中途混着用。一旦混合,最后得到的多项式可能整体差一个符号,特征值不变,但分解因式时容易让人怀疑人生。

第二,用初等变换提公因式时,只准对行或列做“加法、倍数加、换行”。倍乘行会改变行列式倍数,而且你大概率会忘掉补偿,最后行列式差一个常数倍,根就全乱了。如果你确实非要用数乘来化简,那就要把提出来的系数记到草稿纸最显眼的位置。

第三,三次及以上多项式的因式分解要先“猜根”。有理根定理告诉我们,首一多项式的有理根只可能是常数项的因数。所以拿到 λ³ - 6λ² + 11λ - 6,先试 ±1、±2、±3,一猜一个准。没必要硬用三次求根公式,那个公式工程上几乎没人用。

5.2 为什么实对称矩阵总是这么温柔

结构决定性质。实对称矩阵满足 Aᵀ = A,它有两条让人羡慕的性质:

  • 所有特征值都是实数;
  • 不同特征值对应的特征向量彼此正交。

因此实对称矩阵一定是可对角化的,并且可以由一组标准正交特征向量张成整个空间。这意味着什么呢?在机器学习里,协方差矩阵是实对称的,主成分分析做的就是它的特征分解;图神经网络里很多聚合矩阵被设计成对称归一化的,也是为了让特征值落在可控区间,保证传播过程的稳定性。你几乎不会在实对称矩阵上遇到 GM < AM 的尴尬,规矩到让人感动。

不过要注意,单纯“对称”还不够,还得是“实”。复对称矩阵不一定有这些性质。遇到复矩阵请自动切换到“厄米矩阵”的语境里去,那里的结论才对应成立。这一条很多教材写得很隐晦,我在这里给大家拆穿。

5.3 “亏损矩阵”真的没救吗

像 [[1, 1], [0, 1]] 这种 GM < AM 的矩阵,不能对角化,但还有救。它的归宿是约当标准形。约当标准形由若干个约当块组成,每个块形如:

[[λ, 1, 0], [0, λ, 1], [0, 0, λ]]

约当块里,对角线上是特征值,对角线上方还多了一条 1。正是这些 1 表达了矩阵“想要转动却转动不了”的残余信息。亏损矩阵的几何重数与代数重数之差,决定了需要多少个约当块、每个块有多大。你不需要每次都手算约当标准形,但至少要能认出它的结构,因为矩阵指数、矩阵幂运算、微分方程组的解在亏损情形下全靠约当块来计算。

遇到亏损矩阵,我的建议是先做个标记:这个矩阵“方向缺失”了 d = AM - GM 个维度。这个差值越是大,系统的长期行为就越容易出现多项式增长项,而不是纯指数增长。比如 eᴬᵗ 的表达式里会出现 t、t² 这类因子,这在实际系统里对应着“共振响应”等行为,是控制理论里极其重要的现象。

5.4 一个被低估的观察窗口:迹与行列式

特征值与矩阵的迹、行列式之间有两个著名关系:

tr(A) = 所有特征值之和(重数计入) det(A) = 所有特征值之积(重数计入)

这两个关系不是只用来出填空题的。每次算完特征值,我强烈建议大家用迹和行列式做反向校验。算出来特征值是 2, 2, -1,那迹必须是 3,行列式必须是 -4。差一个符号、差一个数字,立刻回头重算。这是最便宜的自检手段,比任何高级工具都好用。

特别是行列式为零的矩阵,必有一个特征值是 0,对应的特征向量就是齐次方程组的非零解。由这个视角看,矩阵是否可逆、特征值里是否含 0、特征空间是否存在,其实是同一件事的三个侧面。学线代最爽的时刻就是把一个个孤立结论串成一条线,这正是其中之一。

6. 往应用层再走一步:这些概念不是只用来做题的

6.1 动力系统与大特征值主导

回到开头那个迭代场景。假设 x_{k+1} = A x_k,A 有特征值 λ₁、λ₂,且假设 |λ₁| > |λ₂|。分解初始向量 x₀ = c₁v₁ + c₂v₂ 后:

x_k = c₁λ₁ᵏv₁ + c₂λ₂ᵏv₂

因为 |λ₂ / λ₁| < 1,当 k 增大时,第二项相对第一项越来越小。系统最终沿着最“强势”的特征向量方向演化,这个方向叫主导特征向量。这是动力系统的核心直觉:矩阵迭代的长远命运,几乎只由模最大的特征值决定。

我们在图像处理里做迭代式的像素传播算法时,只要迭代矩阵的谱半径小于 1,就能保证收敛,谱半径就是特征值模长的最大值。很多看似无关的工程问题,最后都收敛到了“算谱半径”这一个动作上。

6.2 谱分解与降维的核心逻辑

实对称矩阵被标准正交特征向量张成整个空间,这意味着可以做谱分解:

A = QΛQᵀ

其中 Q 是正交矩阵,Λ 是对角阵。这个公式在降维算法里被反复使用。保留最大的 r 个特征值,丢弃小特征值,得到的 A ≈ Q_rΛ_rQ_rᵀ 就是“低秩近似”。为什么丢小特征值不心疼?因为小特征值对应的方向对矩阵的主要行为贡献微弱,砍掉它们相当于去掉照相机的噪声底纹,只留主体轮廓。主成分分析的核心干的就是这件事,特征值的排名就是信息重要性的排名。

6.3 学习顺序上的补充建议

如果这篇的标题里你已经走到“[5]”,大概是在按部就班啃线代。我的建议是学完特征值以后立刻去学对称矩阵谱分解,然后接奇异值分解。因为 SVD 本质上是对非方阵也成立的“特征值故事”,它把特征向量的概念推广到了不同维度空间之间的映射。一旦你理解了特征值的“拉伸方向”直觉,奇异值、奇异向量、低秩近似这些东西会变得非常自然。

反过来,如果时间紧张,可以暂时放一放约当标准形的严格证明,先记住“亏损矩阵需要约当标准形”,把精力优先花在特征值的几何直觉和谱分解应用上。许多工程领域用到线代的重头戏都在这里,越早建立直觉,后面学习机器学习、网络科学、数值计算就越省力。

我自己当年学这块的时候,一度也觉得代数重数和几何重数只是两个琐碎的计数,直到做马尔可夫链模型时,明明算好了转移矩阵的所有特征值,却发现状态分布收敛不了。回头一查,正是某个特征值出现了 GM < AM 的情况,单纯的特征分解根本做不了。那次之后我才彻底服气:这张不等式推断出的不只是矩阵的结构,更是系统的长期行为能不能“干净地分离”。再后来只要碰到重根,第一反应永远是先验几何重数自然等于代数重数,再去谈别的。经验这东西,果然是用错误喂出来的。最后再给一个很实用的小技巧:拿到任意一个矩阵,先算迹和行列式,再开始拆特征值,拆完用这两个数校验。这会让你的计算准确率立刻上一个台阶。愿你也能享受这种拆穿矩阵灵魂的快乐。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询