矩阵秩与特征值个数:非零特征值为何是秩的下界?
2026/9/17 3:51:28 网站建设 项目流程

先聊一个我在教学和面试里经常被问到的问题:一个 n 阶方阵的秩,和它非零特征值的个数,到底能不能画等号?网上很多回答会直接说"非零特征值有几个,秩就是几",但这句话在一般矩阵里是错的。真正的关系比这个更微妙:非零特征值的个数是秩的一个下界,而不是上界。想要彻底弄清楚这件事,得把秩和特征值拆开看,再把它们拼在一起。这篇文章我打算从几何直觉、数学证明、实际应用三个角度把这两兄弟彻底捋一遍,最后附上可以照着跑的 Python 验证代码。

1. 秩到底在描述什么:矩阵的"有效维度"

1.1 从线性方程组看秩的本质

秩这个概念,很多教材是从初等变换定义的:矩阵通过行变换化成行最简形,非零行的个数就是秩。这个定义够严格,却缺乏直觉。我更愿意把秩理解为"矩阵作为线性映射,在输出空间里张开的有效维度"。

以方程组 Ax = b 为例,A 是一个 m×n 矩阵,未知量有 n 个。解的结构里有一个非常关键的结论:如果 A 的秩是 r,那么齐次方程组 Ax = 0 的解空间维数就是 n - r。这句话能解释很多现象:为什么 3×3 的矩阵秩为 1 时,Ax = 0 的解空间是二维的?因为所有行向量其实都挤在同一条直线上,本质上只提供一个有效的约束方程,另外两个约束是重复信息,自由变量自然就是 n - r = 2 个。

如果把矩阵看成一个"压缩器",秩就是压缩之后剩下维度的个数。三维空间里的一个正方体,如果被一个秩 1 矩阵作用,最终所有向量都会被压到一条直线上,这条直线就是它"有效维度 = 1"的体现。秩为 0 的矩阵只有零矩阵,因为它把整个空间压成了原点。

1.2 手工求秩的操作流程

判断秩最稳的方式是高斯消元。我拿一个具体例子走一遍:

矩阵 A = [[1, 2, 3], [2, 4, 6], [3, -1, 2]]。

第二步减去两倍的第一个,第三行减去3倍的第一个: A = [[1, 2, 3], [0, 0, 0], [0, -7, -7]]

交换第二行和第三行,得到: [[1, 2, 3], [0, -7, -7], [0, 0, 0]]

非零行有两行,秩就是 2。这里有个容易被忽略的检验技巧:行秩等于列秩,这是矩阵理论里最漂亮的结论之一。也就是说,你把矩阵转置后再做行化简,得到的非零行数也会是 2。如果算出来不一致,多半是中间某一步的加减乘除出了问题。

初等行变换其实比很多人想象中宽松:允许行交换、某行乘以非零常数、某行加上另一行的倍数。这三种操作都不改变行空间,所以非零行的数量是稳定的。

1.3 秩的边界条件与典型误判

需要记住几个边界情况。零矩阵的秩是 0,n 阶单位矩阵的秩是 n。矩阵的秩不会超过行数和列数的较小值,如果行数小于列数,秩最大也只能达到行数,此时矩阵必然有非平凡零空间。

实际计算中我还吃过一个亏:数值环境下"秩"非常脆弱。一个满秩矩阵,只要对某个元素施加一个微小的浮点扰动,逻辑上并不会改变秩,但数值上可能让奇异值变得几乎为零。所以在工程里判断秩,通常不是看精确等于多少,而是用一个阈值去截断:小于阈值的奇异值一律当成零。NumPy 中的numpy.linalg.matrix_rank默认就带了一个基于数值精度的容差,这个设计是有道理的。

2. 特征值:矩阵在特定方向上的"伸缩系数"

2.1 特征方程与几何含义

特征值和秩最大的不同,在于特征值天然带着"方向"的概念。对于一个方阵 A,如果存在非零向量 v 和标量 λ,满足 Av = λv,那么 v 就是特征向量,λ 就是特征值。这个式子翻译成人话:矩阵作用在这个向量上,不会改变它的方向,只会按比例把它拉长或缩短。

寻找特征值需要解特征方程 det(A - λI) = 0。为什么非要行列式等于 0?因为 (A - λI)v = 0 要有非零解,意味着 A - λI 不可逆,也就是行列式为 0。这个逻辑链条也是后面理解秩与特征值关系的核心,一定要把它刻在脑子里。

对 2×2 矩阵特征方程能写成非常顺手的形式:λ² - tr(A)λ + det(A) = 0。举个例子,A = [[0, 1], [1, 0]],迹是 0,行列式是 -1,特征方程就是 λ² - 1 = 0,特征值为 1 和 -1。它有对应特征向量 [1, 1] 和 [1, -1],一个方向被放大一倍,另一个方向被反转。

2.2 特殊结构的特征值速取

不同结构的矩阵,特征值的获取难度差异很大:

  • 上三角矩阵和下三角矩阵:特征值就是主对角线上的元素。这个性质非常实用,因为很多数值算法会先把矩阵变换成上三角形式,再做特征值提取。
  • 相似矩阵 B = P⁻¹AP 与 A 有相同的特征值。这解释了为什么"坐标系换个基"不会改变矩阵的本质。
  • 正交矩阵的特征值模长都是 1。单位正交变换只改变方向,不改变长度,所以特征值只可能落在复平面的单位圆上。
  • 实对称矩阵的所有特征值都是实数,这个结论让它在实际工程里特别受欢迎。

2.3 数值上为什么别硬解特征多项式

很多初学者拿到特征值问题,第一反应是写出特征多项式,再求根。这个方法理论上没错,数值上却是灾难。威尔金森多项式就是个著名警告:一个看似良好的 20 次多项式,系数只要产生极其微小的扰动,根的分布就会面目全非。高次多项式的求根问题对舍入误差极其敏感。

工程里常用的做法是幂迭代、QR 迭代这类方法,它们不显式构造特征多项式,而是通过迭代让矩阵逐步逼近上三角形式,从而直接读到对角元素作为特征值。另一个实用建议是:如果矩阵是实对称的,优先用专门的对称矩阵求解器,比如 NumPy 的eigvalsh,它的稳定性和速度都明显优于通用的eigvals

3. 秩和特征值之间真正成立的数学关系

3.1 从零特征值说起

秩和特征值的交汇点,其实集中在零特征值上。一个 n 阶方阵不可逆,等价于它的行列式为 0,等价于 0 是它的特征值,也等价于它的秩小于 n。这四个说法是环环相扣的。

稍微精确定义一下:0 作为特征值,有一个"代数重数"和一个"几何重数"。代数重数指特征多项式中 (λ - 0) 这个因子的次数,也就是说,把矩阵化简成上三角或若当标准型后,对角线上 0 出现的次数。几何重数则是 λ = 0 对应的特征子空间的维数,也就是齐次方程组 Ax = 0 的解空间维数。对于任意特征值,几何重数都小于等于代数重数,这是线性代数里的核心不等式之一。

3.2 非零特征值数量与秩的不等式

现在可以证明那条关键结论了。设 n 阶矩阵 A 的秩是 r,那么 Ax = 0 的解空间维数是 n - r。这个维度同时是 0 特征值的几何重数。因为几何重数不超过代数重数,所以 0 特征值的代数重数至少是 n - r。把"至少"这句话翻过来理解:矩阵最多只有 r 个非零特征值(按代数重数计)。

所以,正确结论是:非零特征值的个数(算重复数)≤ 秩。不是"非零特征值几个秩就几",而是"秩至少是这么多"。我用一个反例说明为什么等号不一定取到。考虑矩阵

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

它的行空间由 (0,1,0) 和 (0,0,1) 张成,秩是 2。但它的特征多项式是 λ²(λ - 1),特征值是 0、0、1,非零特征值只有 1 个。秩 2 严格大于非零特征值个数 1。

3.3 什么时候等号成立

等号能不能取到,取决于矩阵是否可对角化。当矩阵可对角化时,所有特征值的几何重数都等于代数重数,0 的几何重数就是 n - r,同时 0 的代数重数也等于 n - r,于是非零特征值个数恰好等于 r。

实对称矩阵一定可以对角化,而且能通过正交矩阵对角化。这是特征值问题里最甜的果实。回归分析、主成分分析、图网络里的大量矩阵都是对称矩阵,所以这些领域里经常能听到"非零特征值个数等于秩"这样的表述。但加上"对称矩阵"这个前提,这句话才严格成立。

对于一般矩阵,若当标准型里的幂零块会让 0 特征的代数重数超过几何重数,秩因此会比非零特征值个数更大。

3.4 SVD 把关系补完整

有一个概念能把这些关系描述得干干净净,就是奇异值分解。对任意 m×n 矩阵 A,非零奇异值的个数始终等于秩,而且奇异值永远是实数且非负的,这一点比特征值更容易处理。

奇异值和特征值的关系也很直接:AᵀA 的特征值就是 A 的所有奇异值的平方。如果是实对称矩阵,奇异值等于特征值的绝对值。换句话说,特征值携带"方向"信息,还可能带正负;奇异值只关心"大小",丢掉符号。工程里判断矩阵秩时,最可靠的习惯其实是计算奇异值,再看它降到什么尺度,这也是很多语言库内部实现matrix_rank的原理。

4. 拿这两个概念解决问题的典型场景

4.1 判定可逆性和线性系统解的结构

判断 n 阶方阵是否可逆,有两条平行的路径。路径一:算行列式或者对高斯消元看秩是否等于 n。路径二:看特征值是否全不为 0。两者的信息量并不完全一样。秩路径告诉你"矩阵是否满秩",但不说方向;特征值路径还能告诉你"哪个方向出了问题",比如某个特征值接近 0,对应的方向就是系统最容易"塌陷"的方向。

数值计算里有个更实用的中间地带:条件数。条件数可以定义为最大奇异值除以最小奇异值,或者最大特征值模除以最小特征值模。条件数很大时,矩阵虽然在数学上可逆,解出来的结果也极其不稳定。这就是为什么实际工程里我不只看秩,还看特征值或奇异值的分布。

对 Ax = b 这类问题,秩决定了解的结构:无解、唯一解、无穷多解。特征值则影响迭代求解的收敛速度。共轭梯度法等迭代方法的收敛速度,很大程度上取决于系数矩阵特征值的聚集程度,特征值越集中,收敛越快。这正好体现了秩是"离散结构",特征值是"连续定量"。

4.2 幂、递推与稳定性分析

再往下看,特征值在矩阵幂和递推分析里几乎是绕不开的。假设 x_{k+1} = A x_k,系统迭代 k 步后是 x_k = Aᵏ x₀。如果 A 能对角化,Aᵏ 的特征值就是原特征值的 k 次方。于是判断"系统最终是否收敛到 0"就变成了判断所有特征值的模是否小于 1,也就是矩阵的谱半径是否小于 1。

谱半径这个指标,在网上书里经常和范数混在一起。这里要特意提醒一下:谱半径是特征值模的最大值,而算子范数通常大于等于谱半径。所以判断收敛性,不能只看某个具体范数,要看谱半径。这一步是最容易翻车的。实际系统里如果 A 是转移矩阵,特征值最接近 1 的那个方向,就是系统"慢吞吞"收敛的部分,这个方向往往也是业务里最关心的主模式。

4.3 PCA 与数据降维中的秩检查

主成分分析是我接触最多的降维工具,它和特征值的关系也最直观。设数据为 X,通常先做中心化,再计算协方差矩阵 C = XᵀX / (n-1)。协方差矩阵是对称半正定矩阵,特征值全是非负实数。每个特征值对应主成分方向上的方差,特征值越大,这个方向携带的信息越多。

这里有一个非常关键但经常被轻视的准备步骤:检查数据矩阵的秩。如果样本量小于特征维度,或者存在多重共线性,协方差矩阵会变成奇异矩阵,某些特征值直接等于 0。这时如果贸然做 PCA,会出现"零方差主成分",结果看起来灯红酒绿,其实毫无意义。正确的做法是先用奇异值分解检查数据秩,决定实际可用的主成分数量,或者应用正则化/收缩方法。

还有个经验法则:PCA 中"主成分贡献率"就是特征值占总特征值之和的比例。秩只能告诉你哪些维度"完全没用",特征值排序却告诉你哪些维度"最有价值"。这是两者最生动的分工。

5. 用代码把这几条关系按实打实地验证一遍

5.1 NumPy 最小复现

理论基础走得差不多了,直接看代码。我用 Python 造几个矩阵,把上面说的结论逐条验证。

import numpy as np # 例1:幂零块 + 单位块 A = np.array([ [0, 1, 0], [0, 0, 0], [0, 0, 1] ], dtype=float) print("rank(A) =", np.linalg.matrix_rank(A)) print("eigvals(A) =", np.linalg.eigvals(A)) # 例2:实对称矩阵 B = np.array([ [2, 1], [1, 2] ], dtype=float) print("rank(B) =", np.linalg.matrix_rank(B)) print("eigvals(B) =", np.linalg.eigvals(B)) # 例3:随机满秩矩阵 rng = np.random.default_rng(42) C = rng.normal(size=(4, 4)) print("rank(C) =", np.linalg.matrix_rank(C)) print("num nonzero eigvals =", np.sum(np.abs(np.linalg.eigvals(C)) > 1e-12))

例 1 的输出会严格展示刚才那句话:rank = 2,而特征值里面只有一个非零(另外两个是 0),非零特征值个数 1 < 秩 2。例 2 是对称矩阵,特征值 1 和 3,非零特征值个数等于秩。例 3 是随机矩阵,大概率满秩,非零特征值个数也等于维度。

需要注意的是"非零"在浮点数环境里怎么定义,别写== 0,要用绝对值小于阈值的逻辑。

5.2 特征值数值计算的坑

最后分享几个我踩过很多次的数值坑。第一,求特征值永远不要让det(A - λI)以符号形式展开到高次多项式再求根,稳定性太差。用矩阵分解库会可靠得多。第二,对于非对称矩阵,特征值对扰动可能极其敏感。若当块的微小位移,会让原本全为 0 的特征值变成模约为 0.001 的小数,肉眼以为"很多非零特征值",实际上它们本质上是零。第三,实对称矩阵尽量用eigvalsh,它能保证返回实数值,而通用的eigvals可能因为舍入误差返回一对带极小虚部的复数,徒增判断烦恼。

我在实际工作中还有一个习惯:拿到矩阵先算奇异值,再看秩。奇异值天然带尺度信息,一目了然地告诉你能切割到哪里。特征值适合做模式分析、稳定性判断,但从"这个矩阵到底有多少有效维度"这个问题出发,奇异值比特征值更可靠,因为它在任何形状的矩阵上都成立,不用假设方阵、不用假设可对角化。

这四个字——特征值、秩——在数学里密不可分,却各有分工。秩回答的是"有效性",特征值回答的是"方向与大小"。真正把这两套语言混用起来,才算是走出了课本,进入解决实际问题的阶段。

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

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

立即咨询