资讯详情

资讯详情

AB=BA何时成立:共享不变子空间与中心化子

矩阵乘法不满足交换律这句话几乎每个学过线性代数的人都背过但很少有人顺着往下多问一句那到底什么时候 AB BA 才成立更有意思的是这个看起来纯代数的问题背后藏着一句特别好懂的几何描述——两个线性变换能交换等价于它们承认同一套不变方向也就是共享特征子空间。这篇内容就从矩阵乘法的行观点和列观点开始铺顺着特征值、特征子空间、Jordan 链一路推到中心化子的维数公式再落到旋转、反射、投影这些具体几何图像上最后给出一套能直接照着跑的判断与验证流程。刚啃完特征值和相似对角化、还对为什么特征向量这么重要半懂不懂的同学可以把这篇当补课材料做图形变换、信号处理、数值计算的朋友也能从可交换等于共享不变子空间这条直觉里捞到实际收益比如判断两个滤波算子能不能换序、两个投影能不能合并。1. 矩阵乘法为什么天生不满足交换律行列双视角1.1 列观点右乘一个矩阵是在逐列施加变换把 B 按列拆开写成 B [b₁, b₂, ..., b_p]那么 AB 立刻有了一个很干净的解释AB A[b₁ b₂ ... b_p] [Ab₁ Ab₂ ... Ab_p]这句话的意思是AB 的第 j 列就是 A 作用在 B 第 j 列上的结果。换成人话右乘一个矩阵等于对左边这个矩阵的每一列同时做同一个线性变换。列是被加工的对象A 是加工机器。这个视角特别适合理解为什么矩阵能表示坐标系变换。如果 B 的列是某个图形的一组顶点坐标那 AB 就是把整个图形按 A 变换了一遍每一列每个点走同一条规则。也正因为如此矩阵乘法天然带着批处理的味道一次算完所有的点。但注意一个反直觉的点这个视角里 A 是主动的B 是被动的。而 A 本身也是由列组成的A 的列才是目标基向量被送到哪里的说明书。所以当你把 AB 看成A 作用于 B 的列时你其实是在用 A 的列作为输出方向用 B 的列作为输入坐标。这个输入—输出的错位是后面所有不交换现象的根源。1.2 行观点左乘一个矩阵是在重新配比行把视线换个方向从行看过去AB 的第 i 行可以写成(AB)ᵢ,: aᵢ₁B₁,: aᵢ₂B₂,: ... aᵢₙBₙ,:也就是AB 的第 i 行是 B 的所有行按 A 第 i 行给出的系数做的一次线性组合。这条式和列视角是完全对称的只是把列换成了行。行观点在解线性方程组的时候最常用因为消元法本质上就是在做行的线性组合。你每做一次第二行减去两倍第一行其实就是在左边乘了一个初等矩阵。所以左乘矩阵等于做行变换右乘矩阵等于做列变换这是线性代数里最该刻进肌肉记忆的一条对应关系。把两个视角并排放就能看清 AB 与 BA 的差别到底出在哪AB 是用 A 的行去混 B 的行BA 是用 B 的行去混 A 的行。两套混合规则、两个混合对象顺序一换结果自然不同。用一个最直白的例子取 A [[1,2],[3,4]]取 B 为交换矩阵 [[0,1],[1,0]]手算一下 AB [[2,1],[4,3]]而 BA [[3,4],[1,2]]。前者正好是 A 的两列交换后者正好是 A 的两行交换。右乘交换矩阵换列左乘交换矩阵换行就这么简单粗暴。换行和换列本来就不是同一件事所以 AB 和 BA 通常不相等一点都不神秘。1.3 外积视角矩阵乘法还是若干个秩一矩阵的叠加除了行列两个视角还有第三个常被忽略但极好用的解读。把 A 按列拆成 a₁, ..., aₙ把 B 按行拆成 b¹, ..., bⁿ上标表示行向量那么AB a₁b¹ a₂b² ... aₙbⁿ每一个 aₖbᵏ 都是一个列向量乘一个行向量得到的是一个秩为 1 的矩阵。所以矩阵乘法可以理解成用 A 的列方向按 B 的行权重重一层层叠出结果。这个视角解释了很多结构现象。比如两个矩阵相乘的秩不会超过任一因子比如低秩近似为什么总是能写成几个外积之和再比如后面要讲的可交换为什么往往要求两个矩阵共享同一组分解结构——因为外积里的 aₖ 和 bᵏ是绑定在一起的你想让叠加顺序互换还不改结果就得让这两套绑定关系互相兼容。顺带提一句三种视角都要会不要只挑一个。列视角适合做变换的复合分析行视角适合做消元和方程求解外积视角适合分析秩和结构分解。切换视角的能力比记住任何一个具体公式都值钱。2. 可交换的条件从平凡到精细的四层2.1 第一层数量矩阵以及任何矩阵和它自己的多项式最没有门槛的可交换情形是数量矩阵A cI。它和任何同阶矩阵都能交换因为 cI·B cB B·cI。道理很朴素数量矩阵对所有方向一视同仁它没有任何偏好所以谈不上和谁冲突。更一般的一层是模型 f(A) 与 A 的关系。设 f(x) c₀ c₁x ... cₘxᵐ 是任意多项式那么A·f(A) f(A)·A 恒成立原因简单得几乎不用证明A 和 A 的任意次幂自己就能交换AᵏAˡ Aᵏ⁺ˡ AˡAᵏ而矩阵乘法满足分配律所以把多项式展开、逐项交换、再合并回去就行。任何矩阵都和它自己的多项式可交换这是可交换家族里最稳定的一支。这条结论有个漂亮的逆定理作为补充与 A 可交换的矩阵构成的集合叫 A 的中心化子记作 C(A)本身是一个含单位阵的子代数而与所有 C(A) 中元素都可交换的矩阵恰好就是 A 的多项式全体。这被称为双中心化子定理通俗讲就是A 的社交圈的公共朋友圈正好就是 A 的家族成员。2.2 第二层可同时对角化也就是共享同一组特征向量真正有几何味道的条件出现在这一层。先看一个最典型的事实如果 A 有 n 个互不相同的特征值那么能与 A 可交换的矩阵一定可以写成 A 的多项式。推导过程值得完整走一遍。设 A 的特征对为 (λᵢ, vᵢ)i 1..n特征向量线性无关构成一组基。若 AB BA在这条式两边作用 vᵢA(Bvᵢ) B(Avᵢ) B(λᵢvᵢ) λᵢ(Bvᵢ)这说明 Bvᵢ 要么是零向量要么仍然是 λᵢ 的特征向量。而 λᵢ 互不相同它的一维特征子空间只有 vᵢ 这一个方向所以 Bvᵢ 只能等于某个标量 μᵢ 倍的 vᵢ。也就是说B 在 A 的每一根特征方向上只能做拉伸不能改变方向。既然 B 在基 {vᵢ} 下是对角的那 B 就是特征值 μᵢ 拼成的对角矩阵再配合插值多项式就能写出一条 f 使得 f(λᵢ) μᵢ于是 B f(A)。特征值有重根时条件稍微放宽一点但结构完全一样设 A 可对角化特征子空间为 E₁, ..., E_k那么B 与 A 可交换当且仅当每个 Eᵢ 都是 B 的不变子空间。也就是说 B 在每个 Eᵢ 内部可以任意折腾但绝对不许把一个抽屉里的向量扔到另一个抽屉去。这时候中心化子的维数可以精确算出来dim C(A) (dim E₁)² (dim E₂)² ... (dim E_k)²这个公式很好记也很好用。拿 A diag(1, 2) 举例特征子空间都是 1 维维数是 1 1 2与它可交换的矩阵正好是对角矩阵。拿 A I 举例只有 1 个特征子空间维数 n于是 dim C(A) n²也就是所有矩阵都能和 I 交换。再拿 3 阶对角矩阵 diag(1, 2, 3) 举例dim C(A) 3只比多项式这一支大一点说明它的偏好方向被钉得很死。2.3 第三层不可对角化时Jordan 链把中心化子撑大如果 A 不能对角化情况会变得更细。此时需要看 Jordan 标准形把 A 按特征值分组同一特征值可能有多个 Jordan 块块的大小记作 nᵢ。设同一特征值 λ 下的所有块大小为 n₁, ..., n_r那么中心化子的维数有闭式表达dim C(A) Σ_λ Σ_{i,j} min(nᵢ, nⱼ)换个等价的写法对每个特征值 λ统计每个尺寸 k 下大小至少为 k 的 Jordan 块个数记为 m_k(λ)则 dim C(A) Σ_λ Σ_k m_k(λ)²。这个形式更好记也更容易手算。举几个具体数字感受一下。单个 n 阶 Jordan 块 Jₙ(λ) 的中心化子维数是 n因为与它可交换的矩阵必须是上三角的 Toeplitz 矩阵也就是沿着对角线方向平移不变的那些参数正好 n 个。用 2 阶例子验证A [[1,1],[0,1]]设 B [[a,b],[c,d]]算 AB [[ac, bd],[c, d]]BA [[a, ab],[c, cd]]令两者相等得到 c 0、d a于是 B [[a,b],[0,a]]两个自由参数维数确实是 2而且每个这样的 B 都是 A 的多项式。再看同一特征值下两个 2 阶 Jordan 块的情况维数是 min(2,2) 的四倍也就是 8明显比多项式能给的维数大。几何上可以这样理解每个 Jordan 块对应一条链同一个链内部只能整体平移但不同链之间在相同层级上可以互相耦合耦合的自由度按较小块的大小来算。Jordan 结构越碎、越对称可交换的伙伴就越多。顺带说清楚一个常见误解dim C(A) 并不总等于 A 的极小多项式的次数。等号成立的条件是 A 是循环矩阵也就是每个特征值只对应一个 Jordan 块。一般的矩阵中心化子维数只会不小于极小多项式次数两者之间差出来的部分就是块与块之间的横向耦合。这个细节在做矩阵方程 AX XB 的求解时非常关键因为解空间的维数就是由这套结构决定的。2.4 第四层交换子语言以及迹这道唯一的门槛把所有讨论收拢到一个符号上会清爽很多交换子 [A, B] AB - BA。可交换就是 [A, B] 0。交换子满足两条好用的恒等式值得记住莱布尼茨型[A, BC] [A, B]C B[A, C]迹的湮灭tr[A, B] tr(AB) - tr(BA) 0对任意方阵成立第二条尤其值得玩味。它说的是即使 A、B 不可交换它们的乘积的迹照样相等。可交换性丢掉了但留下了一个残余的对称性这个对称性就是迹。反过来的问题更有意思随便给一个迹为零的矩阵 X是不是总能找到 A、B 使得 X AB - BA答案是肯定的在实数或复数域上迹为零的矩阵全体正好就是所有交换子组成的集合。换句话说迹是唯一的障碍物只要迹是零就没别的拦路虎了。还有一个即使不可交换也成立的结论AB 与 BA 的特征多项式相同对同阶方阵而言因此特征值、行列式、迹全都一样。证明思路很轻巧当 A 可逆时BA A⁻¹(AB)A两者相似特征多项式当然相同A 不可逆时用 A εI 去逼近特征多项式关于矩阵元素是连续的多项式函数取极限即可。也可以直接说可逆矩阵在矩阵空间里稠密而两边之差是一个恒为零的多项式所以处处为零。知道这条不代表可以偷懒。特征值相同远不足以推出可交换这一点下一节还会专门讲。3. 几何意义可交换到底说明了什么3.1 核心机制互相保持对方的不变子空间把上面所有代数条件翻译成一句话A 与 B 可交换等价于 B 把 A 的每个特征子空间映回它自己同时 A 也把 B 的每个特征子空间映回它自己。两边的要求是一回事因为可交换本身是对称的。一个线性变换的全部性格就写在它的特征分解里哪些方向被拉长、哪些被压缩、哪些被旋转、哪些被压扁。当两个变换能交换就意味着它们在哪些方向特殊这件事上达成了共识。B 不会把 A 的偏爱方向搅乱A 也不会破坏 B 的偏爱方向两者在同一个几何框架里各行其是。这解释了一个看起来很奇怪的现象为什么中心化子的维数越小说明这个矩阵越有个性。A 有 n 个互异特征值时它的偏爱方向被完全钉死只留下 n 维的自由度几乎只能是自己多项式的那点空间A I 时它毫无偏好于是所有变换都能和它相处自由度直接拉到 n²。维数公式 dim C(A) Σ (dim Eᵢ)² 其实就是一个各向同性程度的度量从 n 到 n² 连续变化。进一步说如果两个矩阵不仅可交换而且都可对角化那么存在同一组基使它们在基下同时是对角矩阵。这就是同时对角化定理也是可交换性几何意义的最终形态它们承认同一个坐标系在这个坐标系里各自只是纯粹的伸缩。3.2 旋转和缩放二维里能互相交换的正好就是复数拿二维来验算一下。旋转矩阵记作 R(θ) [[cosθ, -sinθ],[sinθ, cosθ]]缩放矩阵记作 S diag(s, t)。把两个乘积都写出来对比RS 的第一行第二列是 -t·sinθSR 的第一行第二列是 -s·sinθRS 的第二行第一列是 s·sinθSR 的是 t·sinθ。要两边相等当 sinθ ≠ 0 时必须 s t也就是 S 只能是数量矩阵 λI。结论很干净一个真正的旋转只和保持形状的缩放均匀缩放相处得来。这也符合直觉旋转会把横竖方向搅在一起非均匀缩放恰恰依赖横竖方向互不干扰两者天然敌对。但真正的宝藏在这个观察的背后。所有形如 [[a, -b],[b, a]] 的矩阵旋转加均匀缩放彼此之间都能交换它们构成的集合对加法、乘法、求逆都封闭是一个域和复数域完全同构a bi 对应的就是那个矩阵。于是为什么矩阵乘法不交换这个困惑在二维里得到了一个意想不到的答案——不交换是常态可交换的那一小块恰好人间的复数乘法。矩阵世界比数系更不规矩复数只是恰好落在大世界里的一块规整的地砖。再把 J [[0,-1],[1,0]] 单独拎出来看。它满足 J² -I中心化子维数是 2正是 {aI bJ}。几何上J 是 90 度旋转它的朋友必须承认它的两个复特征方向对应特征值 ±i 的复空间在实几何里就表现为旋转角度任意但缩放必须均匀。这一小节结束后你应该能理解为什么复数在工程里到处都是它正好是旋转 均匀缩放这个交换代数的代数化身。3.3 反射和投影垂直就交换交叉就不交换反射的例子特别适合拿来做几何直觉训练。在平面上关于角度 θ 的直线做反射的矩阵可以写成 R_θ [[cos2θ, sin2θ],[sin2θ, -cos2θ]]。取 θ 0 得到 diag(1, -1)关于 x 轴翻转取 θ π/2 得到 diag(-1, 1)关于 y 轴翻转。两者相乘先翻 x 再翻 ydiag(1,-1)·diag(-1,1) -I先翻 y 再翻 xdiag(-1,1)·diag(1,-1) -I结果一样都是旋转 180 度。当两条反射轴互相垂直时两次反射的顺序完全不影响结果。几何原因一目了然垂直意味着空间被拆成两个互不干扰的一维方向一个变换只管横的一个只管竖的各管各的当然不存在先后问题。反过来取 θ π/4反射矩阵变成交换矩阵 [[0,1],[1,0]]。这时 R₀R_{π/4} [[0,1],[-1,0]]而 R_{π/4}R₀ [[0,-1],[1,0]]一个转 90 度一个转 -90 度交换失败。轴不垂直时两个反射会互相拧对方的方向顺序就变得致命。投影的例子同样漂亮。正交投影矩阵的特点是 P² P 且 Pᵀ P。对两个正交投影 P 和 Q有一个非常好用的判据它们可交换当且仅当 PQ 本身还是一个正交投影也就是当且仅当 PQ 对称。这条判据在手算时比直接比较 AB 和 BA 快得多。拿三维里的两个具体投影试试P 投影到 xy 平面矩阵是 diag(1,1,0)Q 投影到 yz 平面矩阵是 diag(0,1,1)。两个方向都算一遍乘积都是 diag(0,1,0)可交换。为什么因为它们共享 y 轴这条交集线整个空间被干净地切成四块且互相正交只在 U 里的部分、只在 V 里的部分、两者共有的部分、两者都没有的部分四块拼起来正好是整个空间。这就是两个子空间处于一般位置交角规整的几何含义。如果两个投影平面斜着相交比如把一个平面倾斜 30 度PQ 就不再对称顺序立刻变得重要。3.4 三维旋转和变换群顺序无关要付出什么代价把二维的结论搬到三维图像会更立体。绕同一根轴的两个旋转永远可交换R_z(α)R_z(β) R_z(αβ) R_z(β)R_z(α)。原因是它们共享那根轴特征值 1 的不变方向也共享垂直于轴的那个平面两个变换在这两处都互不干涉。绕不同轴的两个旋转通常不可交换。但有一个例外值得记住绕两根互相垂直的轴各转 180 度。取绕 x 轴转 180 度的矩阵 diag(1,-1,-1)绕 y 轴转 180 度的矩阵 diag(-1,1,-1)两种顺序的乘积都等于 diag(-1,-1,1)也就是绕 z 轴转 180 度。两次 180 度翻转等于一次 180 度翻转而且顺序无关这是三维旋转群里的一个小彩蛋也是很多图形学代码里做对称性优化的基础。换成绕 x 轴转 90 度和绕 z 轴转 90 度就不行了两种顺序得到两个不同的旋转姿态差得还挺明显。这种姿态差异在机器人运动规划里是实打实的麻烦同一个末端位姿走不同的关节顺序可能需要完全不同的中间路径误差也会沿着不同的方向放大。还有一个更有味道的结论和矩阵指数有关e^A e^B e^(AB) 成立当且仅当 AB BA。这条把可交换性和变换可以合并直接挂钩了。可交换意味着两次连续变换可以打包成一次不用关心谁先谁后不可交换意味着顺序不可省略必须老老实实分段处理。从群论角度看两个可交换的变换生成的群是阿贝尔群这是顺序无关最标准的代数表述。4. 实操怎么判断、怎么构造、怎么验证4.1 手算路线图从特征值走到解方程拿到两个具体的矩阵想判断它们能否交换我一般按下面这个顺序走基本不会绕远路。第一步先看有没有明显的平凡结构。如果其中一个矩阵是数量矩阵或者一个是另一个的多项式那直接判定可交换不用算。反过来如果两个矩阵都是对称矩阵且能各自对角化这属于最容易被忽略的一类。第二步算 A 的特征值看是否有重根。如果 n 个特征值互不相同中心化子的维数就是 n与 A 可交换的矩阵必定是 A 的多项式于是问题退化成B 能不能写成 A 的多项式直接设 B c₀I c₁A ... c_{n-1}A^{n-1}解 n² 个线性方程即可。二阶的情况下两三个式子就出结果。第三步如果有重根判断 A 能不能对角化。看每个特征值的几何重数是否等于代数重数也就是解 (A - λI)x 0 得到的自由变量个数。能对角化的话把每个特征子空间 Eᵢ 算出来然后检查 B 是否把每个 Eᵢ 映到自身——具体做法是取 Eᵢ 的一组基排成矩阵 Vᵢ验证 BVᵢ 的每一列都落在 Eᵢ 的列空间里也就是验证 (I - P_i)BVᵢ 0其中 P_i 是到 Eᵢ 的投影。第四步不能对角化的话只能老实用 Jordan 链的思路。手算时一般只要求能算出中心化子的维数用 min(nᵢ, nⱼ) 那个公式就够了不一定要把每个基向量都写出来。这条路线的关键在于第二步的判断它一次性把问题分成极易和有点麻烦两大类。我在教学和实际项目里发现绝大多数人要判断的矩阵都属于特征值互异或者有明显重根可对角化这两类真正需要动 Jordan 形的场合并不多。4.2 把交换子方程写成线性方程组Kronecker 技巧上面都是手算思路到了需要程序处理的时候还得把它变成一个标准线性代数问题。这里有个非常干净的转换方式把矩阵 B 按列拉直成向量 vec(B)那么两条恒等式成立vec(AB) (I ⊗ A) vec(B)vec(BA) (Aᵀ ⊗ I) vec(B)其中 ⊗ 是 Kronecker 积I 是 n 阶单位阵。于是 AB - BA 0 就等价于(I ⊗ A - Aᵀ ⊗ I) vec(B) 0可交换性判断到此就变成了一个齐次线性方程组的零空间问题阶数是 n²。零空间的维数就是中心化子的维数零空间的一组基逐一 reshape 回 n×n就是所有与 A 可交换的矩阵的一组基。这个转换的漂亮之处在于它把构造性的东西全部交给了标准算法你不用再想特征子空间、Jordan 块这些概念SVD 或者 QR 分解会直接告诉你答案。顺便说一句这个技巧的适用范围远不止交换子。形如 AX - XB C 的 Sylvester 方程、AX XAᵀ C 的 Lyapunov 方程都可以用同一套手法拉直求解。控制理论里的极点配置、稳定性判据本质上都在解这类方程。所以这个拉直操作值得单独花时间练熟它是把矩阵问题转成标准问题的万能钥匙。4.3 数值实现与验证代码纸上推完之后落到代码就十几行。下面这段直接可以拿去跑只需要 numpyimport numpy as np def commutant_basis(A, tol1e-10): 返回与 A 可交换的所有矩阵的一组基以及奇异值谱 n A.shape[0] I np.eye(n) # vec(AB - BA) (I ⊗ A - A^T ⊗ I) vec(B) M np.kron(I, A) - np.kron(A.T, I) _, s, vh np.linalg.svd(M) cutoff tol * max(M.shape) * s[0] rows vh[s cutoff] # 零空间 basis [r.reshape(n, n) for r in rows] return basis, s def rel_commutator(A, B): 相对交换子用来判断数值意义上是否可交换 num np.linalg.norm(A B - B A) den np.linalg.norm(A) * np.linalg.norm(B) return num / den if den 0 else 0.0拿几个矩阵实测一下结果和理论对上得很漂亮。A diag(1, 2) 时零空间维数是 2基向量对应 diag(1,0) 和 diag(0,1)正是所有对角矩阵。A [[1,1],[0,1]] 时零空间维数也是 2基向量 reshape 出来是 [[1,0],[0,1]] 和 [[0,1],[0,0]]也就是 aI bN 的形式和手算完全一致。A 3 阶单位阵时维数跳到 9因为所有矩阵都能和它交换。再往后可以拿循环置换矩阵试试它满足 P³ I代表一种三次循环的坐标置换结构。它的中心化子维数应该恰好是 3对应的正是所有循环矩阵 aI bP cP²。这类矩阵有个很好的性质它们被同一组特征向量离散傅里叶基同时对角化所以它们两两之间都能交换构成一个交换代数。这套结构在信号处理里天天出现循环卷积之所以能用 FFT 快速算根子就在这里。P np.array([[0,1,0], [0,0,1], [1,0,0]], dtypefloat) basis, s commutant_basis(P) print(len(basis)) # 期望 3 for B in basis: print(rel_commutator(P, B)) # 期望全接近 0关于数值实现有个细节必须提醒判断可交换永远不要用A B B A这种逐元素比较浮点乘法的误差会让结果毫无意义。用相对交换子阈值取 1e-12 到 1e-10 之间比较稳妥具体取决于矩阵的条件数。如果矩阵本身接近奇异或者元素量级差异极大最好先做个归一化再判。5. 常见问题与踩坑实录5.1 那些看着像判据、其实靠不住的假指标这部分是我见过最多的误区列出来挨个破。第一个坑是拿迹相等当判据。tr(AB) tr(BA) 对任意方阵恒成立这是交换子的性质不是可交换的条件。一堆不可交换的矩阵迹照样相等用这条去判可交换等于没判。第二个坑是拿特征值相同当判据。AB 和 BA 的特征多项式确实相同但那只说明两个乘积的特征值一样不说明两个顺序的结果一样。反例随手就有A [[0,1],[0,0]] 和 B [[0,0],[1,0]] 都可对称地上下翻转两者特征值都是 0 和 0迹都是 0可 AB [[1,0],[0,0]]BA [[0,0],[0,1]]显然不相等。第三个坑是拿行列式相等或者秩相等当判据同样无效理由和上面一样这些都是不可交换时依然成立的残余性质属于必要不充分那一类。第四个坑是以为对称矩阵之间就能交换。两个对称矩阵相乘一般不对称除非它们可交换。反过来说两个对称矩阵可交换等价于它们的乘积仍然对称因为 (AB)ᵀ BA对称就要求 AB BA这条倒是可以当判据用而且用起来很快。判据是否等价于可交换说明tr(AB) tr(BA)否恒成立与可交换无关AB 与 BA 特征值相同否恒成立只能说明相似类相同AB 与 BA 行列式相同否特征值相同的推论恒成立AB 对称A、B 均对称是对称矩阵之间的快捷判据A 的每个特征子空间都是 B 不变的是最本质的判据需要 A 可对角化PQ 是正交投影P、Q 均为正交投影是投影类矩阵的快捷判据5.2 浮点误差下的伪可交换与阈值选择工程里另一个高频问题是阈值的把握。理论上不可交换的一对矩阵因为浮点运算和测量误差算出来的相对交换子可能是 1e-16 这种量级看着就像可交换。反过来理论上可交换的一对矩阵如果元素量级差别巨大比如一个元素是 1 一个元素是 1e8相对误差也可能被放大到 1e-8 以上看着就像不交换。我的处理习惯是三步先看矩阵的条件数和元素量级决定阈值大致取在什么范围再用随机扰动做一次敏感性测试给矩阵加 1e-10 量级的扰动看相对交换子的变化幅度最后把这个幅度和状态本身的量级比一比。如果两者同一数量级说明本来就在误差噪声里判断本身没有意义如果相差好几个数量级结论才可信。注意当矩阵接近奇异、或者元素量级跨度过大时先做归一化再判断。把 A、B 分别除以各自的 Frobenius 范数再做比较能得到稳定得多的结论。还有一点涉及迭代算法的时候不要每次都重新判断可交换性。A、B 的结构在迭代过程中通常不变只需要在进入循环前判断一次把结果存成布尔标志循环内部直接用。这个细节在小规模计算里看不出差别但矩阵阶数上千、迭代上千次的时候省下的时间很可观。5.3 实数和复数域带来的差别能不能实同时对角化最后一个容易翻车的地方是数域。我们在推导时默认特征值存在也就是在复数域上讨论。实数矩阵的特征值可能是复数情况就微妙了。举一个典型的场景A 是逆时针 90 度旋转矩阵 [[0,-1],[1,0]]特征值是 ±i属于复数域。它与 B A 自己当然可交换两者在复数域上都能对角化也能同时对角化。但如果你要求用实矩阵做相似变换把它们同时变成实对角矩阵那是不可能的因为实对角矩阵根本没有复特征值。正确的说法是实数矩阵之间可交换通常只能在实数域上做到同时块对角化把每一对复共轭特征值对应的二维块旋转变换保留下来也就是把空间分解成若干一维不变子空间和若干二维不可再分的不变子空间的直和。旋转矩阵就是那个二维块的最小例子它没有实特征方向只能整体保留为一块。这个区别在实际计算里影响很大。做图形变换的相似性判断、做振动系统的模态分析都会遇到复特征向量对应的物理意义是什么这个问题。经验做法是在需要明确几何图像时用实块对角形式在需要做代数推导和数值比较时切到复数域两边来回切别硬凑。复数域上的同时对角化永远是干净的实数域上的结论必须附上允许二维块这个前提。提示判断两个实矩阵能不能实同时对角化一个简单办法是看它们的实特征向量是否张满整个空间。如果任何一个矩阵存在复特征值那么实同时对角化就不成立只能退到块对角。实际操作里我还踩过一个更隐蔽的坑把可交换和可同时三角化混为一谈。在复数域上一族两两可交换的矩阵确实能同时上三角化但这个结论只保证了三角化不保证对角化。要同时对角的额外条件是两个矩阵各自都可对角化。有一回我按可交换就能同时对角化去写代码遇到幂零矩阵时结果全错排查了大半天才发现是把三角化当成了对角化。这个教训记到现在——可交换给的是共同的不变子空间链要拿到共同的特征向量基还得每个矩阵自己先争气。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →