带过几届学生的线性代数之后,我发现一个规律:凡是学到"标准型"这一章还精神抖擞的,只有两类人——一类是天生喜欢收拾房间的,另一类是已经放弃治疗的。剩下的绝大多数人,都会在"行最简形""相似对角形""二次型标准形""若尔当标准形"之间反复横跳,考前背了一堆名字,考场上还是分不清哪个该往哪儿填。
这篇文章不打算按教材目录讲。我想以一名常年在这个主题上带着学生做题、自己也踩过不少坑的人的身份,把这几个"标准型"放到同一张桌面上慢慢拆。你会看清楚它们各自解决什么问题、允许做什么操作、保持什么东西不变,以及做题时怎么一眼认出该用哪个。适合正在复习线代的同学、自学备考的人,也适合想把这章彻底想明白、而不是背下来的读者。
1. 三个"标准型"背后的三套游戏规则:先分清谁是老板
很多人晕就晕在:教材第2章讲"行最简形",第5章讲"相似对角形",第6章又冒出"二次型的标准形"。名字都带"标准"两个字,但它们的底层逻辑完全不同。我的建议是:不要背名字,先看场景。
1.1 标准型本质上都是"换坐标系"
线性代数里所有"标准型",共通的目标只有一个:在保证某些核心性质不变的前提下,把对象变到最简单的样子。就好比一台相机,无论你怎么旋转、平移,拍到的其实是同一个场景,只是换了个视角。标准型干的事,就是帮你找到那个"拍出来最清爽"的角度。
不同的问题场景,允许使用的"拍摄动作"不一样,因此得到的"简单样子"也不一样。这三套规则的差异可以用一张表说清楚:
| 场景 | 允许做的操作 | 保持不变量 | 得到的最简形式 |
|---|---|---|---|
| 解线性方程组 | 行初等变换 | 方程组的解集、矩阵的秩 | 行最简形 |
| 研究线性变换/方阵 | 相似变换P⁻¹AP | 特征值、迹、行列式、极小多项式 | 对角矩阵或若尔当标准形 |
| 研究二次型 | 合同变换CᵀAC | 矩阵的秩、正负惯性指数 | 二次型标准形/规范形 |
注意"保持不变量"这一列,这才是标准型的灵魂。什么样的操作能让你放心大胆地化简?答案是:化简过程中"不能丢失的东西"恰好就是那个问题里你最关心的东西。
- 解方程组时,你关心解集变不变。行变换不改变解集,所以随便消元。
- 研究线性变换时,你关心它的本质性质,也就是特征值、极小多项式这些"几何品格"。相似变换正好能保住这些。
- 研究二次型时,你关心的是这个二次齐次式代表的几何对象(椭圆、双曲线……)以及符号正负情况。合同变换恰好保住惯性。
我见过太多人把"行最简形"和"对角矩阵"画等号,就是因为没分清第一个场景和第二个场景的游戏规则。行变换做出来的对角样子,根本保不住特征值;相似变换做出来的对角矩阵,也跟解方程没有半点关系。
1.2 一个容易被忽略的事实:"标准型"不只有一个
教材里"标准型"这个词被复用了无数次。严格来说:
- 行最简形是矩阵在行等价意义下的标准型;
- 相似对角形是矩阵在相似等价意义下的标准型;
- 若尔当标准形是相似意义下"能到的最接近对角"的标准型;
- 二次型标准形是合同意义下的标准型;
- 史密斯标准形是多项式矩阵在行列等价意义下的标准型。
它们分布在不同的"等价关系"里,各自的唯一性结论也不同。想把这章学透,第一件事就是把"等价关系"和"标准型"配对记住,而不是把"标准型"当成一个包罗万象的神秘名词。
2. 行最简形:解方程组时真正在用的"傻瓜操作手册"
这一节我们先解决最务实的问题:拿到一个线性方程组,怎么又快又稳地求出所有解,并且不丢解、不增解。
2.1 为什么只允许"行"变换,绝不动列
方程组的本质是等式。你做的每一步操作,都必须保证新的方程组和旧的方程组同解。合法的三类操作是:
- 交换两行的位置;
- 给某一行乘非零常数;
- 给某一行加上另一行的若干倍。
这三类操作对应到一个数学结论:对增广矩阵做初等行变换,不改变方程组的解集。这就是高斯消元法能成立的全部底气。
那为什么不能做列变换?因为列交换相当于把未知数的顺序换了。你本来认为第一列是 (x),第二列是 (y),交换之后第一列变成 (y),解出来的数值和未知数对不上号了。稍微极端一点的例子:方程 (x+2y=3) 和 (2x+y=3),解分别是 (x=1,y=1) 和 (x=3,y=-3)。你要是对系数矩阵动一列,表面上矩阵好看了,解却彻底乱了。所以列变换在解方程这个场景下是禁区。
顺便说一个很多人不知道的点:秩这个概念之所以是"行等价不变量",也是因为行变换可以任意做,列变换会影响行空间的结构。虽然高斯消元时"秩"用行最简形里的主元个数来数,但秩的定义从来都依赖"行最简形的非零行数",而不是"化简后有几个圆圈"。
2.2 行阶梯形和行最简形的实操步骤
先说两个定义,很多教材一句话带过,但做题时区分不清:
- 行阶梯形:非零行都在上面,零行全部在下面;每一行第一个非零元素(主元)所在的列,随着行号增加不断右移;主元下方全是零。
- 行最简形:在行阶梯形基础上,每个主元都化为 1,而且主元所在列的其他元素全部化为 0。
我用一个具体的方程组演示完整流程。考虑:
[ \begin{cases} x+2y+z=4\ 2x+4y+3z=9\ x+y+z=3 \end{cases} ]
增广矩阵:
[ \begin{bmatrix} 1 & 2 & 1 & 4\ 2 & 4 & 3 & 9\ 1 & 1 & 1 & 3 \end{bmatrix} ]
第一步,把第一列第一行的 1 当作主元,消去下面两个元素。第二行减去第一行的 2 倍,第三行减去第一行的 1 倍:
[ \begin{bmatrix} 1 & 2 & 1 & 4\ 0 & 0 & 1 & 1\ 0 & -1 & 0 & -1 \end{bmatrix} ]
第二步,现在第二列的主元出现在第三行(-1),为了满足"主元随行数右移",交换第二行和第三行,再给第二行乘 -1:
[ \begin{bmatrix} 1 & 2 & 1 & 4\ 0 & 1 & 0 & 1\ 0 & 0 & 1 & 1 \end{bmatrix} ]
到这里已经是行阶梯形了。如果只是想判断解的情况,到这步就能看出秩为 3,唯一解。但如果要求行最简形,还要继续:把第三列也消干净,第二行、第一行上方都处理成 0。第一行减去第二行的 2 倍再减去第三行的 1 倍:
[ \begin{bmatrix} 1 & 0 & 0 & 1\ 0 & 1 & 0 & 1\ 0 & 0 & 1 & 1 \end{bmatrix} ]
于是直接读出 (x=1,y=1,z=1)。这个例子我想说明一个实操经验:行最简形不是为了好看,而是为了把解直接"读"出来。如果只到行阶梯形,你还得回头做回代;做到行最简形,答案就在增广列里。
2.3 两个常见的翻车点
第一个翻车点:过早引入分数。我见过很多学生拿到矩阵,非要把某个元素直接化成 1,结果引入一堆分数,算着算着自己先乱了。正确做法是:先消元,后归一。尽量用整数运算把下方元素消成 0,最后再考虑把主元化 1。中间一旦出现分数,计算量爆炸式增长,出错率也直线上升。
第二个翻车点:自由变量选错。遇到 (m<n) 的方程组,主元列对应的是"约束变量",非主元列对应"自由变量"。有个学生曾经问:老师,我为什么不能把自由变量选成主元列那一列?因为自由变量本来就可以取任意值,所有解都由它生成。你如果把约束变量当自由变量,会丢掉一部分解。记住:主元在哪一列,哪一列就不是自由变量。
行最简形还有个两用妙处:求逆矩阵。把 ((A|I)) 做行变换化成 ((I|A^{-1})),本质就是用一系列行变换拆解出逆矩阵。原理和消元完全一致,不多讲,但前提是你对行变换足够熟练。
3. 相似标准型:把同一个变换放到"最舒服的坐标系"里
矩阵相乘可以看成线性变换,但同一个线性变换,换一组基,对应的矩阵就变了。相似标准型要回答的问题是:在所有可能的基底下,这个线性变换的矩阵能简单到什么程度?
3.1 对角化为什么不是万能钥匙
如果矩阵 (A) 有 (n) 个线性无关的特征向量,把它们排成矩阵 (P),那么 (P^{-1}AP) 就等于对角矩阵,对角线上的元素就是特征值。这个结论背后的直觉是:如果你用特征向量作为新坐标系,线性变换在这个坐标系里就只是"在各个方向上伸缩",没有交叉影响,所以矩阵是对角的。
问题是,很多矩阵凑不齐 (n) 个线性无关的特征向量。最典型的例子是:
[ A = \begin{bmatrix} 2 & -1 \ 1 & 4 \end{bmatrix} ]
计算特征多项式:
[ \det(\lambda I - A) = (\lambda-2)(\lambda-4)+1 = \lambda^2 - 6\lambda + 9 = (\lambda-3)^2 ]
特征值只有 (\lambda=3),代数重数为 2。但是:
[ A - 3I = \begin{bmatrix} -1 & -1 \ 1 & 1 \end{bmatrix} ]
这个矩阵的秩是 1,所以零空间维数是 1,也就是说几何重数只有 1。特征向量只能找出一条独立的方向,根本凑不出两个线性无关的特征向量,无法对角化。
这里引出判断可对角化的黄金条件:对每个特征值,代数重数必须等于几何重数。代数重数是特征多项式里的重数,几何重数是零空间维数。两者一旦不相等,这个矩阵就是对角化不了的。
3.2 若尔当标准型:最后的避难所
对角化不了怎么办?那就允许对角线附近出现一点"1",这就是若尔当标准型。每个若尔当块长这样:
[ J_k(\lambda) = \begin{bmatrix} \lambda & 1 & & \ & \lambda & 1 & \ & & \ddots & \ddots \ & & & \lambda \end{bmatrix} ]
那个 (1) 是怎么来的?我们不再要求每个基向量都在 ((A-\lambda I)) 作用后变成 0,而是放宽为:经过若干次 ((A-\lambda I)) 作用后才变成 0。这种向量叫广义特征向量。若尔当块中的 1 表示基向量之间存在一条传递链:
[ (A-\lambda I)v_1 = 0,\quad (A-\lambda I)v_2 = v_1,\quad (A-\lambda I)v_3 = v_2 ]
所以若尔当块的大小,本质上是这条"广义特征向量链"的长度。
来看一个直观的例子。三个矩阵特征值全是 2,但若尔当标准型完全不同:
[ A_1 = \begin{bmatrix} 2 & 1 & 0 \ 0 & 2 & 0 \ 0 & 0 & 2 \end{bmatrix},\quad A_2 = \begin{bmatrix} 2 & 1 & 0 \ 0 & 2 & 1 \ 0 & 0 & 2 \end{bmatrix},\quad A_3 = \begin{bmatrix} 2 & 0 & 0 \ 0 & 2 & 0 \ 0 & 0 & 2 \end{bmatrix} ]
它们的特征多项式都是 ((\lambda-2)^3),但:
- (A_3) 几何重数是 3,可以对角化,若尔当标准型是三个 1 阶块;
- (A_1) 里 ((A_1-2I)) 的秩是 1,零空间维数是 2,对应两个若尔当块,一个 2 阶一个 1 阶;
- (A_2) 里 ((A_2-2I)) 的秩是 2,零空间维数是 1,对应一个 3 阶若尔当块。
注意,我故意把矩阵直接写成"已经接近若尔当块"的样子,方便你看清结构。实际做题时矩阵通常长得更乱,我们需要一套系统化的算法。
3.3 算若尔当标准型的实操算法
求若尔当标准型,不要靠蒙。我常用的套路是四步:
- 先求特征多项式,拿到所有特征值和代数重数;
- 对每个特征值 (\lambda),计算零空间维数,也就是 (\dim\ker(A-\lambda I)),它直接告诉你对应特征值的若尔当块个数;
- 继续计算 (\dim\ker((A-\lambda I)^2))、(\dim\ker((A-\lambda I)^3)),直到维数不再增长;
- 用相邻两层的维数差确定每层块的个数。
以刚才的 (A_2) 为例,(\lambda=2):
| (k) | (\dim\ker((A_2-2I)^k)) | 比上一层的增量 |
|---|---|---|
| 1 | 1 | 1个至少1阶的块 |
| 2 | 2 | 多了1个至少2阶的块 |
| 3 | 3 | 多了1个至少3阶的块 |
这说明有一个若尔当块能达到 3 阶,所以标准型就是单个 (J_3(2))。对 (A_1) 算,第一层维数是 2,说明有两个块;第二层维数仍然是 2,说明没有块超过 2 阶,所以结果是 (J_2(2)\oplus J_1(2))。
为什么用这个差值法?因为 (\dim\ker((A-\lambda I)^k)) 数的是"链长至少为 k 的广义特征向量"张成的空间维数,相邻两层之差正好是"链长恰好为 k"的块数。把这个想明白了,若尔当标准型就不再是需要死记的魔法。
提示:这套方法默认特征多项式在讨论的范围内能够完全分解。在复数范围内任何矩阵都可以,但如果你在实数范围内讨论一个没有实特征值的矩阵(比如旋转矩阵),若尔当标准形就不太适合了。这类矩阵要用后面第 5 节的有理标准形。
4. 二次型的标准形与规范形:换坐标系看几何
二次型这部分的名字最混乱,因为既叫"标准形"又叫"规范形",还经常和特征值混在一起。我拆开讲。
4.1 配方法和正交变换法得到的是同一个"标准形"吗
二次型长这样:
[ q(x,y) = 2x^2 + 4xy - y^2 ]
它对应的对称矩阵是:
[ A = \begin{bmatrix} 2 & 2 \ 2 & -1 \end{bmatrix} ]
因为 (q(x,y) = [x\ y] A [x\ y]^T)。我们想把交叉项 (4xy) 消掉,办法是换一组变量,这个换法在矩阵语言里就是合同变换:(B = C^T A C)。
第一种做法是配方法。把 (2x^2 + 4xy) 看成完全平方的一部分:
[ q = 2(x^2+2xy)-y^2 = 2[(x+y)^2 - y^2] - y^2 = 2(x+y)^2 - 3y^2 ]
令 (u = x+y,\ v = y),就得到:
[ q = 2u^2 - 3v^2 ]
这是标准形之一,对角线上的元素是 2 和 -3。
第二种做法是用正交变换。对称矩阵一定能正交对角化,求出 (A) 的特征值即可:
[ \det(\lambda I - A) = (\lambda-2)(\lambda+1) - 4 = \lambda^2 - \lambda - 6 = (\lambda-3)(\lambda+2) ]
于是经过正交变换后:
[ q = 3u'^2 - 2v'^2 ]
两种方法得到的是不同的标准形(一个 2 和 -3,一个 3 和 -2),但这不矛盾。标准形就是在合同意义下的"尽量对角",它并不唯一,因为你可以随时把变量再缩放。关键的不变量是:正项的个数永远是一个,负项的个数永远是一个。这就是惯性定理,也叫西尔维斯特惯性定律。
把每个非零项再归一化成 (+1) 或 (-1),得到的样子:
[ q = w_1^2 - w_2^2 ]
才是规范形。规范形在合同意义下是唯一的,正负惯性指数分别是 1 和 1,秩为 2。
4.2 规范形怎么给二次曲线验明正身
二次型不只是代数练习题,它决定了一条二次曲线的形状。比如一般形式的:
[ ax^2 + bxy + cy^2 + dx + ey + f = 0 ]
把二次齐次部分化成规范形,就等于把坐标系旋转到没有交叉项的角度,这时曲线就现出原形。结论可以用一张小表总结:
| 规范形(只看二次部分) | 曲线的类型 |
|---|---|
| (u^2 + v^2) | 椭圆(或圆) |
| (u^2 - v^2) | 双曲线 |
| (u^2) 或 (v^2) | 抛物线(或退化情况) |
| (0) | 退化情形,比如两条直线 |
判断的关键是正惯性指数:全正的是椭圆型,一正一负的是双曲型,有零出现的是抛物型。这个思路直接推广到三维就是二次曲面的分类,考试和论文里都常出现。
4.3 做题时的实用判断
拿到一个对称矩阵要做合同标准形时,我一般这样选方法:
- 如果题目要求"可逆线性变换",配方法最稳妥,永远能做,步骤也不容易错;
- 如果题目要求"正交变换",那必须走特征值路线,因为只有正交变换才保证不改变图形的角度和距离感;
- 如果题目问"规范形是什么",别急着配方法,直接数正负惯性指数,也就是看特征值符号,更快。
另外要提醒:正交矩阵是特殊的合同变换,但合同变换不一定是正交变换。用配方法化出来的对角阵,对应的变换矩阵 (C) 一般不是正交的,但没关系,因为在"二次型合同"这个语义下,我们只关心惯性,不关心是否保持角度。
5. 进阶的两种标准型:当矩阵开始"多项式化"
如果你考的是数学专业、或者做矩阵理论、控制理论相关的研究,还会碰到另外两种标准型。它们出现的频率低一点,但一旦出现就是"降维打击"级别的工具。
5.1 史密斯标准形:多项式矩阵的"行最简形"
把矩阵的元素从数字换成一元多项式,就得到多项式矩阵。比如:
[ B(x) = \begin{bmatrix} x-1 & x-1 \ 0 & x-1 \end{bmatrix} ]
我们允许对多项式矩阵做三类操作:交换两行/两列、给某行/某列乘非零常数、把某行/某列加上另一行/另一列的多项式倍。注意,这里乘的只能是非零常数或者多项式倍数吗?严格来说,初等操作里"乘以一个可逆元",在一元多项式环里可逆元就是非零常数。这跟数值矩阵不同:你不能给多项式矩阵某一行整行乘 ((x-1)),因为 ((x-1)) 没有多项式逆元,乘了之后信息就变了。
对 (B(x)),只需做列变换 (C_2 - C_1),就变成:
[ \begin{bmatrix} x-1 & 0 \ 0 & x-1 \end{bmatrix} ]
对角线元素能按整除关系排好,这就是史密斯标准形。一般地,史密斯标准形是:
[ \mathrm{diag}(d_1(x), d_2(x), \dots, d_r(x), 0, \dots, 0) ]
并且满足 (d_i(x)) 整除 (d_{i+1}(x))。这些 (d_i(x)) 叫不变因子,它们在行列等价意义下唯一。
不变的因子有什么用?最大用处之一是判断两个矩阵是否相似。直接算两个原始矩阵的相似性很麻烦,但把 (xI-A) 和 (xI-B) 分别化成史密斯标准形,如果它们的不变因子完全一样,那么 (A) 和 (B) 相似。这个结论在解矩阵方程、研究线性微分方程组时都是杀手锏。
5.2 有理标准形:不依赖数域的标准型
若尔当标准形有个前提:特征多项式必须在讨论的数域里完全分解。但一个矩阵在实数范围可能根本没有实特征值,比如旋转矩阵:
[ R = \begin{bmatrix} 0 & -1 \ 1 & 0 \end{bmatrix} ]
它的特征多项式是 (\lambda^2+1),实数范围内没有根,所以实数范围内谈不上若尔当标准形。但这个矩阵也有一个"最简形"——它自己就是某类"有理标准形"。
有理标准形由不变因子组装而成,每个不变因子对应一个伴侣矩阵。假设有一个首一多项式:
[ p(\lambda) = \lambda^k + a_{k-1}\lambda^{k-1} + \cdots + a_0 ]
它的伴侣矩阵是:
[ C(p) = \begin{bmatrix} 0 & 0 & \cdots & 0 & -a_0 \ 1 & 0 & \cdots & 0 & -a_1 \ 0 & 1 & \cdots & 0 & -a_2 \ \vdots & & \ddots & \vdots & \vdots \ 0 & 0 & \cdots & 1 & -a_{k-1} \end{bmatrix} ]
上面那个旋转矩阵 (R) 的特征多项式是 (\lambda^2+1),伴侣矩阵写出来是:
[ \begin{bmatrix} 0 & -1 \ 1 & 0 \end{bmatrix} ]
恰好就是 (R) 自己。也就是说,(R) 的有理标准形就是自身,它不需要引入任何虚数。
有理标准形的意义在于:不管数域是什么,所有矩阵都能有唯一的标准形。它比若尔当标准形的适用范围更广,代价是块里的结构不如若尔当块直观。做理论研究、处理有限域上的矩阵问题时,有理标准形几乎是必需品。
6. 标准型家族对照表与复习建议
学到最后,最有用的是把它们并排放好。我整理了一份对照表,建议你抄在笔记本上,考前只看这张表就够:
| 标准型 | 允许的操作/变换 | 研究对象 | 保持的核心不变量 | 唯一性 | 典型用途 |
|---|---|---|---|---|---|
| 行最简形 | 初等行变换 | 方程组的增广矩阵 | 解集、秩 | 唯一 | 解方程组、求秩、求逆 |
| 相似对角形 | 相似变换 (P^{-1}AP) | 可对角化的方阵 | 特征值、特征向量结构 | 不唯一(特征向量基可缩放) | 矩阵幂、解耦线性系统 |
| 若尔当标准形 | 相似变换 | 任意复方阵 | 特征值、代数/几何重数、极小多项式 | 唯一(块顺序可交换) | 矩阵函数、微分方程组 |
| 二次型规范形 | 合同变换 (C^TAC) | 对称矩阵/二次型 | 秩、正负惯性指数 | 唯一 | 二次曲线曲面分类、极值判定 |
| 史密斯标准形 | 多项式矩阵的行列初等变换 | 多项式矩阵 | 不变因子 | 唯一 | 判定相似、解矩阵方程 |
| 有理标准形 | 相似变换 | 任意数域上的方阵 | 不变因子 | 唯一 | 不依赖特征值的矩阵研究 |
复习时我最想强调的一件事:先判断场景,再选工具。看到"解线性方程组"就想行最简形;看到"矩阵的高次幂""线性变换的几何结构"就想特征值、相似与若尔当;看到"二次齐次式""曲线曲面分类"就想合同变换和规范形。场景判断对了,后面的计算只是熟练度问题。
做若尔当标准形的题时,我强烈建议先画一张"核空间维数表",像第 3 节那样把每一层的维数列出来,再推导块数。直接凭感觉猜块数,十个有九个会错。
做二次型规范形的题时,先判断题目要求的是"标准形"还是"规范形"。标准形不必唯一,规范形必须写成正负 1,这俩在考场上常常被混着批改。
我还想多说一句个人体会:标准型之所以让这么多人头疼,是因为大家总想背结论,而不是追问"为什么允许这么做"。只要你愿意多问一句"这个变换保住了什么",整个线性代数里一大半公式就都串起来了。我不喜欢把线性代数说得玄乎,但"标准型"这一章,确实是整门课里最能看到"数学思想"的地方——它教你用等价关系看问题,而不是死盯一个对象的表面长相。