两个三阶矩阵,特征多项式一模一样,但一个能对角化,另一个不能。这种场景我讲线性代数时几乎每届都会遇到——学生拿着相同的 ((λ-1)^2(λ-2)) 跑来问:这不就说明它们相似吗?答案是否定的。要严格说清这件事,就必须引入 λ-矩阵的三个核心不变量:行列式因子、不变因子、初等因子。这三个因子是高等代数里判定矩阵相似的完整工具链,也是理解 Jordan 标准形绕不开的必经之路。这篇博文从三个矩阵的对比出发,把这三个因子的定义、计算、关系和应用一次讲透。
1. 为什么需要这三个因子:特征多项式无法区分的相似难题
1.1 两个特征多项式相同的矩阵,却完全不相似
先看两个矩阵:
A = | 1 1 0 | B = | 1 0 0 | | 0 1 0 | | 0 1 0 | | 0 0 2 | | 0 0 2 |它们的特征多项式都是 ((λ-1)^2(λ-2)),特征值都是 1, 1, 2。但仔细看结构,A 的左上角是一个 2 阶 Jordan 块,B 是一个纯对角矩阵。这两个矩阵不相似。
判断依据可以有很多:A 的几何重数——特征值 1 对应的线性无关特征向量只有 1 个,B 有 2 个;也可以算最小多项式,A 的是 ((λ-1)^2(λ-2)),B 的是 ((λ-1)(λ-2))。但问题在于:这些说法都是"从别的理论借来的结论"。如果只允许用矩阵论自身的语言,怎么从原理上把 A 和 B 区分开?
这就需要一个比特征多项式精细得多的不变量系统。行列式因子、不变因子、初等因子正是为这个问题设计的。
1.2 从数字矩阵到 λ-矩阵:相似判定的关键一跃
处理矩阵相似问题,一个非常聪明的做法是不要直接盯着 A 和 B,而是考察它们的特征矩阵(λI - A) 和 (λI - B)。这里 (λ) 是一个未定元,矩阵元素从数变成了多项式,于是进入 λ-矩阵(多项式矩阵)的世界。
λ-矩阵的初等变换包括:交换两行(列)、某行(列)乘以非零常数、某行(列)加上另一行(列)的多项式倍。在此基础上定义相抵(也叫等价):两个 λ-矩阵能通过有限次初等变换互化,就称它们相抵。
高等代数里有一个核心定理:数域上的两个数字矩阵 A 与 B 相似,当且仅当特征矩阵 (λI - A) 与 (λI - B) 相抵。
这个定理的价值在于:把"是否存在可逆矩阵 P"这类抽象问题,转化为"能否通过初等变换互相转化"这种可操作的问题。而初等变换后的标准形,就由我们要讲的三类因子刻画。
1.3 三个因子在整套理论中的位置
很多初学者误以为这三个因子是三个独立对象,其实它们是同一个数学本质的三副面孔:
- 行列式因子:直接从所有 k 阶子式出发,定义最原始,计算最繁琐;
- 不变因子:由相邻行列式因子作商得到,是 Smith 标准形对角线上的元素,性质最好;
- 初等因子:把不变因子分解成不可约因式的方幂,是与 Jordan 块直接对应的"原子"。
三者互相唯一确定,也就是说知道了任意一组,就能推出另外两组。它们回答的核心问题只有一个:两个矩阵到底相不相似?接下来逐个拆解。
2. 行列式因子:从 9 个二阶子式算出的关键差异
2.1 定义与两个重要性质
设 (P(λ)) 是一个 n 阶 λ-矩阵。对于每个 (k = 1, 2, ..., n),把 (P(λ)) 的全部 (k) 阶子式都拿出来,求它们作为多项式的最大公因式,并取首一多项式(最高次项系数为 1),记为 (D_k(λ))。这个 (D_k(λ)) 就叫做 (P(λ)) 的 k 阶行列式因子。约定 (D_0(λ) = 1)。
两个性质需要特别记住:
第一,整除链:(D_k(λ) \mid D_{k+1}(λ))。理由很直观:把每个 (k+1) 阶子式按一行展开,它就能写成若干个 k 阶子式的线性组合,所以所有 k 阶子式的公因式必然整除所有 k+1 阶子式,进而整除它们的最大公因式。
第二,最高阶行列式因子就是行列式:(D_n(λ) = \det P(λ))。对特征矩阵来说,(D_n(λ) = \det(λI - A)) 正是特征多项式。这意味着特征多项式只是整个行列式因子序列里的最后一个,前面的 (D_1, D_2, ..., D_{n-1}) 携带了更精细的相似不变量信息。
2.2 主案例 A:一个也不能漏的二阶子式清单
对矩阵 A 写出特征矩阵:
λI - A = | λ-1 -1 0 | | 0 λ-1 0 | | 0 0 λ-2 |先看一阶行列式因子。所有一阶子式就是 9 个元素:(λ-1, -1, 0, 0, λ-1, 0, 0, 0, λ-2)。因为出现了常数 (-1),与任何多项式都互素,所以它们的最大公因式是 1,于是 (D_1 = 1)。
再看二阶行列式因子。三阶矩阵的二阶子式共有 (\binom{3}{2} \times \binom{3}{2} = 9) 个,需要全部列出。我把非零的几个写出来:
| 行选择 | 列选择 | 子式值 |
|---|---|---|
| 第1、2行 | 第1、2列 | ((λ-1)^2) |
| 第1、3行 | 第1、3列 | ((λ-1)(λ-2)) |
| 第1、3行 | 第2、3列 | (-(λ-2)) |
| 第2、3行 | 第2、3列 | ((λ-1)(λ-2)) |
其余 5 个子式都是 0。
这一步极其容易出错。我第一次算的时候漏掉了第1、3行第2、3列这个子式:
| -1 0 | | 0 λ-2 |它的行列式等于 (-(λ-2))。如果只看行{1,2}和列{1,2}、行{1,3}和列{1,3}、行{2,3}和列{2,3}这三块"看起来像样"的 2×2 块,就会漏掉这个含 (-(λ-2)) 的子式。而它恰恰是决定最终 gcd 的关键。
现在对非零子式求最大公因式:((λ-1)^2)、(-(λ-2))、((λ-1)(λ-2))。因为 (-(λ-2)) 与 (λ-2) 只差常数倍,首一化后就是 (λ-2),而 (λ-2) 与 ((λ-1)^2) 互素,所以整体 gcd 是1。因此:
[ D_1 = 1, \quad D_2 = 1, \quad D_3 = \det(λI-A) = (λ-1)^2(λ-2) ]
第二个坑就是"首一化":(-(λ-2)) 在求 gcd 时要当作 (λ-2) 处理,只差一个常数倍不影响公因式,但如果不把负号处理干净,很容易在心理上忽略这个子式对 gcd 的"拉低"作用。
2.3 对照案例 B:同样特征多项式,D₂ 却不同
对 B 写出特征矩阵:
λI - B = | λ-1 0 0 | | 0 λ-1 0 | | 0 0 λ-2 |这个矩阵非零二阶子式比 A 少很多:
- 第1、2行第1、2列:((λ-1)^2)
- 第1、3行第1、3列:((λ-1)(λ-2))
- 第2、3行第2、3列:((λ-1)(λ-2))
其他二阶子式都为 0。现在 ((λ-1)^2) 和 ((λ-1)(λ-2)) 的最大公因式是(λ-1),于是:
[ D_1 = 1, \quad D_2 = λ-1, \quad D_3 = (λ-1)^2(λ-2) ]
对比 A 和 B:特征多项式(即 (D_3))完全一样,但 (D_2) 一个是 1,一个是 (λ-1)。这就是行列式因子比特征多项式精细的地方——它把矩阵内部结构的信息分层记录了下来。因为行列式因子是 λ-矩阵在初等变换下的不变量,而特征矩阵相抵又等价于矩阵相似,所以立刻可以判定A 与 B 不相似。
3. 不变因子:相邻行列式因子的"纯净增量"
3.1 为什么用相邻比:把重叠因子剥掉
行列式因子序列存在整除链 (D_1 \mid D_2 \mid ... \mid D_n),这意味着 (D_k) 里其实包含了前面所有 (D_1, D_2, ..., D_{k-1}) 的因子。如果直接拿 (D_k) 来分析,信息是冗余的。
更好的做法是作相邻比:
[ d_1(λ) = D_1(λ), \quad d_k(λ) = \frac{D_k(λ)}{D_{k-1}(λ)}, \quad k = 2, 3, ..., n ]
得到的 (d_1(λ), d_2(λ), ..., d_n(λ)) 就是不变因子。因为 (D_k) 和 (D_{k-1}) 都是首一多项式,所以 (d_k) 也是首一多项式,并且满足整除链:
[ d_1(λ) \mid d_2(λ) \mid ... \mid d_n(λ) ]
形象地说,每个 (d_k) 代表行列式因子序列中"新长出来"的那部分因子。这种相邻作商的手法在数学里很常见:与其看总量,不如看增量。
3.2 从行列式因子到不变因子的计算
回到 A。上面已经算出 (D_0 = 1, D_1 = 1, D_2 = 1, D_3 = (λ-1)^2(λ-2)),所以:
[ d_1 = \frac{D_1}{D_0} = 1, \quad d_2 = \frac{D_2}{D_1} = 1, \quad d_3 = \frac{D_3}{D_2} = (λ-1)^2(λ-2) ]
A 的不变因子是 (1, 1, (λ-1)^2(λ-2))。
再看 B。B 的行列式因子 (D_0 = 1, D_1 = 1, D_2 = λ-1, D_3 = (λ-1)^2(λ-2)):
[ d_1 = 1, \quad d_2 = \frac{λ-1}{1} = λ-1, \quad d_3 = \frac{(λ-1)^2(λ-2)}{λ-1} = (λ-1)(λ-2) ]
B 的不变因子是 (1, λ-1, (λ-1)(λ-2))。
到这里,A 和 B 的差异已经从"二阶子式"层面转化为"不变因子序列"层面。还有一个很自然的检验:不变因子的乘积等于特征多项式。A 的 (1 \cdot 1 \cdot (λ-1)^2(λ-2)) 是特征多项式,B 的 (1 \cdot (λ-1) \cdot (λ-1)(λ-2)) 也是。特征多项式相同,只是"乘积信息"相同,但不变因子序列的分配方式不同——这正是特征多项式不足以判定相似的根本原因。
3.3 不变因子与最小多项式、Smith 标准形的关系
不变因子之所以叫"不变因子",是因为它们在 λ-矩阵的初等变换下保持不变。任何一个 λ-矩阵都可以通过初等变换化成对角形:
[ \operatorname{diag}(d_1(λ), d_2(λ), ..., d_n(λ)) ]
其中 (d_i) 就是不变因子。这个对角矩阵称为Smith 标准形。实际计算不变因子时,与其一个个数子式再作商,不如直接对特征矩阵做初等变换化成 Smith 标准形,对角线上一目了然。
另外还有一个很有用的性质:最后一个不变因子 (d_n(λ)) 恰好是矩阵 A 的最小多项式。
验证一下:A 的最小多项式确实是 ((λ-1)^2(λ-2)),等于 (d_3)。B 的最小多项式是 ((λ-1)(λ-2)),也等于它的 (d_3)。这个性质经常用来快速检查计算有没有出错。
4. 初等因子:把不变因子拆成不可约"原子"
4.1 定义:对每个不变因子做不可约分解
不变因子仍然是可以继续分解的多项式。把每个不变因子 (d_i(λ)) 在给定的数域上分解成不可约因式的方幂乘积:
[ d_i(λ) = p_1(λ)^{e_{i1}} p_2(λ)^{e_{i2}} ... p_s(λ)^{e_{is}} ]
其中 (p_j(λ)) 是两两不同的首一不可约多项式,指数 (e_{ij} \ge 0)。由整除链 (d_1 \mid d_2 \mid ... \mid d_n) 可知,对每个固定的 (j),指数序列 (e_{1j} \le e_{2j} \le ... \le e_{nj}) 是单调不减的。
把所有指数大于 0 的因式方幂 (p_j(λ)^{e_{ij}}) 都拿出来(重复的分别计数),得到的就是初等因子组。
这里最容易踩的坑是:同一个不可约因式如果出现在多个不变因子中,它的每个方幂都要算作一个初等因子,不能合并。比如两个不变因子里分别有 (λ-1) 和 ((λ-1)(λ-2)),最后产生的初等因子是三个:(λ-1, λ-1, λ-2),而不是把两个 (λ-1) 合并成 ((λ-1)^2)。
4.2 主案例与对照案例的初等因子
对 A,不变因子是 (1, 1, (λ-1)^2(λ-2))。分解第三个:
[ (λ-1)^2(λ-2) = (λ-1)^2 \cdot (λ-2) ]
前两个都是 1,不产生初等因子。所以 A 的初等因子组是:
[ (λ-1)^2, \quad λ-2 ]
对 B,不变因子是 (1, λ-1, (λ-1)(λ-2))。分解:
[ d_2 = λ-1, \quad d_3 = (λ-1)(λ-2) ]
所以 B 的初等因子组是:
[ λ-1, \quad λ-1, \quad λ-2 ]
特征值 1 在 A 里对应一个平方初等因子,在 B 里对应两个一次初等因子。这就是两个矩阵内在结构差异的"原子级"体现。
4.3 每个初等因子对应一个 Jordan 块
初等因子的最大价值在于和 Jordan 标准形直接挂钩。规则只有一条:
初等因子 ((λ - λ_0)^k) 对应一个 k 阶 Jordan 块 (J_k(λ_0))。
把每个初等因子变成对应 Jordan 块,再拼成一个分块对角矩阵,就是这个数字矩阵的 Jordan 标准形。
对 A:初等因子 ((λ-1)^2) 对应 (J_2(1)),初等因子 (λ-2) 对应 (J_1(2))。拼起来:
| 1 1 0 | | 0 1 0 | | 0 0 2 |正好就是 A 自己。对 B:两个 (λ-1) 分别对应两个一阶块 ([1]),(λ-2) 对应 ([2]),拼起来就是 (\operatorname{diag}(1,1,2)),正好是 B 自己。
所以初等因子不仅回答了"是否相似",还直接回答了"相似成什么样"。这也是 Jordan 标准形理论的骨架。
5. 三因子互相唯一确定:一个对比表看懂相似判定
5.1 三者的换算关系与恢复方法
三个因子之间可以互相推导,这是整套理论自洽的保证。
从行列式因子到不变因子,用相邻比:
[ d_k = \frac{D_k}{D_{k-1}}, \quad D_0 = 1 ]
反过来,从不变因子到行列式因子,直接连乘:
[ D_k = d_1 , d_2 , ... , d_k ]
从不变因子到初等因子,做不可约分解即可。从初等因子恢复不变因子则稍微复杂一点,方法如下:把同一个不可约因式的所有幂指数按降序排列(不足的补 0),对齐后每一行相乘,就得到不变因子(从大到小写),剩下的位置补 1。
用 B 验证一遍。B 的初等因子:(λ-1) 的指数序列是 ([1, 1]),(λ-2) 的指数序列是 ([1]),补 0 后是 ([1, 0])。对齐:
| 最大指数 | 次大指数 | |
|---|---|---|
| (λ-1) 的指数 | 1 | 1 |
| (λ-2) 的指数 | 1 | 0 |
最大指数一栏相乘:((λ-1)^1(λ-2)^1 = (λ-1)(λ-2)),这是 (d_3);次大指数一栏:((λ-1)^1 \cdot (λ-2)^0 = λ-1),这是 (d_2);再补 (d_1 = 1)。恢复成功。
5.2 A 与 B 的因子全览对比表
把 A 和 B 的所有数据放在一个表里,差异一目了然:
| 不变量 | A(Jordan 块) | B(对角矩阵) |
|---|---|---|
| 特征多项式 | ((λ-1)^2(λ-2)) | ((λ-1)^2(λ-2)) |
| 行列式因子 (D_1, D_2, D_3) | (1, 1, (λ-1)^2(λ-2)) | (1, λ-1, (λ-1)^2(λ-2)) |
| 不变因子 (d_1, d_2, d_3) | (1, 1, (λ-1)^2(λ-2)) | (1, λ-1, (λ-1)(λ-2)) |
| 初等因子组 | ((λ-1)^2, λ-2) | (λ-1, λ-1, λ-2) |
| 最小多项式 | ((λ-1)^2(λ-2)) | ((λ-1)(λ-2)) |
| Jordan 标准形 | (J_2(1) \oplus J_1(2)) | (\operatorname{diag}(1,1,2)) |
这张表特别能说明问题:特征多项式这一行完全一样,但下面每一行都不同。每一行都可以作为"不相似"的判定证据,而它们本质上是同一个信息的不同表达。
5.3 判定相似的完整操作步骤
遇到"判断两个矩阵 A 和 B 是否相似"的题目,按下面这套流程走基本不会乱:
- 先看特征多项式,不同则直接判定不相似;
- 特征多项式相同,继续求不变因子(或任意一组因子);
- 求法:对 (λI - A) 和 (λI - B) 分别做初等变换化成 Smith 标准形,读对角线上的不变因子;
- 两组不变因子完全相同,则相似;否则不相似。
用不变因子还是行列式因子、初等因子,效果完全一样,因为它们互相唯一确定。实际做题时不变因子最方便,因为 Smith 标准形可以直接算出来。
6. 行列式因子计算中的两个坑:漏子式与首一约定
6.1 我犯过的错误:漏掉 (-(λ-2)) 导致 D₂ 多算了一个因子
前面算 A 的 (D_2) 时,我强调了一定不能漏第1、3行第2、3列的子式 (-(λ-2))。这不是危言耸听,因为一开始我确实漏了。
当时我只盯着"看起来有结构"的子式:第1、2行第1、2列是 ((λ-1)^2),第1、3行第1、3列是 ((λ-1)(λ-2)),第2、3行第2、3列是 ((λ-1)(λ-2))。这三个子式的 gcd 是 (λ-1)。算出 (D_2 = λ-1) 后,继续推不变因子得到 (1, λ-1, (λ-1)(λ-2)),初等因子得到 (λ-1, λ-1, λ-2),对应的 Jordan 形是 (\operatorname{diag}(1,1,2))。
但这个结论和 A 本身是 (J_2(1) \oplus J_1(2)) 直接矛盾——最小多项式一个是 ((λ-1)^2(λ-2)),一个是 ((λ-1)(λ-2))。当时我拿着这个矛盾来回检查了很多遍,最后才发现是二阶子式漏了一项。第1、3行第2、3列的子式:
| -1 0 | | 0 λ-2 |行列式是 (-(λ-2)),不是 0。它一旦加入 gcd 的计算,因为 (λ-2) 与 ((λ-1)^2) 互素,整个 gcd 立刻被拉到 1,所有后续结论全部修正。
这个教训值得拿出来说:计算行列式因子时,所有 (\binom{n}{k}^2) 个 k 阶子式都要过一遍,不能凭直觉筛选。直觉筛选很容易漏掉那些"角落里的交叉项",而交叉项往往就是决定 gcd 的关键。
6.2 最大公因式的取法:首一约定与常数倍
求最大公因式时有两个细节必须注意。
一是首一约定。行列式因子定义为"首一多项式"的最大公因式。子式算出来可能是 (-(λ-2))、(-λ(λ-1)) 这类带负号的式子,求 gcd 时负号可以直接忽略,最后结果写成正的最高次项系数为 1 的形式。很多人算 (D_1) 时遇到元素里面有负数,就不知道 gcd 怎么取了,其实常数因子在求最大公因式时完全不重要,重要的是多项式因子部分。
二是零子式的处理。零多项式被认为是任何多项式的倍数,所以在求最大公因式时,零子式不贡献任何约束,直接跳过即可。如果所有 k 阶子式都为零,则 (D_k = 0),这在满秩特征矩阵中不会出现,但在一些特殊块结构中可能出现,需要留意。
还一个常见误区:以为 (D_k) 一定等于"某个看起来最复杂的子式"。不是的,(D_k) 是所有 k 阶子式的公共因子,通常比任何单个子式都简单。矩阵的 k 阶子式越多样化,gcd 就越容易被"拉低"。
6.3 学习路径建议:从 Jordan 形反向验证
最后给正在学这部分内容的人一些建议。
如果你觉得三个因子概念太多、记不住,可以试试"反向学习法":先写一个 Jordan 形矩阵,然后从这个矩阵反推它的不变因子和行列式因子。
具体操作分四步:先写出 Jordan 形 J;再根据"初等因子 ↔ Jordan 块"写出初等因子;用初等因子恢复不变因子;用不变因子连乘得到行列式因子。花十分钟走一遍这条路,三个因子的关系会比背十遍定义都清楚。
正向计算容易出错,反向验证可以立刻发现问题。比如你算完 (D_2) 以后,顺手用 (D_1 = d_1)、(D_2 = d_1 d_2)、(D_3 = d_1 d_2 d_3) 检查一下,如果乘积不等于特征多项式,或者最后一个不变因子不等于最小多项式,说明中间某一步算错了。
我个人在实际操作中的体会是:行列式因子的定义虽然最"原始"、计算量最大,但它反而是最容易理解整套理论的入口。只要耐心把一两个例子里所有子式列全,行列式因子、不变因子、初等因子这三者的逻辑链条会变得非常清晰。之后再碰到相似判定、Jordan 标准形、有理标准形的问题,心里就有了底。