☰
实对称矩阵特征值为何为实数:共轭转置证明与工程应用
2026/9/30 9:53:35 网站建设 项目流程

线性代数课上老师写完那行λ̄ = λ,底下就开始有人翻书了——中间那一步"两边同时取共轭转置"到底是怎么冒出来的?等到自己上手写,八成会出现这种情况:抄了一遍证明,逻辑看着没错,但换个矩阵就不知道从哪下手,或者干脆把x*Ax的两种写法混成一锅粥。这篇就干一件事,把"实对称矩阵的特征值为实数"这条定理从"背下来"变成"随手写出来",顺带把工程代码里那些1e-16j的虚部残渣也说清楚。

这个结论的重要性被严重低估了。它不是一个孤立的课后习题,而是谱定理的地基,是协方差矩阵能做正交对角化的前提,是二次型判正定的理论依据,也是无数数值算法敢用实浮点数存特征值的底气。如果你在做数据分析、物理仿真、结构力学或者图算法,你每天调用的eigh、eigvalsh、svd,背后站着的就是这一行证明。读者对象不限——刚学完线性代数的同学可以照着把证明写严谨,已经工作了的人可以借它回顾一下"为什么当年老师说对称矩阵是个好东西"。

1. 先把这个命题里藏着的三个前提挑明

命题的标准表述是:设 A 是 n 阶实对称矩阵,即 A 的元素全为实数且 Aᵀ = A,若 λ 是 A 的特征值,则 λ 必为实数。这句话里塞了三个限定,每一个都不能省,省掉任何一个结论都会崩。

第一个限定是"实"。这里说的"实"指矩阵元素落在实数域。如果允许矩阵元素是复数,即使仍要求转置等于自身(这种叫复对称矩阵),结论就不成立了。举个能立刻算的例子:A = [[1, i], [i, 1]],它的转置确实等于自己,特征多项式是 (1-λ)² - i² = (1-λ)² + 1,解得 λ = 1 ± i,妥妥的非实数。这个反例后面还会回来说,因为它最能戳破"对称就够了"这个错觉。

第二个限定是"特征值在复数范围内讨论"。这一点初学者最容易忽略。一个实矩阵的特征多项式是实系数多项式,而实系数多项式在实数域里可能没有根——比如 x² + 1。所以当我们说"矩阵有特征值"时,默认已经把数域扩张到了复数域。整条证明的落脚点其实就是"把 λ 从复数域拽回实轴",如果你脑子里没有复数这个舞台,这个证明连命题都写不出来。实数特征值不是"算出来恰好是实数",而是"被证明必然落在实轴上"。

第三个限定是"特征向量非零"。特征值的定义是:存在非零向量 x 使得 Ax = λx。这个"非零"看着像例行公事,实际上它在证明的最后一步承担了唯一一次除法的合法性。因为证明结尾要把式子两边约掉 x*x,而这个量等于向量各分量模长平方之和,只有当 x 非零时才严格大于零。少写这一句,整个证明就多了一个除以零的漏洞。

把这三个前提摆清楚之后你会发现,这条定理的真正内容不是"对称矩阵有什么神奇性质",而是"对称性这个代数条件,正好把特征多项式的复根全部压回到实轴上"。

2. 证明前需要预热的四件工具

证明本身只有四行,但每一行背后都对应一个必须先搞定的操作。这四件工具如果不熟,写的时候会卡在"这一步凭什么成立"。

2.1 共轭转置和它的记号

对任意复向量 x,把它写成列向量的形式,定义 x* 为 x 的共轭转置:先把每个分量取共轭,再整体转置成行向量。比如 x = [1+i, 2]ᵀ,那么 x* = [1-i, 2]。记号上,有的教材写 A^H,有的写 A†,有的写 A*,本文统一用 A*,指的都是同一件事。

这个记号设计的巧妙之处在于,它让 xx 变成了一个标量内积。算一下就知道:xx = Σ |x_i|²,也就是向量各分量模长的平方和。当 x ≠ 0 时,每一项都是非负实数,且至少有一项严格大于零,所以 x*x > 0 恒成立。相比之下 xᵀx 在复向量上就不太好使,因为 xᵀx 可能是复数,甚至可能是零,这就没法用来做除法的分母。

2.2 乘积的共轭转置要反序

这是最容易写错的一步。规则是 (AB)* = BA,顺序必须翻过来。原因是共轭转置本质上包含了转置,而转置对乘积就是反序的:(AB)ᵀ = BᵀAᵀ。共轭只是逐元素操作,不改变顺序,所以合起来仍然是反序。

把这条规则用在向量上,最关键的推论是 (Ax)* = xA。这个式子在整个证明里会出现一次,而且是决定性的那一次。如果你习惯性写成 (Ax)* = Ax,后面的推导会直接走不通。

2.3 实对称矩阵满足 A* = A

这一步是"实"和"对称"两个条件合力的结果。拆开看:因为 A 的元素全是实数,取共轭等于什么都不做,所以 Ā = A;又因为 A 对称,Aᵀ = A。两者一合,A* = (Ā)ᵀ = Aᵀ = A。

于是实对称矩阵在共轭转置下是不动点。这类矩阵有个更一般的名字叫 Hermitian 矩阵或自伴矩阵,定义就是 A* = A,实对称矩阵只是它在实数域上的特例。后面唱主角的其实一直是这个性质,而不是"对称"本身。

2.4 标量等于自身的转置

还有一个藏在细节里的规则:任何一个标量(1×1 矩阵)转置之后等于自己。这条听起来废话,但它会在证明中悄悄用一次——当 x*Ax 出现时,它已经是一个数而不是向量或矩阵了,所以可以对它做任何标量层面的操作而不用担心维度。

把这四件工具备齐,整个证明就变成了一道纯粹的操作题。

3. 主证明:让同一个量走两条路

现在正式开工。设 λ 是实对称矩阵 A 的一个特征值,x 是对应的特征向量,x ≠ 0。我们的目标是推出 λ = λ̄,其中 λ̄ 是 λ 的复共轭。一个复数等于自己的共轭,当且仅当它的虚部为零,这就是"是实数"的等价刻画。

第一条路:直接左乘 x。*

从特征方程出发:

Ax = λx

两边同时左乘 x*,因为 x* 是行向量、A 是矩阵、x 是列向量,三者相乘得到一个标量:

xAx = λ xx

这里右端把 λ 提到前面,是因为 λ 是标量可以与任何东西交换顺序。

第二条路:先取共轭转置,再右乘 x。

回到原始的 Ax = λx,两边同时取共轭转置。左边用反序规则:(Ax)* = xA= xA,最后那步用到了实对称矩阵的 A= A。右边 (λx)* = λ̄ x*。于是得到:

xA = λ̄ x

再给这个式子两边同时右乘 x:

xAx = λ̄ xx

注意等号左边又变回了 x*Ax,和第一条路得到的是同一个标量。这不是巧合,而正是证明设计的核心:我们刻意让同一个量用两种方式表达出来。

两式相减,收网。

把两条路的结果相减:

(λ - λ̄) x*x = 0

接下来就是那句必须写出来的话:因为 x ≠ 0,所以 xx = Σ|x_i|² > 0,两边可以除以 xx,得到 λ - λ̄ = 0,即 λ = λ̄,故 λ 是实数。

整个过程没有任何"灵感"式的跳跃。真正的技巧只有一个:意识到 (Ax)* = xA 这条路线,而这条路线能走通的唯一前提就是 A= A。换句话说,实对称性在这里的全部贡献,就是让共轭转置这个操作作用在矩阵上时"什么也没发生"。假设矩阵只是实矩阵而不对称,取共轭转置后你会得到 xAᵀ,和 xA 差了十万八千里,两条路就再也合不上了。

提示:证明中那个"同一个标量"的视角值得反复咀嚼。很多线性代数命题的证明都是这个套路——从两个方向逼近同一个量,让它们相等,从而得到关于参数的约束。比如投影矩阵的幂等性、正交矩阵的保范性,思路都同源。

顺便说一句,这个证明对 Hermitian 矩阵一模一样地成立,一个字都不用改,因为从头到尾我们只用了 A* = A 这一条性质。所以你可以把结论直接记成更强的版本:Hermitian 矩阵的特征值必为实数。

4. 拿二阶矩阵亲手验算一遍

抽象证明最容易让人心里没底的地方是——万一哪步符号写反了怎么办?二阶情形可以完全手算,把每一步都摆到台面上,是一个非常值得做的自查练习。

设 A = [[a, b], [b, d]],其中 a、b、d 都是实数。它的特征多项式是 det(A - λI) = (a - λ)(d - λ) - b²,展开整理:

λ² - (a + d)λ + (ad - b²) = 0

判别式 Δ = (a + d)² - 4(ad - b²)。展开:

Δ = a² + 2ad + d² - 4ad + 4b² = a² - 2ad + d² + 4b² = (a - d)² + 4b²

看到最后这个配方,结论就一眼明了:平方项非负,所以 Δ ≥ 0,两个根全是实数。而且这个式子还额外告诉你一些信息:

  • 只要 b ≠ 0,Δ 就严格大于零,两个特征值必不相等,矩阵可对角化;
  • 只有当 a = d 且 b = 0(也就是 A 是数量矩阵)时 Δ 才等于零,出现重根;
  • 判别式的"虚部空间"被 4b² 这一项吃掉了——对称程度越高,越不可能出现非实根。

为了对比,把 A 换成非对称的旋转矩阵 R = [[0, -1], [1, 0]]。它的特征多项式是 λ² + 1,判别式 Δ = -4 < 0,特征值是 ±i,一对共轭纯虚数。这就是"实矩阵但特征值非实"的标准样本。

再换一个稍微一般点的实矩阵 [[a, b], [c, d]] 且 b ≠ c,判别式变成 (a - d)² + 4bc,这里的 bc 可以取负值,整个式子就能小于零,非实根随之出现。把它和对称情形的 4b² 一比,差异就在那一处:对称强制了交叉项的系数相乘为正,非对称则放开了这个限制。

把二阶的结论推广到 n 阶并不直接——因为高次多项式的判别式没有这么简洁的配方。这也解释了为什么高阶情形必须走第 3 节那种代数证明,而不能靠配方硬算。二阶只是给你一个能拿到手里翻来覆去检查的实物模型。

5. 换一条路:瑞利商和单位球面上的最小值

第 3 节的证明有一个隐含的起点:它假设"λ 已经是某个特征值",然后证明它必为实数。但还有一类更"构造性"的证明,它不假设任何东西,直接从矩阵本身出发,证明实特征值和实特征向量确实存在,然后归纳地把所有特征值都揪出来。这条路在工程上更重要,因为它给出了特征值的变分刻画。

定义瑞利商:

R(x) = (xᵀAx) / (xᵀx),x ≠ 0,A 实对称

对实向量 x 和实对称矩阵 A,分子 xᵀAx 是一个实数(它等于一个二次型),分母是正实数,所以 R(x) 恒为实数。这个量有一个很好的性质:它只依赖 x 的方向,不依赖 x 的长度。把 x 换成 tx(t ≠ 0),分子分母各出 t²,约掉后值不变。

既然和长度无关,就可以把 x 限制在单位球面上(xᵀx = 1)来讨论。原问题变成:

在约束 xᵀx = 1 下,最小化 f(x) = xᵀAx

这个问题的存在性是实分析的结论:单位球面是 Rⁿ 中的有界闭集,也就是紧集;f 是连续函数;连续函数在紧集上必取到最小值。所以最小值一定存在,设它在点 x₀ 处取到。

接下来用拉格朗日乘子法。构造 L(x, μ) = xᵀAx - μ(xᵀx - 1),求梯度并令其为零。利用 A 对称这一条件(这正是能写成 2Ax 而不是 Ax + Aᵀx 的原因),得到:

2Ax₀ - 2μx₀ = 0,即 Ax₀ = μx₀

看,x₀ 就是特征向量,μ 就是对应的特征值。又因为 μ = R(x₀) 是个实数,我们直接构造出了一个实特征值和一个实特征向量。注意这条路的顺序和第 3 节是完全相反的:第 3 节是"先有特征值,再证它是实的",这条是"先证存在实特征值,再顺带得到实特征向量"。

有了一个实特征值和一个实特征向量之后,就可以降维了。把 x₀ 张成的一维子空间的正交补(维度 n-1)拿出来,可以证明 A 把这个子空间映到自身:任取 y 满足 x₀ᵀy = 0,则 x₀ᵀ(Ay) = (Ax₀)ᵀy = μx₀ᵀy = 0。于是在这个 n-1 维子空间上,A 可以看作一个低一维的实对称矩阵,同样的论证再来一遍,无限归纳下去,就能把 n 个特征值全部拿到手。

两条路的对比值得放一张表:

对比项代数证明(第 3 节)变分证明(本节)
出发点假设已有特征值 λ不假设,直接构造
核心工具共轭转置、内积紧集上的极值、拉格朗日乘子
得到的结论特征值为实数存在实特征值 + 特征向量,并可归纳
顺带收获无瑞利商的极值就是特征值
工程意义理论保证算法基础(子空间迭代、Lanczos)

变分刻画的价值在于它把特征值变成了优化问题的最优值。这句话听起来抽象,但它是很多算法的源头:幂迭代找的是瑞利商的最大值,Lanczos 方法是把瑞利商限制在一个 Krylov 子空间上求极值,PCA 里"最大方差方向"本质上就是最大特征值对应的特征向量,而"方差"就是瑞利商。所以第 3 节给你的是安全感,这一节给你的是工具箱。

6. 那些看起来像反例的东西

学到这里,脑子里通常会自动冒出几个"那这个呢"的问题。把这些问题提前回答掉,能省下不少绕路的时间。

6.1 复对称矩阵并不能保证实特征值

前面提过的 A = [[1, i], [i, 1]] 就是标准反例。它的转置等于自己,符合"对称",但特征值是 1 ± i。问题出在哪?就出在取共轭转置这一步:对复矩阵而言,A* = Aᵀ 并不成立,因为取共轭这一步不再是恒等操作。真正需要的是 A* = A,也就是 Aᵀ = Ā,展开写就是 A 的 (i,j) 位置元素等于 (j,i) 位置元素的共轭。这个条件叫 Hermitian。对实数矩阵,元素等于自身的共轭,Hermitian 退化成对称。

所以正确的记忆方式不是"对称 → 实特征值",而是"Hermitian → 实特征值,实对称是它的特例"。把这条界线划清楚,就不会被复对称矩阵这种例子打脸。

6.2 特征向量正交是另一个结论,别当前提用

很多教材把"实对称矩阵的不同特征值对应的特征向量互相正交"和"特征值为实数"放在一起讲,导致有人写证明时顺手就把正交性当成已知条件。这是一个循环论证的陷阱。

正交性本身要独立证明:设 Ax = λx,Ay = μy,λ ≠ μ,则 λ(xᵀy) = (Ax)ᵀy = xᵀAy = μ(xᵀy),于是 (λ - μ)(xᵀy) = 0,由 λ ≠ μ 推出 xᵀy = 0。注意这个证明里用到了 xᵀAy = (Ax)ᵀy,这一步同样依赖 Aᵀ = A。两条结论共用同一个代数条件,但逻辑上是并列关系,谁也推不出谁。

还有一点常被忽略:不同特征值对应的特征向量正交,这是容易的;同一个特征值(重根)对应的特征向量张成的子空间内部,需要单独做一次正交化,才能凑出完整的正交特征向量组。这一步的存在性同样依赖对称性,它保证了每个特征值的几何重数等于代数重数,也就是矩阵总是可对角化的。

6.3 "特征值全为实数"不等于"特征向量都是实向量"

这是个语义上的小陷阱。定理保证的是存在一组由实向量构成的正交特征向量基,但单看某个特征值,它对应的复特征向量也可以存在。比如单位矩阵 I,任何一个非零复向量都是它的特征向量(特征值都是 1),你完全可以挑一个含虚部的向量出来。定理说的是"存在实的那一组",不是"复的那些都不存在"。写题的时候区分这一点,能避免不必要的纠结。

7. 写证明时最容易翻车的六个细节

批改作业或者代码 review 的时候,我见过太多同款错误。把它们列出来,自查一遍比反复看证明本身更有效。

第一,λ̄ 写成了 λᵀ。共轭和转置对矩阵可以合成共轭转置,但对标量而言,转置没有任何意义,只有共轭才有。λ 是数,取共轭写成 λ̄ 或者 conj(λ),写成 λᵀ 是纯粹的记号混淆。

第二,(Ax)拆成了 Ax。* 这是乘积共轭转置的反序规则没记牢。正确写法是 (Ax)* = xA。因为 Ax 是列向量,它的共轭转置必须是行向量,维度上也只能是 x* 在前。

第三,漏写 x ≠ 0。从 (λ - λ̄)xx = 0 约掉 xx 的那一步,合法性完全建立在 x ≠ 0 之上。同时要补一句 xx = Σ|x_i|² > 0 的理由,不能只写"因为 xx ≠ 0"——万一这个量是复数,非零也不代表能这样约(虽然此时它是实数,但说清楚才严谨)。

第四,偷用"特征向量可以取实向量"。特征向量一开始是在复数域上取的,因为我们要讨论的 λ 本身就是复数。如果你提前假设 x 是实向量,那么这个证明就变成了循环论证——你假设了结论的一部分。

第五,把 A= A 当成显然成立。* 这一步实际上用了两个条件:A 的元素是实数(所以 Ā = A),以及 Aᵀ = A。如果题目只给"实矩阵"没给"对称",这一步就不成立,整个证明作废。写的时候最好明确点出这两个来源。

第六,把"λ 是特征值"和"λ 是特征多项式的根"混为一谈。两者确实等价,但用哪个做起点会影响证明的写法。用特征方程 Ax = λx 做起点更自然,因为后面要用到特征向量 x;如果从特征多项式出发,你还得先把特征向量找回来。

我通常建议的自查顺序是:先检查每一步的维度是否自洽,再检查每一步用到的性质是否在题目条件里,最后检查是否有未加说明的除法。这三关过完,基本不会出结构性错误。

8. 这个结论在真实项目里被谁用着

理论讲完了,说点实际的。这条定理在工程代码里的存在感,比教科书上呈现的要高得多。

最直接的是协方差矩阵。PCA 的第一步是算数据的协方差矩阵,这个矩阵天然对称(因为协方差 Cov(X,Y) = Cov(Y,X))。接下来要做的就是求它的特征值和特征向量,用特征值表示各主成分方向的方差贡献。这里必须保证特征值是实数,否则方差是复数这件事根本没法解释。而且正因为对称,特征向量之间自动正交,各个主成分方向互相垂直,这一步不需要额外做正交化处理,算法省了一大截。

二次型判正定是另一个重灾区。给定实对称矩阵 A,判断二次型 xᵀAx 是否恒正,标准做法是看特征值是否全为正。如果特征值可能是复数,"全为正"这个说法就无从谈起。Sylvester 判据(顺序主子式全为正)之所以能作为等价条件,也需要这条定理在背后兜底。工程上判断一个优化问题的 Hessian 是否正定、一个弹簧系统的刚度矩阵是否稳定,走的都是这条路。

数值计算层面的收益更实在。对称矩阵的特征值计算可以只用一半的浮点运算,而且数值稳定性明显更好。落到代码上就是numpy.linalg.eigh和numpy.linalg.eig的区别:前者假设输入是 Hermitian,只返回实数特征值;后者处理一般矩阵,返回复数类型。经常有人对着一堆1e-16j的虚部发懵,以为是算法出了问题,其实那只是浮点误差在复数类型下的自然残留。对策很简单,确认矩阵对称就用eigh,或者对eig的结果取.real。

import numpy as np A = np.array([[4.0, 1.0, 2.0], [1.0, 3.0, 0.5], [2.0, 0.5, 5.0]]) # 一般方法:返回复数类型 w1, v1 = np.linalg.eig(A) print(w1.dtype) # complex128,虚部是 1e-16 级别的噪声 # 对称专用方法:保证实数,速度更快 w2, v2 = np.linalg.eigh(A) print(w2.dtype) # float64 print(np.allclose(w1.real, w2)) # True

除了这些,惯性张量和应力张量是力学里最典型的应用。刚体转动惯量矩阵对称,它的三个特征值就是绕主轴转动时的主惯性矩,特征向量就是主轴方向。材料力学里的主应力和主方向,说法完全一样。图拉普拉斯矩阵对称且半正定,它的谱(特征值集合)刻画了图的连通性、二分性和聚类结构,谱聚类算法就是在这上面做文章。有意思的是,图拉普拉斯的第二小特征值(Fiedler 值)在工程上被当作"图的连通紧密程度"的一个指标,这个量的定义本身就依赖特征值为实。

回头看,第 3 节那四行证明之所以值得反复默写,不是因为考试会考,而是因为它撑起了一整片应用。对称性把矩阵从"一个任意的线性变换"提升成了"一个可以被正交坐标系对角化的变换",而特征值落在实轴上,是这件事能落地的最低门槛。真正上手做过一个 PCA 或者谱聚类项目之后,再回头看这四行,感受会和第一次学的时候完全不一样。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询