第一次在高等代数教材里看到"酉矩阵"三个字,我盯着那个"酉"字看了好一阵子。它长得像"酒"字旁边掉了个三点水,怎么看都不像一个数学术语该有的样子。后来学量子力学,又冒出一个词叫"幺正矩阵",英文都是同一个:unitary matrix。当时我一度以为这是两个不同的概念,一个属于代数,一个属于物理。直到某天把两本教材摊在桌上对照,才拍着大腿反应过来——这就是同一个数学对象,穿了不同学科给它的两件马甲而已。
这篇文章想把幺正矩阵(酉矩阵)这件事从头到尾讲透:定义和译名、几何直觉、特征值谱、量子力学中的角色、验证时容易踩的坑,以及四种实用的构造方法。无论你是正在学线性代数的本科生、刚碰量子计算的程序员,还是工作中需要复核信号处理算法的工程师,都应该用得上。
1. 一个矩阵,两个名字:先从定义和译名把账算清楚
1.1 共轭转置是唯一的门槛
设U是一个n阶复方阵。如果它的共轭转置恰好等于它的逆矩阵,即U† = U⁻¹,那么U就是幺正矩阵。这个定义还有另一个等价写法:U†U = UU† = I,其中I是单位矩阵。两种写法说的是同一件事:共轭转置从左乘、从右乘都能把U抵消掉。
"共轭转置"四个字是很多初学者第一个绊脚石。具体操作分两步:先把矩阵的行列互换(转置),再把每个元素取共轭,也就是把a+bi换成a-bi;也可以先取共轭再转置,结果一样。记号上,物理和工程领域习惯写U†,信号处理里常写U^H,有些数学教材会用U*。这里要提醒一句:在不少线性代数课本里,A*表示的是伴随矩阵(adjugate),同一个星号在不同书里含义不一样,读教材时先看清楚作者的约定。这不是概念问题,是记号问题,但初学阶段很容易被它干扰。
为什么复数域的"转置"必须升级成"共轭转置"?核心原因是内积。复数向量的内积是⟨x, y⟩ = x†y,里面必须有共轭,否则一个非零向量的"长度平方"可能是负数甚至复数,几何意义就崩了。既然内积带共轭,矩阵作用后要保持内积,自然就得用共轭转置而不是普通转置。这一点在第2节会看得更清楚。
1.2 "酉"与"幺正":两个译名的来历
中文数学界对unitary matrix有两个长期并存的译名:"酉矩阵"多见于高等代数、矩阵论教材,"幺正矩阵"多见于量子力学和量子信息文献。它们指的就是同一个东西,没有任何本质区别。
"酉"这个字,现代汉语里出现频率已经很低。除了数学术语外,普通人最常见的场景是十二地支里的"酉",对应下午五点到七点那个"酉时"。当年翻译者为什么选"酉"来表示unitary,我见过好几种猜测,有人说是沿用汉字文化圈的术语转写习惯,有人说是从发音和字形里挑了个顺眼的字,但都没找到特别权威的定论。对我们来说,把它当成一个约定俗成的名字记住就行,不必考古。
"幺正"这个名字倒是稍微好记一点。"幺"在中文里有"一、小、最小单位"的意思,"正"可以对应"正交、归一",合起来可以粗略理解为"保持单位正交的变换",这恰恰就是幺正矩阵的核心行为。这么联想不一定符合翻译史,但确实能帮助记忆。我自己的习惯是:写数学笔记用"酉矩阵",写物理笔记用"幺正矩阵",两边都混得脸熟,考试时按教材称呼走就行。
1.3 从正交矩阵到幺正矩阵:一个类比走天下
实数域里,满足QᵀQ = I的矩阵叫正交矩阵,它保持实向量点积、长度和夹角。复数域里,点积换成内积,转置换成共轭转置,条件就变成U†U = I,于是有了幺正矩阵。一句话概括:幺正矩阵是复数域的"正交矩阵",正交矩阵是实数域的"幺正矩阵"。
这个类比不是装饰,而是理解整个概念的捷径。实数正交矩阵的几何角色是旋转和反射,幺正矩阵也做类似的事,但因为复数坐标里每个分量自带相位,幺正变换比实正交变换多出一层自由度。第2节会展开这部分直觉。另外有一个直接推论:任何一个实正交矩阵,因为共轭不改变实数元素,所以自动也是一个幺正矩阵;反过来,含复数元素的幺正矩阵就不一定是实正交矩阵。例如U = diag(1, i)是幺正矩阵,但显然不是实矩阵,谈不上正交。
2. 几何直觉:幺正矩阵在复数空间里到底做了什么动作
2.1 保范数、保内积:一个"不伸缩"的变换
先看范数。对任意复向量x,定义‖x‖² = x†x。如果U是幺正矩阵,那么‖Ux‖² = (Ux)†(Ux) = x†U†Ux = x†x = ‖x‖²。这说明U作用前后向量长度完全不变。再看两个向量x和y的内积:⟨Ux, Uy⟩ = (Ux)†(Uy) = x†U†Uy = x†y = ⟨x, y⟩。内积也一点不变。长度不变、夹角不变,这就是最典型的"刚性变换"。
把复数空间想象成一个坐标系,幺正矩阵在以单位向量为标尺、以正交为度量标准的前提下,把所有点搬到了另一个位置,但整个空间没有发生拉伸、压缩、扭曲。用大白话说,它是一个"动作干净利落"的变换。这个直觉在后续判断问题时很有用:如果一个矩阵作用后会改变某个向量的长度,那它一定不是幺正矩阵。
2.2 实旋转之外,还有每个分量的相位
实数正交变换可以分解成旋转与反射的组合。到了复数域,幺正变换多了一样实空间没有的本事:给坐标轴的基向量乘一个相位因子e^{iθ}。这个乘法不改变向量长度(因为|e^{iθ}| = 1),但会让该分量在复平面上转一个角度。n阶幺正矩阵对角化之后,本质上就是n个独立的一维相位旋转。
这个区别用例子看更明显。二维实旋转矩阵的特征值是e^{iθ}和e^{-iθ},总是成对共轭出现,因为旋转必须在整个R²平面里转;二维幺正矩阵的特征值可以是任意两个单位圆上的复数,比如i和e^{i0.3},不需要共轭配对。自由度差的这一点,正是复数域比实数域多出来的相位空间。
2.3 实例:用2×2矩阵把直觉落地
举一个具体的2×2例子:U = (1/√2)[[1, i], [i, 1]]。它的共轭转置是U† = (1/√2)[[1, -i], [-i, 1]]。算U†U,以第一行第一列元素为例:[(1)(1) + (-i)(i)]/2 = (1 - i²)/2 = (1 + 1)/2 = 1。其余元素对称计算,最终得到单位矩阵。所以U确实是幺正矩阵。
看几何效果。取x = [1, 0]ᵀ,Ux = [1/√2, i/√2]ᵀ。原向量长度是1,新向量模长平方是(1/√2)² + (1/√2)² = 1,长度不变,但第二个分量从0变成了i/√2,在复平面上多了一个90度的相位。取y = [0, 1]ᵀ,Uy = [i/√2, 1/√2]ᵀ,同样保持长度。再检查正交性,⟨Ux, Uy⟩ = (Ux)†Uy,把Ux的共轭转置写出来再乘Uy,结果是0,所以Ux和Uy依然正交。基向量的正交性被完整保留。
这个例子不需要背,但值得亲手算一遍。算过之后,你对"幺正矩阵保持长度、保持正交、但允许相位旋转"这句话会有真正的肌肉记忆。
3. 特征值、行列式与对角化:幺正矩阵的内在结构
3.1 特征值必定在单位圆上:三行证明
设λ是幺正矩阵U的特征值,x是对应的非零特征向量,Ux = λx。两边取范数:‖Ux‖ = |λ|·‖x‖。因为U保范数,左端等于‖x‖,于是|λ| = 1。证明结束。结论分量很重:幺正矩阵的全部特征值都落在复平面的单位圆上,也就是可以写成e^{iθ}的形式。量子力学里常说"本征值是纯相位",根源就在这里。
3.2 正规矩阵与谱定理:总能干净地对角化
幺正矩阵满足U†U = UU†,这一类矩阵在数学里叫正规矩阵(normal matrix)。正规矩阵有一个著名的谱定理:一定存在某个幺正矩阵V,使得U = VDV†,其中D是对角矩阵,对角线上的元素就是U的特征值。对幺正矩阵来说,D的每个对角元都满足模长为1。
这个定理说明:无论幺正矩阵表面长得多复杂,从合适的角度(也就是用V做坐标变换)看过去,它无非是n个互不干扰的相位旋转。这也解释了为什么幺正矩阵计算幂次很方便——U^k = VD^kV†,D^k直接每个对角元取k次方即可。在离散动力学、信号处理、量子态的多次演化里,这是最常被调用的技术。
另一个不容易注意但很重要的结论:幺正矩阵属于不同特征值的特征向量一定是正交的。一般矩阵的特征向量可能是歪歪扭扭的,甚至数量不够用;幺正矩阵则永远可以找到一组标准正交特征向量基。这也是它谱结构"干净"的原因。
3.3 行列式是单位圆上的复数,迹另有用途
行列式是全部特征值的乘积。既然每个特征值都在单位圆上,乘积的模长自然还是1,所以det(U)一定是某个e^{iθ}。注意,这里不像实正交矩阵那样只能是±1。随便举一个例子,U = diag(1, i),行列式就是i,模长为1,完全合法。工程上如果某个算法要求幺正矩阵的行列式恰好为1(那就是SU(n)),需要额外加限制,不能默认所有酉矩阵都满足。
迹是特征值之和,一般情况下可以是复数。一个对物理特别有用的特例:SU(2)矩阵可以写成U = cos(θ/2)I - i sin(θ/2)(n·σ)的形式,于是tr(U) = 2cos(θ/2)。这个公式在旋转门、自旋进动分析里经常出现,看见迹接近2,就知道旋转角很小。不过迹更多是分析工具,不是判断幺正性的依据。
顺便提一个无处不在的例子:离散傅里叶变换矩阵F满足F†F = I,是信号处理里最经典的幺正矩阵。所以逆变换可以由共轭转置直接实现,这是"酉矩阵"在工程里最实际的用处之一。
4. 为什么量子力学离不开幺正矩阵:从薛定谔方程到量子门
4.1 概率守恒逼出了幺正性
量子力学的基本语言是复向量空间。一个量子态|ψ⟩的各分量模方代表各个测量结果出现的概率,所以态必须归一化:⟨ψ|ψ⟩ = 1。时间演化在数学上被建模成一个线性算符U,作用方式为|ψ(t)⟩ = U|ψ(0)⟩。为了保证任意时刻状态依然归一化,U就必须满足⟨Uψ|Uψ⟩ = ⟨ψ|ψ⟩,展开即ψ†U†Uψ = ψ†ψ,于是U†U = I。所以,"算符是幺正的"并不是额外拍脑袋加的条件,而是"线性演化+概率总和为1"的自然推论。
这里顺便澄清一个常见误会:量子力学并不是所有操作都幺正。"测量"会造成态坍缩,把叠加态随机投射到一个本征态上,这一过程整体上是非幺正的。正因为如此,物理学家才格外强调"幺正演化":除测量外,闭合系统的演化全是幺正的。这句话在量子计算相关讨论里几乎天天出现。
4.2 从薛定谔方程到指数映射
有限维度下,薛定谔方程写作iℏ d|ψ⟩/dt = H|ψ⟩,其中H是哈密顿量,一个厄米矩阵。方程的标准解是|ψ(t)⟩ = e^{-iHt/ℏ}|ψ(0)⟩。现在看U(t) = e^{-iHt/ℏ}的幺正性:因为H† = H,所以U†(t) = (e^{-iHt/ℏ})† = e^{+iHt/ℏ},而U⁻¹(t) = e^{+iHt/ℏ},两者相等,所以U(t)是幺正矩阵。这个推导完全不需要计算特征值,纯粹是"厄米矩阵取指数必得幺正矩阵"的幂级数性质。
这条规律已经把物理和数学绑在一起:厄米矩阵(可观测量)是"生成元",幺正矩阵(演化/门)是"指数映射"。量子门设计中,几乎所有门都是从一个哈密顿量通过指数映射造出来的。想构造一个幺正矩阵,最可靠的路子就是找一个厄米矩阵做指数。
4.3 几个量子门的实例
量子计算里,量子门就是作用在量子比特上的幺正矩阵,最常用的几个长这样:
- Hadamard门:H_gate = (1/√2)[[1, 1], [1, -1]],把计算基|0⟩、|1⟩变成等权重叠加态。
- 相位门:P(θ) = diag(1, e^{iθ}),只给|1⟩项加相对相位。
- Pauli-X门:X = [[0, 1], [1, 0]],经典的量子非门。
- CNOT门:4×4块对角矩阵[[I, O], [O, X]],控制比特为1时翻转目标比特。
随便验证一个,Hadamard矩阵是实数且对称,又有H² = I,所以H†H = HH = I,是幺正矩阵,同时也是厄米矩阵。CNOT门因为分块乘法直接得到I₄,也显然幺正。这些门在量子电路里不断出现,共同特征就是"不改变态的总概率"。这也是"量子计算中除测量外的运算步骤都是可逆幺正操作"这一说法的来源。
5. 手把手验证一个矩阵是不是幺正:操作步骤与常见翻车点
5.1 三种验证思路
方法一:按定义硬算。把U的共轭转置U†算出来,然后乘U,看结果是不是单位阵。最直接,但矩阵一大就累。方法二:检查列向量。U的每一列看作一个向量,要求这些列向量两两正交且每个模长都是1。满足这个条件,U就是幺正矩阵;这个条件与U†U = I完全等价,因为U†U的第(i, j)个元素其实就是第i列和第j列的内积。方法三:数值上直接算Frobenius范数‖U†U - I‖,接近0即确认。
三种方法里,手算小矩阵用一和二,程序验证用三。实际工作中我最常用方法三,一行代码写完;但理解上方法二最贴近"标准正交基"的几何意义。
5.2 数值容差:别用等号判断浮点矩阵
在Python里,如果用numpy写U.conj().T @ U == np.eye(n),结果几乎总是False,因为浮点运算的误差会让单位矩阵的对角线上出现1.0000000000000002之类的数字。正确的姿势是:
import numpy as np print(np.allclose(U.conj().T @ U, np.eye(n), atol=1e-8))allclose会逐个比较元素,允许绝对误差在atol以内。这个习惯不仅适用于判断幺正矩阵,也适用于验证任何矩阵恒等式。数值计算里有句老话:不用等号,用容差。
5.3 一些常见的翻车点
我在答疑和代码评审里反复见过下面几类误解,集中列出来,省得大家再踩。
- 把转置当共轭转置。一个复矩阵U = [[i]],UᵀU = -1,但U†U = 1,所以它是幺正矩阵。漏掉共轭,直接误判。
- 把"特征值都在单位圆上"当充分条件。典型反例是Jordan块[[1, 1], [0, 1]],特征值全是1,但不是幺正矩阵,因为它不满足U†U = I。
- 混淆幺正矩阵与厄米矩阵。幺正要求U† = U⁻¹;厄米要求H† = H。Pauli-X和Hadamard同时满足两者,那是因为它们恰好是实对称且自逆的矩阵,不能推广成普遍规律。
- 以为行列式只能是±1。复数矩阵行列式只要是模长为1的复数就行,例子前面给了。
- 只检查部分列。比如只查每列范数都是1,却不查列间正交。一个等角但不正交的框架不会构成幺正矩阵。要查就整套查完。
如果你用这套标准审视手头矩阵时发现不满足,先不要怀疑矩阵本身,回头检查自己的共轭转置是不是写对了。我在真实项目里踩过的经验是:八成以上的"它明明应该是酉矩阵却验证不过"的报告,最后都是代码里少了个conj()。
6. 自己动手构造幺正矩阵:四种实用套路
6.1 厄米矩阵取指数:U = exp(iH)
给定厄米矩阵H,U = exp(iH)一定是幺正矩阵。原因是U† = exp(-iH) = U⁻¹。实际计算矩阵指数时,最通用的办法是先把H对角化:H = VDV†,则exp(iH) = V exp(iD)V†,其中exp(iD)就是对角矩阵diag(e^{iλ₁}, ..., e^{iλₙ})。这告诉我们非常实用的结论:想生成幺正矩阵,只需要随便找一个厄米矩阵然后做指数。
量子力学的门构造走的就是这条路。比如Pauli-X矩阵X本身是厄米的,exp(iθX) = cos(θ)I + i sin(θ)X就是一个绕着某个轴旋转的量子门。这个小公式值得记,它把"连续旋转角度"和"离散矩阵"联系在了一起。
6.2 复数版Householder变换
对任意非零复向量v,定义H = I - 2vv†/(v†v)。由于vv†是厄米矩阵,H† = H;直接展开平方又可以得到H² = I,所以H的逆等于它自己。综合起来H† = H = H⁻¹,于是H是一个幺正矩阵,同时也是一个厄米矩阵。Householder变换的本意是把向量v反射到某个固定方向,在QR分解、线性方程组消元里是核心工具。
复数情形下手写这个公式容易犯的错,是把v†v误写成vᵀv。差了一个共轭,分母就不再是实数,整个变换的性质就变了。写代码时也建议检查一下分母是不是实数,这一步能帮你快速发现共轭转置写没写对。
6.3 参数化2×2幺正矩阵
任意一个2×2幺正矩阵都可以写成U = e^{iδ}[[a, -b̄], [b, ā]],其中|a|² + |b|² = 1,δ为任意实数。这个形式的妙处在于,你不需要额外验证,只要随意选择两个满足模长平方和为1的复数a、b,再乘一个整体相位e^{iδ},得到的矩阵自动是幺正的。比如取a = 1/√2,b = i/√2,δ = 0,立刻得到U = (1/√2)[[1, i], [i, 1]],就是第2节那个例子。这个参数化在量子信息里常用于表示单比特门,配合旋转角写法,可以直接对应Bloch球上的任意旋转。
6.4 从QR分解和SVD里"顺手捡"
工程上最省事的随机幺正矩阵生成法:构造一个元素为独立复高斯随机数的矩阵A,然后做QR分解A = QR,得到的Q就是一个随机幺正矩阵。如果你关心分布细节,这个Q是服从Haar测度的均匀随机酉矩阵,这在量子信息模拟里很重要;不关心时,记住"随机高斯矩阵的QR分解中Q是随机酉矩阵"就够了。我在写量子模拟代码时经常用这一步,比自己手工正交化快得多。
写成Python大概是这样:
import numpy as np n = 4 A = np.random.randn(n, n) + 1j * np.random.randn(n, n) Q, R = np.linalg.qr(A) print(np.allclose(Q.conj().T @ Q, np.eye(n))) # True同样,对任意可逆矩阵A做SVD,得到A = UΣV†,那么U和V都是幺正矩阵。这意味着,只要你的工具箱里有QR或SVD,你就等于同时拥有一台"标准正交基生产线"。
这么多年过去,我对"酉"字的偏见早就烟消云散了,每次看到它反而会条件反射想起量子门和那堆复相位。个人建议是把5.3节那几个误区存成小卡片,写代码时对照一遍;再把6.1的厄米指数和6.4的QR分解这两招练熟,基本就能应付绝大多数和幺正矩阵打交道的场景。至于"酉"和"幺正"哪个更好听,留给翻译界争论,我们只要知道它们是同一个东西就行了。