ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

矩阵标准型全解析:从若尔当形到有理标准型的化简逻辑与应用

矩阵标准型全解析:从若尔当形到有理标准型的化简逻辑与应用

矩阵分析里最值得反复咀嚼的一个概念,我觉得是“标准型”。很多同学一开始觉得自己在背一堆不同名字的形:阶梯形、对角形、若尔当形、有理标准型,背完就忘。核心问题其实是同一个:一个矩阵,或者说一个线性变换,换个坐标系看,怎么表示最省力。这篇文章我会把线性代数里各种标准型的选择逻辑、若尔当标准型的构造细节、有理标准型的思路,以及做题和上手编程时容易踩的坑一起讲清楚。适合正在复习矩阵理论、准备研究生入学考试,或者工作中需要做矩阵分解、微分方程求解的人。

1. 标准型到底在解决什么问题:先分清相抵、相似、合同

1.1 同一个线性变换,不同的“表情”

先打个比方。同样一个人,在中国用中文介绍,在美国用英文介绍,在德国用德文介绍。内容还是一个人,但描述方式完全不一样。矩阵标准型就是这个道理:同一个线性变换,在一组基底下写成矩阵 A,在另一组基底下可能就写成 B。这两个矩阵之间隔着一个“换坐标”的操作,形式上叫作相似变换:

B = P^{-1} A P

P 是两组基之间的过渡矩阵。如果 P 选得好,B 就会特别简单,简单到你一眼能看出这个变换在干什么:哪些方向被拉伸了,哪些方向被旋转了,哪些方向被“切”了一下。标准型本质上是一套约定,让大家尽量把矩阵化简到同一个“最省事”的形态,然后在这个形态上做分析。这就是为什么学到的第一个标准型往往是行最简形——它把解线性方程组时真正的自由变量暴露出来。而在方阵理论里,最有代表性的则是对角形和若尔当形,它们把线性变换的“不变方向”暴露出来。

1.2 三种“标准型”别搞混

先提醒一个非常常见的误区:很多人在同一张卷子里把“相抵标准型”和“相似标准型”混着用。它们不是一回事。

  • 相抵标准型解决的是:一个 m 行 n 列的矩阵,经过左乘、右乘可逆矩阵后,能化简成什么样。答案是唯一的,只跟秩 r 有关,长这样:

[ \begin{pmatrix} I_r & 0 \ 0 & 0 \end{pmatrix} ]

这里的核心不变量就是秩。两个矩阵相抵,说明它们可以通过初等变换互相转化,但不代表它们的特征值一样。

  • 相似标准型解决的是:同一个方阵在不同基底下会有什么不同外表。允许的操作是相似变换 (P^{-1}AP)。核心不变量有很多:特征多项式、最小多项式、迹、行列式、若尔当结构。相抵标准型在这里不够用,因为两个方阵就算秩相同,特征值也可能完全不同。

  • 合同标准型解决的是二次型或者对称矩阵的问题。允许的操作是 (P^{T}AP),核心不变量是正惯性指数和负惯性指数。这一点在实二次型化简里非常关键。

下表可以快速区分:

对象允许操作标准型形态核心不变量
一般 m×n 矩阵可逆矩阵左乘、右乘([I_r \ 0;\ 0 \ 0])秩 r
方阵相似变换 (P^{-1}AP)对角形、若尔当形、有理标准型特征多项式、最小多项式、若尔当块结构
实对称矩阵合同变换 (P^{T}AP)(\operatorname{diag}(1,\dots,-1,\dots,0))正负惯性指数

做题时先问自己:这是在讨论线性方程组的解空间,还是在讨论一个方阵的迭代、指数和动力学性质?问清楚之后,才知道该用哪一套标准型。

1.3 相似标准型的共同目标

相似标准型的共同目标只有一个:把矩阵化简成“分块对角”的形态,让每个分块都对应一个不变子空间。能对角化,就分成一维不变子空间;不能对角化,就用若尔当块处理带重特征值的部分;再不行,用有理标准型保证在任何域上都能分解。这个目标一旦想明白,后面学到的所有标准型本质上是同一个思路在不同条件下的不同实现。

2. 对角化失灵怎么办:从广义特征向量到若尔当标准型

2.1 能不能对角化,只看一个关键数

很多同学一看到特征值有重根,就以为矩阵不能对角化。这个判断是错的。最简单的反例是单位矩阵,特征值全是 1,重根重到不能再重了,但它已经是对角矩阵。所以判断标准不是“有没有重根”,而是一个更细的数:几何重数。

设矩阵 A 有一个特征值 (\lambda),它的代数重数是特征多项式中 ((\lambda - x)^k) 这一项的幂次 k。几何重数是特征子空间的维数,也就是 (\operatorname{dim}\ker(A-\lambda I))。如果对每个特征值都有

几何重数 = 代数重数

那么 A 可以对角化。只要有一个特征值,几何重数小于代数重数,标准型里就会出现若尔当块。

我举个例子。矩阵

[ B = \begin{pmatrix} 1 & 1 & 0 \ -1 & 3 & 0 \ 0 & 0 & 3 \end{pmatrix} ]

先算特征多项式:

[ \det(B-\lambda I)=(\lambda-2)^2(\lambda-3) ]

所以 (\lambda=2) 的代数重数是 2,(\lambda=3) 的代数重数是 1。再算 (\lambda=2) 的几何重数:

[ B-2I = \begin{pmatrix} -1 & 1 & 0 \ -1 & 1 & 0 \ 0 & 0 & 1 \end{pmatrix} ]

解 ((B-2I)x=0),得到 (x_3=0),(x_1=x_2)。特征子空间只有一维,几何重数是 1。等于说这个特征值“名义上占了二维空间,实际上只贡献了一个特征方向”,矩阵自然不能对角化。

2.2 用广义特征向量搭出若尔当块

不能对角化,我们就想办法把缺失的方向补回来。补回来的工具是广义特征向量。

对于特征值 (\lambda),特征向量 v 满足 ((A-\lambda I)v=0)。广义特征向量 w 可能不直接被 A 缩小零,而是被 ((A-\lambda I)) 映到前面那个特征向量上:

[ (A-\lambda I)w = v ]

这样沿着 w 方向,A 的作用不是纯缩放,而是缩放加“剪切”。两个方向合起来,在基底下就变成一个若尔当块:

[ \begin{pmatrix} \lambda & 1 \ 0 & \lambda \end{pmatrix} ]

还是用刚才的 B。对 (\lambda=2),我先取特征向量

[ v = (1,1,0)^T ]

然后解

[ (B-2I)w = v ]

展开就是

[ \begin{pmatrix} -1 & 1 & 0 \ -1 & 1 & 0 \ 0 & 0 & 1 \end{pmatrix} w = \begin{pmatrix} 1 \ 1 \ 0 \end{pmatrix} ]

取 (w=(0,1,0)^T) 即可。现在把 v 和 w 排成基底,再加上特征值 3 的特征向量 (e_3=(0,0,1)^T),得到:

[ P = \begin{pmatrix} 1 & 0 & 0 \ 1 & 1 & 0 \ 0 & 0 & 1 \end{pmatrix} ]

这时

[ P^{-1} B P = \begin{pmatrix} 2 & 1 & 0 \ 0 & 2 & 0 \ 0 & 0 & 3 \end{pmatrix} ]

这就是 B 的若尔当标准型。验证方法很简单:直接算 (B P) 是不是等于 (P J)。这两个乘积相等,说明 P 选对了,不需要真的去算 (P^{-1})。

更高阶的若尔当块也同理。如果要做一个大小为 3 的块,就找一条链:

[ (A-\lambda I)u = w,\quad (A-\lambda I)w = v,\quad (A-\lambda I)v = 0 ]

然后把 (v, w, u) 按这个顺序排成基底,对应块就是

[ \begin{pmatrix} \lambda & 1 & 0 \ 0 & \lambda & 1 \ 0 & 0 & \lambda \end{pmatrix} ]

注意填 1 的位置是上对角线,不是下对角线。有些教材喜欢按下若尔当形写,1 在下对角线,本质上只是基底顺序反过来了,没必要为此纠结。

2.3 怎么快速确定若尔当块的个数和尺寸

这里有个非常实用的小工具:看 ((A-\lambda I)^k) 的零空间维数变化。

设

[ d_k = \operatorname{dim}\ker((A-\lambda I)^k) ]

那么 (d_1) 就是特征子空间的维数,也就是 (\lambda) 的若尔当块个数。而

[ d_k - d_{k-1} ]

表示的是“尺寸至少为 k”的若尔当块个数。相邻差值再比较,就能推出每个尺寸的块有多少个。

回到刚才的 B。对 (\lambda=2):

  • (d_1 = 1)
  • (d_2 = 2)
  • (d_3 = 2)

所以尺寸至少为 1 的块有 1 个,尺寸至少为 2 的块有 (d_2-d_1=1) 个。由于 (d_3-d_2=0),说明没有尺寸为 3 或更大的块。结论就是:(\lambda=2) 对应一个 (2\times2) 若尔当块。算到这里,标准型的骨架已经出来了。

这个方法最大的价值是避免瞎猜广义特征向量。先知道块尺寸,再决定要解多少次 ((A-\lambda I)w=v)。有些题目先给你若尔当形,让你反推 A 是否相似,本质上也是在比较这两串维数。

2.4 若尔当标准型的适用范围

若尔当标准型要求特征多项式在所用数域内能完全分解成一次因子。在复数域上,任何矩阵都能做到这一点,所以在复线性代数课程里,若尔当形是万能终点。如果在实数域上讨论,特征值可能是一对共轭复数,这时可以直接把矩阵复化到复数域上做若尔当分解。如果题目要求实数域上的分解,可以用“实若尔当标准型”,把一对共轭复特征值对应成 (2\times2) 的旋转缩放块,但这不是默认形态。若尔当形在数值计算里也不稳定,这一点留到第四部分专门讲。

3. 不依赖特征值分解的有理标准型:跨域选择的出路

3.1 为什么不能假装只有复数域

复数域上的若尔当形漂亮,但并不是所有场景都允许你“开方号”。比如在有理数域上研究一个矩阵,特征多项式可能是

[ x^2 - 2 ]

它在有理数域里没有根,在实数域里才有 (\pm\sqrt{2})。如果这道题限定在有理数域上处理,你根本取不到无理数特征值。这时候需要另一套标准型——有理标准型。它最大的优点是:不要求特征多项式分裂成一次因子,也不需要可选择地扩充数域。只要矩阵的元素落在某个域里,有理标准型就存在,而且唯一。

有理标准型的构成单元是“友矩阵”。一个首一多项式

[ p(x)=x^k+a_{k-1}x^{k-1}+\cdots+a_1x+a_0 ]

对应的友矩阵是

[ C = \begin{pmatrix} 0 & 0 & \cdots & 0 & -a_0 \ 1 & 0 & \cdots & 0 & -a_1 \ 0 & 1 & \cdots & 0 & -a_2 \ \vdots & \vdots & \ddots & \vdots & \vdots \ 0 & 0 & \cdots & 1 & -a_{k-1} \end{pmatrix} ]

这个矩阵的特征多项式恰好就是 (p(x))。所以把矩阵拆成若干友矩阵的分块对角,就是有理标准型。直觉上,每个友矩阵对应一个“由单个向量反复迭代生成”的循环不变子空间,因此有理标准型也叫循环分解标准型。

3.2 Smith标准型与不变因子

想要具体求出有理标准型,绕不开一个工具:Smith标准型。

对矩阵 A,研究多项式矩阵

[ xI - A ]

它的元素都是关于 x 的多项式。允许做的初等变换有三种:交换两行或两列;某一行或某一列乘一个非零常数;某一行加上另一个行的任意多项式倍。通过这些变换,可以把它化简成对角形:

[ \operatorname{diag}(d_1(x), d_2(x), \dots, d_n(x)) ]

其中每个 (d_i(x)) 都是首一多项式,并且满足

[ d_1(x) \mid d_2(x) \mid \cdots \mid d_n(x) ]

这串多项式就是不变因子。它们三个最重要的性质是:

  • 特征多项式等于所有不变因子的乘积。
  • 最后一个不变因子 (d_n(x)) 就是最小多项式。
  • 不变因子在允许的初等变换下完全不变,所以它们是相似不变量。

举个例子,如果

[ A = \begin{pmatrix} 1 & 0 \ 0 & 3 \end{pmatrix} ]

那么

[ xI-A = \begin{pmatrix} x-1 & 0 \ 0 & x-3 \end{pmatrix} ]

行列式因子算一下,两个元素的公因式是 1,所以 Smith 标准型是

[ \operatorname{diag}(1,\ (x-1)(x-3)) ]

这一个例子足以说明:即使 A 已经是对角矩阵,它在有理数域上的“有理标准型”也不一定是对角形,而可能是一个友矩阵。因为有理标准型要在一个不引入额外根的域里把所有循环子空间拆开。换句话说,对角形依赖特征值能否在域内取到,而友矩阵只要多项式的系数在域内即可。

3.3 有理标准型的形态与应用

求有理标准型时,先把 (xI-A) 化成 Smith 标准型,得到不变因子 (d_1(x),\dots,d_r(x))。然后对每个非零的不变因子,写出对应的友矩阵,再拼成分块对角:

[ C_{d_1(x)} \oplus C_{d_2(x)} \oplus \cdots \oplus C_{d_r(x)} ]

这就是有理标准型。

这里有一个容易让人意外的事实:两个矩阵如果有相同的若尔当标准型,它们一定相似;但在还没考虑数域扩充的问题时,若尔当形可能把本质不同的矩阵混在一起。有理标准型区分得更细,因为它的不变因子不取决于你是否在某个扩域里能开根。这个性质在群论表示、密码学里的有限域矩阵、控制理论的状态空间实现中都很有用。计算机代数系统里普遍实现的是有理标准型,而不是若尔当形,因为在浮点运算中若尔当形非常不稳定,而多项式环上的初等变换可以用精确有理数一步步做下去。

4. 标准型的实际应用与踩坑实录

4.1 矩阵指数、递推与控制理论里的标准型

标准型不是考试专用道具。最典型的一个应用是矩阵指数 (e^{tA})。在线性常微分方程组

[ \frac{dx}{dt}=Ax ]

里,解的表达式直接是 (x(t)=e^{tA}x(0))。直接算无穷级数不现实,但如果先把 A 化成若尔当形,问题就简单很多。若尔当块可以写为

[ J = \lambda I + N ]

其中 N 是一个幂零矩阵。对大小 2 的块,(N^2=0),所以

[ e^{tJ} = e^{\lambda t} e^{tN} = e^{\lambda t} \begin{pmatrix} 1 & t \ 0 & 1 \end{pmatrix} ]

对更大尺寸的块,高阶位置会出现 (t^2/2!)、(t^3/3!) 等项。把这个结果通过 P 换回原坐标系,就能得到完整解。类似的逻辑在差分方程里也一样:解矩阵的幂 (A^n) 时,用若尔当块

[ J^n = \lambda^n \begin{pmatrix} 1 & n\lambda^{-1} & \cdots \ 0 & 1 & \cdots \end{pmatrix} ]

就可以把高次幂变成有限项组合。控制理论里的能控标准型、能观标准型,也和有理标准型有着直接联系——通过选择合适的状态坐标,把系统方程化成友矩阵的形式,这样反馈增益就变成多项式系数的直接调参。这就是标准型“影响范围”的真实体现:它不只在纸面上,而是直接参与系统分析和算法设计。

4.2 高频疑难与常见误区速查

这里把我在批改和答疑时遇到最多的问题整理成一个速查表:

疑问正确理解
特征值有重根,一定不能对角化?错。要看几何重数是否等于代数重数。单位矩阵就是最好的反例。
特征值全互异,一定能对角化?对。因为每个特征值的几何重数至少为 1,又不超过代数重数 1,所以一定相等。
特征多项式一样,矩阵就相似?不够。特征多项式相同只能保证迹、行列式、特征值一样,不能保证若尔当块尺寸分布一样。
最小多项式一样,就相似?还不够。最小多项式只决定最大的若尔当块尺寸,多个相同尺寸的块分布仍可能不同。
算出的若尔当形对不对,怎么快速验证?直接验证 (AP=PJ),不要反过来先算 (P^{-1}AP),容易把列顺序搞反。
实数矩阵能不能直接用若尔当形?可以在复数域上分解,但结果会含复数。如果想保持实数表示,要用实若尔当标准型或有理标准型。

最后一个误区值得多说一句:若尔当标准型对理论证明极其好用,但不适合做浮点数值计算。原因是“重特征值”在浮点世界里几乎不可能精确出现。比如一个矩阵理论上应该是 (\lambda=1) 的二重若尔当块,经过一点点舍入误差,特征值可能变成 (1.0000001) 和 (0.9999999),于是若尔当形突然退化成一个可对角化的矩阵,标准型结构完全变了。所以数值计算里更常用的是Schur分解:把一个方阵正交相似成上三角矩阵,对角线依次是特征值,结构稳定得多。

4.3 手算和写代码时的小技巧

手算若尔当形时,我的习惯是:

第一,先把代数重数和几何重数列成一个表。每个特征值的几何重数就是若尔当块数量。如果几何重数等于 1,那这个特征值就是一个大块,尺寸等于代数重数。如果几何重数等于代数重数,那这个特征值只出对角块,没有剪切项。

第二,搭广义特征向量时从“最顶层”往回找。比如需要三阶块时,先找到满足 ((A-\lambda I)^2u=0) 但 ((A-\lambda I)u\neq0) 的向量,再一路作用回去得到链。不要从 v 往前推,因为 ((A-\lambda I)w=v) 不一定有解;从高一层往低层推,每一步都有解的概率更高。

第三,列基底顺序和若尔当块顺序保持一致。一般教材约定:如果块里 1 在上对角线,列向量顺序是从已归零的特征向量开始,一层一层往外排;如果 1 在下对角线,顺序反过来。自己用一套约定后,统一检查 (AP=PJ),能省掉非常多验算时间。

如果用代码辅助,以 Python 的 SymPy 为例:

import sympy as sp B = sp.Matrix([[1, 1, 0], [-1, 3, 0], [0, 0, 3]]) J, P = B.jordan_form() sp.pprint(sp.simplify(P.inv() * B * P))

输出结果就是若尔当形。注意,jordan_form()内部用的是精确符号算法,所以适合教材里的整数矩阵。如果你要做大规模数值计算,不要用这个函数,改用数值线性代数库里的 Schur 分解。

想验证有理标准型,也可以用类似方式调用rational_form(),它会直接在有理数域上给出标准型。我个人的体会是:每次算完标准型,先拿最小多项式检查一遍。若尔当形里最大的那个块尺寸,一定等于最小多项式中对应因子的次数;有理标准型里最后一个不变因子就是最小多项式。这条规律只要对上了,标准型基本不会算错。

返回列表