行列式因子、不变因子、初等因子到底啥关系?一文彻底搞懂
如果你正在学矩阵论或者高等代数大概率会在某一章同时撞见三个名字高度相似的概念行列式因子、不变因子、初等因子。不少人学到这儿都会心里一紧因为这三个东西长得太像又总是结伴出现今天记住了明天又混了。这篇内容就来把它们彻底拆开讲清楚各自怎么定义、怎么计算、彼此之间怎么转换以及它们在约当标准形那边到底有什么用。无论你是期末备考、考研冲刺还是自学补课只要把这条线捋顺后面学什么都会顺手很多。先说一句大实话这三个因子不是三个独立的新概念它们本质上是同一个对象在不同观察角度下的三种呈现方式。只要抓住一条主线和一组整除关系整个知识块就能像多米诺骨牌一样推下来。下面我从头开始把这套体系一点点搭起来。1. 先搞明白这三个东西到底在研究什么问题1.1 一切从“两个矩阵是否相似”说起在线性代数里最常遇到的问题是两个数字矩阵 (A) 和 (B)它们是不是相似的也就是说是否存在一个可逆矩阵 (P)使得 (B P^{-1}AP)这个问题不是凭空来的。很多实际计算——比如解微分方程组、求矩阵的幂、做矩阵分解——最后都归结为把矩阵化简成某种“标准形”也就是约当标准形。而判断两个矩阵相似最核心的工具不是直接解 (P)而是看它们对应的 (\lambda)-矩阵是否“相抵”。把特征矩阵拿进来事情就变得清晰了[ \lambda I - B P^{-1}(\lambda I - A)P ]如果 (A) 和 (B) 相似那么 (\lambda I - A) 和 (\lambda I - B) 就可以通过初等变换互相转化。反过来也对如果两个 (\lambda)-矩阵相抵那么它们对应的数字矩阵相似。所以判断数字矩阵是否相似等价于研究 (\lambda)-矩阵在整个初等变换过程中的不变量。这时候行列式因子、不变因子、初等因子就登场了。它们是 (\lambda)-矩阵在相抵意义下的完整不变量系统换句话说只要这三个“因子”对上了两个 (\lambda)-矩阵就一定相抵对不上就一定不相抵。1.2 三个因子各自的定位这三个因子都从不同侧面刻画同一个 (\lambda)-矩阵的内禀结构我打个比方帮助你理解把 (\lambda)-矩阵想象成一栋房子。行列式因子是“从不同尺寸的窗户观察房子”一扇窗看到了整体轮廓几扇窗组合起来看到了墙体结构。你把所有 (k) 阶子式拿来求最大公因式得到的就是第 (k) 个行列式因子。不变因子是“房子的施工图纸”图纸上画着房子最终的标准化结构也就是经过初等变换后 (\lambda)-矩阵能化成的最简形式——Smith 标准形对角线上的那些多项式。初等因子是“房子的基本建材清单”把图纸上的每个构件拆成不可再分的零件一列出所有因式的幂次最后告诉你这栋房子到底由哪些“标准件”拼起来。三个视角各有侧重但它们之间有一条非常清晰的数学通道那就是整除链。1.3 贯穿始终的一条整除链对于 (n) 阶 (\lambda)-矩阵设它的不变因子为[ d_1(\lambda), d_2(\lambda), \ldots, d_n(\lambda) ]那么它们一定满足[ d_1(\lambda) \mid d_2(\lambda) \mid \cdots \mid d_n(\lambda) ]也就是每个不变因子都能整除后一个。这条整除链是整个理论的骨架几乎所有计算和验证都围着它转。行列式因子 (D_k(\lambda)) 与不变因子的关系是[ D_k(\lambda) d_1(\lambda)d_2(\lambda)\cdots d_k(\lambda) ]也就是说前 (k) 个不变因子的乘积恰好等于第 (k) 个行列式因子。这不只是公式更是理解三者关系的钥匙行列式因子是累积量不变因子是增量。2. 行列式因子从所有 k 阶子式里抓最大公因式2.1 定义到底在说什么对于 (\lambda)-矩阵 (A(\lambda))它的第 (k) 个行列式因子(D_k(\lambda)) 定义为所有 (k) 阶子式的首一最大公因式同时约定 (D_0(\lambda) 1)。这里有两个关键词“所有 (k) 阶子式”和“首一最大公因式”。“所有 (k) 阶子式”意味着要遍历矩阵中所有可能的 (k) 行 (k) 列取完行列式后得到一批多项式。“首一最大公因式”则要求最终得到的公因式最高次项系数必须是 1不能留一个 (2) 或者 (-1) 在前面。举一个最简单的例子。如果矩阵中某个元素是非零常数比如 (5)那么所有一阶子式的最大公因式就已经没有变量因子了直接得到 (D_1(\lambda) 1)。这类观察在后面可以大幅加快计算速度。2.2 计算策略不要真的把所有子式都求一遍很多初学者一听到“所有 (k) 阶子式”就直接头大因为一个 (4) 阶矩阵的三阶子式个数是 (\binom{4}{3} \times \binom{4}{3} 16) 个真一个个求既不现实也不必要。正确做法是先找候选因子再验证整除性。具体思路分三步先找出几个“结构简单”的 (k) 阶子式比如保留对角块、保留某些稀疏行算出它们的行列式。这些结果会告诉你最大公因式里必须含哪些因子。再看是不是所有其他子式都能被这个候选整除。这一步通常靠观察因式构成来完成不需要真的展开每一个行列式。最后把候选因子首一化得到 (D_k(\lambda))。有经验的人拿到一个 (\lambda)-矩阵会先做初等变换把它尽可能简化然后再求行列式因子。因为初等变换不改变行列式因子所以简化后的矩阵和原矩阵在因子层面完全等价。2.3 一个完整的计算示例来看一个虽然是对角矩阵、但很容易让人看走眼的例子[ B(\lambda) \begin{pmatrix} \lambda - 1 0 0 \ 0 (\lambda - 1)(\lambda - 2) 0 \ 0 0 (\lambda - 1)^2 \end{pmatrix} ]如果直接看对角元素会以为不变因子就是这三个对角元其实不对。因为不变因子必须满足整除链而 ((\lambda - 1)(\lambda - 2)) 并不整除 ((\lambda - 1)^2)所以不能直接抄答案。正确的路径是先求行列式因子。先看一阶子式也就是矩阵的三个对角元。它们的最大公因式显然是[ D_1(\lambda) \lambda - 1 ]再求二阶子式。这个矩阵只有三个非零二阶子式就是对角元素两两相乘[ (\lambda - 1)^2(\lambda - 2), \quad (\lambda - 1)^3, \quad (\lambda - 1)^3(\lambda - 2) ]它们的最大公因式是[ D_2(\lambda) (\lambda - 1)^2 ]最后看三阶子式也就是整个矩阵的行列式[ D_3(\lambda) (\lambda - 1)^4(\lambda - 2) ]到这里行列式因子全部求完。注意整个过程我没有做任何初等变换纯粹靠最大公因式的定义在推这反而是最稳的做法。提示求行列式因子时时刻记得结果必须是首一多项式。如果你写出来的因式是 (-\lambda 1)要先把负号提走变成 (\lambda - 1)。3. 不变因子行列式因子一步之遥但整除链才是核心3.1 定义与最稳妥的计算方式不变因子的定义非常简短设 (D_k(\lambda)) 是 (\lambda)-矩阵的第 (k) 个行列式因子那么第 (k) 个不变因子为[ d_k(\lambda) \frac{D_k(\lambda)}{D_{k-1}(\lambda)} ]这个定义看起来就是把相邻两个行列式因子做除法。因为行列式因子本身就有“累积”的含义所以做商之后得到的正是“增量”部分。继续用刚才的矩阵 (B(\lambda))我们已经算出[ D_1(\lambda) \lambda - 1, \quad D_2(\lambda) (\lambda - 1)^2, \quad D_3(\lambda) (\lambda - 1)^4(\lambda - 2) ]所以[ d_1(\lambda) \lambda - 1 ][ d_2(\lambda) \frac{(\lambda - 1)^2}{\lambda - 1} \lambda - 1 ][ d_3(\lambda) \frac{(\lambda - 1)^4(\lambda - 2)}{(\lambda - 1)^2} (\lambda - 1)^2(\lambda - 2) ]于是不变因子就是[ \lambda - 1, \quad \lambda - 1, \quad (\lambda - 1)^2(\lambda - 2) ]这次结果满足整除链(\lambda - 1 \mid \lambda - 1 \mid (\lambda - 1)^2(\lambda - 2))。前面矩阵的对角元是 ((\lambda - 1), (\lambda - 1)(\lambda - 2), (\lambda - 1)^2)但真正的不变因子里 ((\lambda - 1)(\lambda - 2)) 这一项消失了被拆开重新组合成了 ((\lambda - 1)) 和 ((\lambda - 1)^2(\lambda - 2))。这就是为什么不能“看对角元直接读结果”的原因。3.2 为什么叫“不变”因子“不变”指的是在 (\lambda)-矩阵的初等变换下保持不变。两个 (\lambda)-矩阵相抵当且仅当它们的不变因子完全相同。这一点是整个理论的基石也是你判断两个矩阵是否相似的最小二乘法先算它们特征矩阵的不变因子完全一致就相似不一致就一定不相似。你可以把不变因子想象成人的指纹。脸可以化妆发型可以变身高可以靠鞋跟垫起来但指纹不变。(\lambda)-矩阵做各种初等变换形式上可以千变万化但内部的不变因子就像一个不可磨灭的标记。3.3 Smith 标准形直接读出不变因子的捷径虽然用除法求不变因子很稳但实际操作中还有一条更直观的路径通过初等变换把 (\lambda)-矩阵化成 Smith 标准形。Smith 标准形是一个对角矩阵[ \begin{pmatrix} d_1(\lambda) \ d_2(\lambda) \ \ddots \ d_n(\lambda) \end{pmatrix} ]其中每个 (d_i(\lambda)) 都是首一多项式并且满足整除链。这个对角线上的多项式就是所有不变因子。所以如果你能顺利地把一个 (\lambda)-矩阵通过初等行变换和初等列变换化成 Smith 标准形不变因子直接抄下来就行。这种方法的好处是“所见即所得”坏处是初等变换的过程容易出错。我的建议是低阶矩阵直接试着化标准形高阶矩阵优先用行列式因子除一除两条路径可以互相验算如果结果不一致一定是你其中某一步算错了。4. 初等因子把不变因子“分解”成不可再分的零件4.1 定义与列举规则初等因子的定义是把每个不变因子分解成数域 (\mathbb{P}) 上不可约因式的方幂去掉所有常数因子和 1 本身剩下的全体不可约因式方幂就构成该 (\lambda)-矩阵的初等因子组。这里有两个容易忽略的规则。第一同一个因式出现多次要重复列出。比如不变因子是[ d_1 \lambda - 1, \quad d_2 \lambda - 1, \quad d_3 (\lambda - 1)^2 ]那么初等因子组是[ \lambda - 1, \quad \lambda - 1, \quad (\lambda - 1)^2 ]第二个 (\lambda - 1) 不能省略。因为两个一阶约当块和一个二阶约当块是完全不同的结构计数不能合并。第二初等因子组与数域有关。比如前面例子里的 (\lambda^2 1)在实数域上已经是不可约多项式但在复数域上还能继续分解成 ((\lambda - i)(\lambda i))。所以做题时先确认讨论的数域再决定分解到哪一步。回到上面那个矩阵 (B(\lambda))不变因子是[ \lambda - 1, \quad \lambda - 1, \quad (\lambda - 1)^2(\lambda - 2) ]拆开后初等因子组为[ \lambda - 1, \quad \lambda - 1, \quad (\lambda - 1)^2, \quad \lambda - 2 ]4.2 初等因子 秩才能唯一确定不变因子一个非常重要的易错点来了初等因子组本身不能唯一决定不变因子必须再配合矩阵的秩。为什么因为不变因子的个数等于 (\lambda)-矩阵的阶数也就是它的行数或列数而其中真正非 1 的只有前 (r) 个其中 (r) 是矩阵的秩。剩余的 (n - r) 个不变因子全是 1。初等因子组只提供“非 1 部分”的信息它不告诉你 1 有多少个。举个例子。初等因子组是[ \lambda - 1, \quad (\lambda - 1)^2 ]如果秩为 2那么不变因子可以设为 (d_1, d_2)把幂次小的 (\lambda - 1) 放在 (d_1)幂次大的 ((\lambda - 1)^2) 放在 (d_2)于是[ d_1 \lambda - 1, \quad d_2 (\lambda - 1)^2 ]但如果秩为 3不变因子有三个前两个里就可能有 1得到[ d_1 1, \quad d_2 \lambda - 1, \quad d_3 (\lambda - 1)^2 ]秩不同结论完全不同。所以凡是说“初等因子完全相同就相抵”的说法都不严谨完整的表述是初等因子完全相同且秩相同才相抵。从初等因子反推不变因子的算法我总结如下先确定不变因子的个数它等于矩阵的阶数 (n)也就是 1 的个数为 (n - r)。对每个不可约因式 (p(\lambda))把它在初等因子组中出现的各个方幂按指数从小到大排列。从最大的方幂开始依次乘到最后一个不变因子、倒数第二个不变因子……上保证指数大的因子落到下标大的不变因子里。最后检查整除链是否成立如果不成立说明分配有误需要调整。4.3 初等因子和约当标准形、最小多项式的关系这块是整个理论的高潮。对一个数字矩阵 (A)考虑它的特征矩阵 (\lambda I - A)求这个 (\lambda)-矩阵的初等因子组。那么每个初等因子 ((\lambda - \lambda_0)^k) 恰好对应一个 (k) 阶约当块 (J_k(\lambda_0))。也就是说约当块的个数和大小完全由初等因子组决定。每个特征值有几个约当块、每个块是几阶全都在初等因子组里写得明明白白。这也是为什么教材总在讲完初等因子之后马上介绍约当标准形因为这俩是绑定的。更妙的是最小多项式和最后一个不变因子也直接挂钩。数字矩阵 (A) 的最小多项式 (m_A(\lambda))恰好等于特征矩阵 (\lambda I - A) 的最后一个不变因子 (d_n(\lambda))。换成初等因子的语言来描述对每个特征值取它对应的所有约当块阶数的最大值把这些幂次乘起来就是最小多项式。这条性质在做最小多项式计算题时特别好用。5. 一张表和三道例题帮你彻底理顺三者关系5.1 三者关系速查表我最喜欢用一张表来归纳三者的定位和转换关系你可以直接截图存下来名称定义记号与前后概念的关系行列式因子所有 (k) 阶子式的首一最大公因式(D_k(\lambda))(D_k d_1 d_2 \cdots d_k)不变因子相邻行列式因子之比(d_k(\lambda))(d_k D_k / D_{k-1})满足 (d_1 \mid d_2 \mid \cdots \mid d_n)初等因子不变因子分解出的不可约因式方幂组无统一记号初等因子组 秩 能反推出不变因子记住这张表的“纵向逻辑”向下走是“累积”向上走是“分解”。行列式因子通过除法得到不变因子不变因子通过分解得到初等因子反过来走则需要额外补上秩的信息。5.2 例题一从 Smith 标准形求全部因子已知某个 (4) 阶 (\lambda)-矩阵的 Smith 标准形为[ \mathrm{diag}\left(1,\ \lambda - 1,\ (\lambda - 1)^2(\lambda 1),\ (\lambda - 1)^2(\lambda 1)(\lambda^2 1)\right) ]看起来有点复杂但其实所有信息都已经摆在明面上了。不变因子就是对角线上四个多项式[ d_1 1, \quad d_2 \lambda - 1, \quad d_3 (\lambda - 1)^2(\lambda 1), \quad d_4 (\lambda - 1)^2(\lambda 1)(\lambda^2 1) ]行列式因子直接相乘[ D_1 1 ][ D_2 d_1 d_2 \lambda - 1 ][ D_3 d_1 d_2 d_3 (\lambda - 1)^3(\lambda 1) ][ D_4 d_1 d_2 d_3 d_4 (\lambda - 1)^5(\lambda 1)^2(\lambda^2 1) ]注意 (D_4) 的指数是把四个因子里所有 ((\lambda - 1)) 的指数加起来(0 1 2 2 5)同样 ((\lambda 1)) 的指数是 (0 0 1 1 2)。初等因子组按顺序拆(d_1 1)不贡献。(d_2 \lambda - 1)贡献 ((\lambda - 1))。(d_3 (\lambda - 1)^2(\lambda 1))贡献 ((\lambda - 1)^2) 和 ((\lambda 1))。(d_4 (\lambda - 1)^2(\lambda 1)(\lambda^2 1))贡献 ((\lambda - 1)^2)、((\lambda 1)) 和 ((\lambda^2 1))。于是初等因子组为[ {(\lambda - 1),\ (\lambda - 1)^2,\ (\lambda - 1)^2,\ (\lambda 1),\ (\lambda 1),\ \lambda^2 1} ]这里能清楚看到((\lambda - 1)^2) 出现两次必须分开写因为它们在不变因子里来自两个不同的“楼层”各自对应独立的约当块。5.3 例题二从初等因子和秩反推不变因子已知某 (3) 阶 (\lambda)-矩阵的秩为 (3)初等因子组为[ (\lambda - 1),\quad (\lambda - 1)^2,\quad (\lambda 1) ]求不变因子。先确定有几个不变因子。秩为 3矩阵是三阶所以不变因子有三个(d_1, d_2, d_3)并且满足[ d_1 \mid d_2 \mid d_3 ]对 (\lambda - 1) 这个因式初等因子组里有幂次 (1) 和 (2)。按“大幂次放后面”的原则((\lambda - 1)^2) 放 (d_3)(\lambda - 1) 放 (d_2)。这时还剩一个 (\lambda 1)它该放哪很多初学者会随手放在 (d_2)得到[ d_2 (\lambda - 1)(\lambda 1), \quad d_3 (\lambda - 1)^2 ]但这一下整除链就被破坏了因为 ((\lambda - 1)(\lambda 1)) 不能整除 ((\lambda - 1)^2)(\lambda 1) 这个因子在 (d_3) 里根本不存在。所以 (\lambda 1) 必须随着最大幂次的 ((\lambda - 1)^2) 一起去 (d_3)。最终答案是[ d_1 1, \quad d_2 \lambda - 1, \quad d_3 (\lambda - 1)^2(\lambda 1) ]这个例题的教训是恢复不变因子时不要只按“平均分配”来做每分配一个因子都要回头验证整除链。一旦发现链断了优先把这个因子挪到更大的下标上去。5.4 例题三数字矩阵的约当化准备来看一个具体的数字矩阵[ A \begin{pmatrix} 1 1 0 \ 0 1 0 \ 0 0 2 \end{pmatrix} ]求它的初等因子并说出对应的约当块。先写出特征矩阵[ \lambda I - A \begin{pmatrix} \lambda - 1 -1 0 \ 0 \lambda - 1 0 \ 0 0 \lambda - 2 \end{pmatrix} ]求一阶行列式因子。矩阵里有非零常数 (-1)所以所有一阶子式的最大公因式就是 1即 (D_1 1)。求二阶行列式因子。挑几个关键子式看[ \det\begin{pmatrix}\lambda - 1 -1 \ 0 \lambda - 1\end{pmatrix} (\lambda - 1)^2 ][ \det\begin{pmatrix}\lambda - 1 0 \ 0 \lambda - 2\end{pmatrix} (\lambda - 1)(\lambda - 2) ][ \det\begin{pmatrix}-1 0 \ 0 \lambda - 2\end{pmatrix} -(\lambda - 2) ]三个多项式放一起取最大公因式结果是 1。所以 (D_2 1)。三阶行列式因子就是整个矩阵的行列式[ D_3 \det(\lambda I - A) (\lambda - 1)^2(\lambda - 2) ]于是不变因子为[ d_1 D_1 1,\quad d_2 \frac{D_2}{D_1} 1,\quad d_3 \frac{D_3}{D_2} (\lambda - 1)^2(\lambda - 2) ]初等因子组为[ (\lambda - 1)^2,\quad \lambda - 2 ]按照“每个初等因子对应一个约当块”的规则((\lambda - 1)^2) 对应一个 2 阶约当块 (J_2(1))(\lambda - 2) 对应一个 1 阶约当块 (J_1(2))。所以 (A) 的约当标准形就是它自己因为 (A) 本身已经是一个约当形矩阵。这道题把数字矩阵和 (\lambda)-矩阵完整地串了起来做一遍之后你对“为什么约当块大小由初等因子决定”会有一个非常具体的感受。6. 常见问题与避坑指南6.1 行列式因子总是差个负号问题出在哪我见过相当多同学在计算行列式因子时结果和答案差一个负号最后发现不是计算错误而是忘记首一化。比如某个一阶子式的最大公因式算出来是 (-(\lambda - 2))这不能直接写成行列式因子必须把负号提到外面得到 (\lambda - 2)。首一化的要求是所有最高次项系数为 1这是定义里写死的查漏补缺时千万要留意。另外用 (\lambda I - A) 和用 (A - \lambda I) 作为特征矩阵中间可能会差若干个 (-1) 因子但初等变换允许乘非零常数所以最终标准形和所有因子不受影响。你只需要选定一种写法从头到尾保持一致。6.2 初等因子重复出现时怎么写初等因子组不是集合而是“带重数的列”。比如[ d_1 \lambda - 1, \quad d_2 \lambda - 1, \quad d_3 \lambda - 1 ]初等因子组要写三个 (\lambda - 1)不能合并成一个 ((\lambda - 1)^3)因为它们对应的是三个一阶约当块而不是一个三阶约当块。反过来看如果初等因子组里有 ((\lambda - 1)^3) 这一个因子它对应的就是一个三阶约当块和三个一阶块有本质区别。写初等因子组时同一个不可约因式的多个方幂建议按指数从低到高依次列出既符合习惯也不容易漏项。6.3 分块对角矩阵的计算误区遇到分块对角 (\lambda)-矩阵很多同学会想当然地认为“整块矩阵的不变因子就是把每个对角块的不变因子拼接起来”。这个直觉在特定条件下可能成立但并不是普遍规律。原因在于求整体矩阵的 (k) 阶行列式因子时要遍历所有跨块的子式而不只是对角块内部的子式。跨块的组合会产生新的因子整体最大公因式的结果很可能和对角块最大公因式的简单拼凑不一样。安全做法是老老实实对整体矩阵求行列式因子或者先把整体化成 Smith 标准形再读。6.4 避坑清单速查常见错误典型场景正确做法忘记首一化行列式因子算出 (-(\lambda - 2))统一写成 (\lambda - 2)初等因子重复项漏写两个 (\lambda - 1) 合并成一个重复项分开写每个对应一个约当块不看秩直接反推初等因子相同就说不变量相同必须“初等因子 秩”一起比较分块对角块直接拼接对角块各自标准形拼成整体标准形跨块子式也要参与 gcd 计算没验证整除链反推时 (\lambda 1) 放错位置每放一个因子检查 (d_i \mid d_{i1})混淆特征矩阵写法用了 (\lambda I - A) 又用 (A - \lambda I)全程统一最后结果应该一致6.5 学习顺序与练习建议如果你是刚接触这块内容的初学者我的建议是严格按这个顺序来先把 (\lambda)-矩阵的初等变换练熟特别是行变换、列变换和对角化操作。然后练习求行列式因子从二阶矩阵、三阶矩阵入手手算至少 5 道题。再用相邻行列式因子相除得到不变因子顺便验证整除链。最后把不变因子分解写出初等因子组并和约当标准形对应起来。做题的时候不要只求答案每一道题都把三个因子完整写出来并互相验算。这样反复练上 10 道题你基本就不会再混了。我个人在实际学习中的体会是这三个概念最容易被混淆不是因为它们本身有多难而是因为大家总想跳过中间步骤直接背结论。只要你踏踏实实把行列式因子算一遍、再把整除链验证一遍后面的路就会非常顺。最后再分享一个小技巧遇到抽象的 (\lambda)-矩阵先把它化成若干分块或尽量稀疏的形式再计算复杂的 gcd 问题往往会被化简成几个小多项式的组合正确率和速度都会明显提升。