“矩阵的相似标准型”这几个字在矩阵论里算是一道分水岭。前两篇我们聊了矩阵相似标准型的基本理论用λ-矩阵、不变因子、初等因子判断两个矩阵是否相似以及Jordan标准型的存在性。这些概念在理论上很漂亮但很多人在这一步就卡住了理论背得下来拿到一个具体矩阵却不知道从哪里下手或者费劲写出来标准型一旦要连相似变换矩阵P一起求立刻一头雾水。这一篇作为系列第三篇我打算换个画风不堆定理只讲实战。重点解决三件事怎么快速写出一个给定矩阵的Jordan标准型怎么把相似变换矩阵P一起求出来以及求完之后怎么用在矩阵幂、矩阵指数和线性微分方程组上。想熟练使用矩阵论的人、考试复习党、以及工程里需要算矩阵函数的朋友这篇应该都能帮上忙。1. 相似标准型为什么值得花三篇来学1.1 相似标准型解决的真实问题在线性代数里我们经常说“同一个线性变换在不同基下对应不同的矩阵”。这句话翻译成矩阵语言就是如果两个矩阵A和B相似即存在可逆矩阵P使得B P^{-1}A P那么它们其实描述的是同一个变换只是坐标系选得不一样。既然基可以换那自然会问一个问题能不能找到一组最顺手的基让这个变换的矩阵变得最简单最简单到什么程度最好是能化成对角矩阵。如果实在不行也要像拼积木一样只留下最小的一块块子结构。这个最简形式就是矩阵的相似标准型。相似标准型不只是考试题目里的“求Jordan标准型”它更是一个分类工具。两个矩阵是否相似本质上是看它们在相似变换下能不能归到同一类。特征多项式相同只能说明它们有相同的“总体特征”但不是充分条件真正能给出完整分类的是不变因子、初等因子这些东西。前三篇的核心就是把这个分类逻辑从理论推到实际计算。更现实的价值是化简计算。你想算A^100或者e^{A t}直接硬算非常痛苦。但如果知道A和某个结构清晰的Jordan标准型J相似那么A^100 P J^{100} P^{-1}而J的幂和指数都有现成公式直接套结论就行。工程控制系统里的状态转移矩阵很多就是这么算的。1.2 这一篇的路线图我知道有些读者会问既然前两篇已经讲了Jordan标准型的存在性和唯一性这一篇还能讲什么这里我要说实话前两篇的内容往往停留在“理论上存在”但具体到“怎么算”很多教材反而不是特别强调。标准的做法是去求λ-矩阵的Smith标准型再读不变因子。这个方法本身很机械但对一个5阶以上的矩阵手算Smith标准型能把人算崩溃。所以这一篇的路线设计如下第一部分先用几何数据判断Jordan标准型结构特征值、代数重数、几何重数、以及一个非常实用的“秩序列法”。第二部分用一个4阶矩阵从头到尾手算一遍得到标准型J和变换矩阵P。第三部分整理我踩过和见过别人踩过的坑为什么Jordan链每次都会断为什么块顺序写错后果很严重第四部分讨论实际应用A^n、e^{At}、微分方程最后补充一条和Jordan标准型互补的路线——有理标准型。你跟着算一遍会明显感觉到原来相似标准型不是靠记忆而是靠流程。2. 先看懂Jordan标准型的“积木”块结构是核心2.1 Jordan块和Jordan矩阵长什么样Jordan标准型由若干Jordan块排成对角阵组成。一个r阶Jordan块是一个上三角矩阵对角线上全是同一个数λ紧贴着对角线的上方或下方是一条1。以特征值λ、阶数r为2和3为例它们长这样J2(λ) [ λ 1 ] [ 0 λ ] J3(λ) [ λ 1 0 ] [ 0 λ 1 ] [ 0 0 λ ]你可以把Jordan块理解为“在特征向量的基础上补了一串广义特征向量”。如果矩阵能够完全对角化那说明这些广义特征向量其实不需要直接用普通的特征向量就够了。一旦广义特征向量出现意味着特征子空间不够大必须在更长的链上找向量。因此Jordan矩阵就是把若干Jordan块拼在一起J [ J_{m1}(λ1) 0 ] [ 0 J_{m2}(λ2) ] [ ... ]这里有一个容易忽略的点次对角线上的那个“1”不是随便写上去的。如果没有这些1矩阵就变成对角阵两个矩阵虽然特征值一样但一个是可对角化的另一个不是。这个1就是连接链上相邻向量的桥梁。2.2 代数重数、几何重数与块数的对应关系拿到一个矩阵A先求出全部特征值。如果特征值互不相同那恭喜你矩阵一定可对角化Jordan标准型就是对角阵所有Jordan块都是一阶的。麻烦的是特征值重复的情况。对一个特征值λ有两个关键数字代数重数aλ在特征多项式里的重次数。它等于所有以λ为特征值的Jordan块阶数之和。几何重数g特征子空间的维数也就是λ对应的线性无关特征向量个数。它等于以λ为特征值的Jordan块的块数。举个例子如果一个6阶矩阵里特征值2的代数重数是5几何重数是3那么特征值2对应的Jordan块一定有三个这三个块的阶数加起来等于5可能的分布是“221”或者“311”等。到底哪一种光靠这两组数据还不够需要看下一步的秩序列。特征值的代数重数可以从特征多项式中一眼看出来而几何重数必须通过计算来得到g dim ker(A - λI) n - rank(A - λI)这里的n是矩阵的阶数。很多人记不住这个公式我就习惯直接想A-λI这把线性映射消掉了一部分维数剩下的核空间就是“被压扁到同一高度”的特征向量们。2.3 用秩序列精确“拼”出块结构为了区分“22”和“31”这类结构需要把矩阵的幂次也拿进来。记N A - λI然后考察N的幂的秩r_k rank(N^k)并令 r_0 n核心结论是阶数不小于k的Jordan块个数等于r_{k-1} - r_k。这个结论的推导并不复杂只需要看N的零空间维数随着幂次提高增长了多少。每多出1维就说明有一条长度至少为k的链存在。有了这个序列可以把每一个阶数的块数精确拆出来阶数不小于1的块数 r0 - r1 阶数不小于2的块数 r1 - r2 阶数不小于3的块数 r2 - r3 ... 阶数恰好为1的块数 (r0-r1) - (r1-r2) 阶数恰好为2的块数 (r1-r2) - (r2-r3)下面用同一个特征值λ2、矩阵阶数n4的情况直观对比三种典型结构实际情况rank(N)rank(N^2)rank(N^3)不小于1的块不小于2的块不小于3的块最终结论四个一阶块0004001111两个二阶块20022022一个三阶加一个一阶21021131看到没有同样的代数重数、同样的几何重数秩序列却可以把“22”和“31”完全不同地分开。这就是为什么我强烈建议不要只看最小多项式直接算一组N^k的秩一步到位。3. 实操一个4阶矩阵从求标准型到P矩阵全流程3.1 题目与特征值计算下面我们跟着算一个具体的矩阵A [ 2 0 1 0 0 2 0 0 0 -1 2 0 0 0 0 2 ]一眼看上去主对角线都是2右上角有个1第三行第二列有个-1。这种矩阵在真正做矩阵论练习时很常见不是典型的分块对角但也不至于难到无从下手。先求特征多项式。计算det(λI - A)λI - A [ λ-2 0 -1 0 ] [ 0 λ-2 0 0 ] [ 0 1 λ-2 0 ] [ 0 0 0 λ-2 ]按第一列展开每一层都带着λ-2因子最后得到det(λI - A) (λ - 2)^4所以特征值只有λ2代数重数是4。因为只有一个特征值后面的所有计算都围绕N A - 2I展开。3.2 用秩序列锁定Jordan块先写出NN A - 2I [ 0 0 1 0 ] [ 0 0 0 0 ] [ 0 -1 0 0 ] [ 0 0 0 0 ]逐个算秩r0 4 r1 rank(N) 2 r2 rank(N^2) 1 r3 rank(N^3) 0N^2和N^3分别是N^2 [ 0 -1 0 0 ] [ 0 0 0 0 ] [ 0 0 0 0 ] [ 0 0 0 0 ] N^3 零矩阵于是按照秩序列法阶数不小于1的块数 r0 - r1 4 - 2 2 阶数不小于2的块数 r1 - r2 2 - 1 1 阶数不小于3的块数 r2 - r3 1 - 0 1所以要形成一个3阶块和一个1阶块Jordan标准型就是J [ 2 1 0 0 0 2 1 0 0 0 2 0 0 0 0 2 ]这里第一个3阶块对应特征值2最后的[2]是独立的1阶块。最小多项式是(λ-2)^3因为最大块的阶数是3。3.3 构造Jordan链得到相似变换矩阵P现在要找一个可逆矩阵P满足AP PJ。先把P按列分块P [p1, p2, p3, p4]其中前三个向量对应3阶块最后一个对应1阶块。先解特征方程组Nx 0N x [ x3 ; 0 ; -x2 ; 0 ] 0得到x2 x3 0x1和x4任意。所以基础特征向量可以取e1 (1,0,0,0)^T和e4 (0,0,0,1)^T。到这里很多人就直接随便选一个特征向量当p1然后开始链式求解。这里必须停下来先看一眼N的列空间。N的每一列分别是0、-e3、e1、0所以列空间是span{e1, e3}。要找到3阶链需要满足N p2 p1也就是说p1必须落在N的列空间里。e1在列空间里e4不在列空间里。如果选e4当p1那么N x e4无解Jordan链根本走不下去。因此取p1 e1。接着解N p2 e1N p2 (p2_3, 0, -p2_2, 0)^T要等于(1,0,0,0)^T需要p2_3 1p2_2 0。取p2 e3 (0,0,1,0)^T。再解N p3 e3此时需要p3_3 0-p3_2 1所以p3_2 -1。取p3 (0,-1,0,0)^T。1阶块那里不需要链只需另一个线性无关的特征向量取p4 e4即可。现在把四个列向量拼起来P [ p1 p2 p3 p4 ] [ 1 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 1 ]注意列的顺序p1、p2、p3是链头到链尾的顺序不能反。如果链方向反了得到的块就不是J3(2)而是J3(2)的转置相似关系对不上。3.4 验证APPJ以及P的逆算完P之后强烈建议立刻验证。你先算A乘以P的四列A p1 A e1 (2,0,0,0)^T A p2 A e3 (1,0,2,0)^T A p3 A(0,-1,0,0)^T (0,-2,1,0)^T A p4 A e4 (0,0,0,2)^T再算P乘以J的四列PJ第一列 2p1 (2,0,0,0)^T PJ第二列 p1 2p2 (1,0,2,0)^T PJ第三列 p2 2p3 (0,-2,1,0)^T PJ第四列 2p4 (0,0,0,2)^T两组结果完全一致说明AP PJ真的成立P就是我们要的相似变换矩阵。如果想去验证P^{-1}AP J还需要P的逆。这里P的结构很特殊只要观察它对基的作用就能写出来P^{-1} [ 1 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 1 ]日常手算时求逆一般用增广矩阵行变换。这个例子因为P是一个简单的置换加缩放矩阵所以逆矩阵也特别规则。4. 实操中最容易翻车的几个坑4.1 特征向量选错链走不下去这是我在自己学习时踩过最大的坑。理论上说“求Jordan标准型”的核心动作不是求标准型本身而是构造相似变换矩阵。构造变换矩阵时最怕出现下面这个情况特征值λ的几何重数大于1你随便选了特征子空间里的一个向量当链头结果解N x p时发现无解。比如上面例子里如果选p1 e4那么N x e4永远不可能成立因为e4根本不在N的列空间里。更稳妥的做法是从高次幂方向反推如果要构造一个m阶Jordan块先找一个满足N^m v 0但N^{m-1} v ≠ 0的向量v然后令链尾为v链头为N^{m-1}v中间倒序生成。这样虽然计算量略大但不需要碰运气。调试时报错信息说白了就是“无解”那就要回头重选向量。4.2 块顺序与P列顺序不匹配Jordan标准型里面各个块的顺序是可以调整的。比如你写diag(J3(2), J1(2))还是diag(J1(2), J3(2))只要两个矩阵的P列顺序也对应调整它们都是正确答案。教材只说“在不计块的排列顺序下唯一”但实际做题时你写出来的J和P必须是一对。我见过不少同学单独看J没错单独看P也像模像样但AP PJ验证就是过不去。原因通常是J里把一阶块放在了前面P里却把链放在了前面。解决方法是养成一种习惯先决定J的块顺序然后严格按照“同一次序”排列P的列。每次验证完再写结论就不会被扣分。4.3 把几何重数与其他重数搞混几何重数是“特征子空间的维数”代数重数是“特征多项式中因子的次数”。这两个概念很多人嘴上分得清手上却用错。特别是特征值只出现一次时几何重数等于代数重数等于1没什么迷惑性一旦出现重特征值就有人想当然地用代数重数去猜块数。记住这个判断几何重数g n - rank(A-λI)必须老老实实用秩算。永远不要从特征多项式直接猜g因为你无法从特征多项式里看出特征子空间被压缩成了什么样。g才是Jordan块的个数代数重数只是块大小总和。4.4 最小多项式判最大块阶的局限最小多项式里的因子(λ-λ_i)的指数等于特征值λ_i对应的最大Jordan块阶数。这个结论很好用但请注意它只能告诉你“最大的块有多大”不能告诉你“一共有几块”。举例来说3阶块1阶块与3阶块3阶块如果都只关注最大块阶最小多项式都是(λ-λ_i)^3但块数完全不同。这时候必须回到秩序列法。所以每次求标准型我都建议至少算到N^2的秩甚至N^3的秩直到零矩阵或秩不再下降为止。这样能避免很多误判。5. 标准型的价值不止考试算A^n、e^{At}、解微分方程组5.1 为什么用标准型算矩阵函数很多工程问题最后会落到“算矩阵函数”上。线性常微分方程组的解是状态转移矩阵e^{At}离散系统的迭代是A^k这些计算如果直接做阶数稍高一点就是灾难。但有了相似标准型一切都变成两个步骤先用A P J P^{-1}把问题搬到J上算完J的函数再用P和P^{-1}搬回来。这里有个前提是J的结构足够简单。Jordan块可以写成两个可交换矩阵的和J λ I N其中N是只在次对角线上有1的幂零矩阵。I和N可交换所以所有关于“和”的公式都可以直接展开比如二项式定理、指数级数都不存在顺序问题。5.2 Jordan块幂与矩阵指数的公式对m阶Jordan块J_m(λ)因为N^m 0所以幂方计算只截取有限项J_m(λ)^n λ^n I C(n,1) λ^{n-1} N C(n,2) λ^{n-2} N^2 ... C(n, m-1) λ^{n-m1} N^{m-1}当n比m-1小时后面那些组合数理解为0即可。最常见的2阶块公式是[ λ 1 ]^n [ λ^n n λ^{n-1} ] [ 0 λ ] [ 0 λ^n ]矩阵指数也有完全平行的公式。对J_m(λ)考虑参数te^{λIN}t e^{λt} e^{Nt} e^{λt} ( I tN t^2/2! N^2 ... t^{m-1}/(m-1)! N^{m-1} )2阶块的结果是e^{[ λ 1 ]t} e^{λt} [ 1 t ] [ 0 λ ] [ 0 1 ]这个形式在控制理论里非常常见矩阵指数每一列就是状态转移的一个基础解。5.3 一个直接可套用的小例子用最简单的2阶Jordan块演示。设B J2(2)那么B^n [ 2^n n 2^{n-1} ] [ 0 2^n ] e^{Bt} e^{2t} [ 1 t ] [ 0 1 ]你只需要把B代入A^n P J^n P^{-1}或者e^{At} P e^{Jt} P^{-1}搞定。如果回到我们算过的4阶矩阵J是diag(J3(2), [2])那J^n的第一块用三阶公式第二块就是2^ne^{Jt}同理。J和P都在手剩下就是矩阵乘法没有任何技术障碍。6. 补充一条备选路线有理标准型6.1 Jordan标准型的“不合适”场景Jordan标准型有一个前提你愿意把特征值放到代数闭域里。对实数矩阵来说特征多项式如果有复根Jordan标准型里就会出现复数比如旋转矩阵的特征值是共轭复数它的Jordan标准型是复对角阵。这在理论推导时没问题但某些工程和数值场景里你会觉得“我明明只想要实数结果凭什么必须跑到复数里转一圈”。有理标准型就是为了这种情况存在的。它只使用特征多项式在给定数域里的不可约因式不需要把特征值显式解出来所有构造过程都是有理运算。它和Jordan标准型一样也是若干个“伴侣矩阵”的直和。6.2 有理标准型的基本构造思路构造有理标准型的关键是求矩阵的Smith标准型拿到不变因子。忽略那些等于1的不变因子以后对每个非常数的不变因子d(λ)都对应一个伴侣矩阵。伴侣矩阵长得很有规律如果多项式是λ^k a_{k-1}λ^{k-1} ... a_0那么它对应的伴侣矩阵是C [ 0 0 ... 0 -a0 ] [ 1 0 ... 0 -a1 ] [ 0 1 ... 0 -a2 ] [ ... ] [ 0 0 ... 1 -a_{k-1} ]把这些伴侣矩阵按对角排列就得到一个有理标准型。如果特征值都能求出来Jordan标准型往往更直观如果特征值求不出或者实在不想用复数有理标准型就是合适的选择。这两条路线并不矛盾它们是同一套“相似不变量”在不同计算策略下的两个输出。在实际应用里矩阵的相似标准型不是终点而是工具。我个人的体会是Jordan标准型的计算流程必须亲手走一遍完整的尤其要自己构造一条三阶以上的Jordan链。没踩过“链断了”的坑光看公式永远记不住为什么向量必须选在列空间里。等你完整算过一遍再回头看那些存在性定理会发现教材里每一句话都不是空话。矩阵论里很多抽象结论到最后都长在那些具体的计算过程里。
阅读完成 · 觉得有帮助?