我们知道,修考矩阵对角化的出题公式可以概括为以下四步:
- 求固有值(列方程):解特征方程 ∣λI−A∣=0。利用行列式性质(如全行相加)提取公因式,求出 λ,并利用迹(Trace)和行列式(Det)快速检算。
- 求基底(解方程组):对每个 λ 解齐次方程組 (λI−A)x=0。规范书写固有空间的基底向量,注意重根情况下基底的数量。
- 正交化(针对实对称矩阵):若要求正交矩阵 P,需对固有向量进行单位化。若存在重根,必须对该特征值的基底执行施密特正交化(Gram-Schmidt)。
- 写结论(对应匹配):构造 P 和对角阵 D。务必保证 P 中列向量的顺序与 D 中特征值的排列顺序完全对应。
其中,Gram-Schmidt部分一直是记忆的难点。本人在参考诸多B站视频以及与AI探讨过后,总结出了一些较好的记忆方法,记录于本贴中。
Gram-Schmidt的定义一直不难,难点在于公式的应用。传统的 Gram-Schmidt 公式通常被写作如下形态:
vk′=vk−i=1∑k−1ui⋅uivk⋅uiui这个公式之所以“丑陋”且难记,根本原因在于其保留了非单位向量的中间状态。分母上的 ui⋅ui(即向量长度的平方)是为了消除基底长度不为 1 所带来的缩放误差,这是一种代数上的“补丁”。
也有视频说在记忆时可以理解为上面两个ui和下面两个互相抵消,这样算出来的就是未归一化时向量的方向。
优化方案:即时归一化(Immediate Normalization)。
如果我们在算法的每一步,都强制将生成的新正交基缩放为单位向量(长度为 1),即 ∥ui∥=1,那么 ui⋅ui 将永远等于 1。恶心的分母瞬间消失,整个体系将迎来极度的清爽。
记忆方法#
“正交投影”的几何直觉#
在即时归一化的前提下,Gram-Schmidt 算法实际上只由一块基础“积木”循环构建而成,即向量在单位向量上的投影公式:
Proju(v)=(v⋅u)u很多学习者在接触点乘(内积)时,往往只记住了坐标相乘再相加的代数公式(如 x1x2+y1y2),却完全丧失了对其底层几何直觉的感知。为了透彻理解这个投影公式,我们需要暂时抛开代数课本,回到初中几何的直角三角形中,将公式解构为“测量”与“定向”两个独立动作。
1. (v⋅u) —— 测量标量(影子的绝对长度)#
在线性代数中,点乘拥有一个极其伟大的几何定义公式:
v⋅u=∣v∣∣u∣cosθ其中,∣v∣ 是向量 v 的真实长度(斜边),∣u∣ 是向量 u 的真实长度(底边),θ 是两者之间的夹角。
这里的核心关键在于:在 Gram-Schmidt 过程中,我们严格要求选出的基底 u 必须是单位向量(∣u∣=1)。将其代入上述公式:
v⋅u=∣v∣×1×cosθ=∣v∣cosθ在直角三角形中,斜边乘以夹角的余弦值(∣v∣cosθ),正是那条“邻边”的长度。这恰恰对应了手电筒垂直照射下来时,斜边 v 在底边 u 上投出的影子的绝对物理长度。
⚠️ 致命防坑提示:
这解释了为何基底必须归一化。若 u 的长度为 3,算出的点积将是 3×∣v∣cosθ,影子的长度会被错误地放大 3 倍!只有当 ∣u∣=1 时,点乘结果才完美等价于影子的真实标量长度。
2. u —— 赋予矢量(影子的空间方向)#
通过点乘,我们得到了影子长度(假设算出的数字是 5)。但在向量空间中,标量无法直接参与向量的加减运算。我们需要将“长度 5”转化为一个活生生的向量。
数字(标量)只有大小没有方向,例如“往前走 5 米”。
向量(矢量)既有大小又有方向,例如“顺着 x 轴正方向走 5 个单位”。
怎么把标量变成矢量?非常简单:拿长度去乘以一个代表纯粹方向的“单位方向向量”。由于基底 u 的长度严格为 1,它在乘法中只提供空间方向,绝不会改变标量的数值大小。
- 标量表述:“顺着 u 的方向走 5 个单位”,写成代数形式即为 5u。
- 投影表述:“顺着 u 的方向走 (v⋅u) 个单位”,写成代数形式即为 (v⋅u)u。
将两者结合,我们得到了投影公式的完整逻辑:
大小 (投影长度)(v⋅u)×方向 (基底方向)u=完整的投影向量(v⋅u)uTIP虽然公式里写了 cosθ,但在实际计算点积的时候,我们根本不需要算 cosθ。
我们直接用公式 v⋅u 算出的是 ∣v∣cosθ,这是一个纯数字,完美对应了影子的真实物理长度。
后续乘以 u 只是为了给这个长度加上一个“方向”(因为 u 是单位向量,不改变长度数值)。
初中的直角三角形余弦公式:
cosθ=斜边邻边移项得到:
邻边长度=斜边长度×cosθ现在看回我们的点乘公式。向量 v3 点乘向量 u2 的物理定义是:
v3⋅u2=∣v3∣×∣u2∣×cosθ核心破局点来了:在 Gram-Schmidt 里,我们极其苛刻地要求了 u2 必须是归一化后的方向(单位向量)!
也就是说,∣u2∣ 永远等于 1。
把它代入公式:
v3⋅u2=∣v3∣×1×cosθ=∣v3∣cosθ看出来了吗?∣v3∣ 就是斜边的长度。∣v3∣cosθ 就是邻边的长度!而这条邻边,就是 v3 垂直照在 u2 上的影子的绝对长度!
V3归一化的时间节点#
在格拉姆-施密特正交化(Gram-Schmidt Orthogonalization)过程中,对于给定的线性无关向量 v3,无需预先进行单位化操作。
首先,计算 v3 在已知的标准正交基 u2 上的正交投影。由于 u2 满足 ∥u2∥=1,内积 ⟨v3,u2⟩ 的代数运算直接等效于几何意义上的标量投影,规避了夹角余弦的显式计算。将该标量投影乘以方向向量 u2,即可得到正交投影向量。
随后,通过向量减法求取正交补分量:
v3′=v3−⟨v3,u2⟩u2此操作剥离了 v3 在 u2 方向上的线性相关信息,确保生成的 v3′ 与 u2 绝对正交。
最后,对该正交补分量执行归一化(Normalization)处理,将其除以自身的欧几里得范数,从而构造出新的标准正交基向量:
u3=∥v3′∥v3′NOTE在投影公式中,被减数v3不用归一化,是算完v3′,也就是垂直那条向量的最终长度,通过v3减去v3点乘u2(u2长度是1所以得到投影,我理解的是cosθ是物理意义,只是数值等于v3点乘u2,实际算的时候没有用到这个cosθ)再乘上u2(这时候u2是方向),最后再转化成单位基,这样的一个过程。
算法核心框架#
有了最简的投影公式,Gram-Schmidt 正交化就不再是一长串死记硬背的字符,而是一个清晰的标准迭代过程。
假设输入为一组线性无关的向量集 {v1,v2,…,vn},目标是输出一组标准正交基 {u1,u2,…,un}。算法遵循以下三步生命周期:
Step 1: 初始化 (Initialization)#
初始向量 v1 无需与其他向量进行正交化处理,直接对其进行归一化操作,确立为第一个标准正交基:
u1=∥v1∥v1Step 2: 剔除已知投影分量 (Orthogonalization)#
当第 k 个向量 vk 进入时,前面已经存在 k−1 个互相垂直的单位基底(u1,u2,…,uk−1)。
为了保证正交性,vk 必须减去其在所有已知基底上的投影分量。此步骤的物理意义是:剔除与已有维度重合的信息,仅保留全新的正交分量。
vk′=vk−在 u1 上的投影(vk⋅u1)u1−在 u2 上的投影(vk⋅u2)u2−⋯−在 uk−1 上的投影(vk⋅uk−1)uk−1Step 3: 归一化输出 (Normalization)#
完成投影剔除后,残余分量 vk′ 已经与前面所有的基底绝对正交。最后,将其缩放为单位长度,即可得到第 k 个标准正交基:
uk=∥vk′∥vk′
通过重构几何直觉,我们可以将 Gram-Schmidt 算法提炼为极其严密的通用逻辑。在实际推导或编写代码时,无需回忆带有分母的复杂公式表,只需执行这个“减去所有已知投影 → 归一化”的循环控制流程:
对于 k=1,2,…,n:
- 提取全新正交分量(减去影子):
vk′=vk−i=1∑k−1(vk⋅ui)ui
- 归一化生成新基底(确立路标):
uk=∥vk′∥vk′核心准则:
始终维护一个单位向量集合。面对新向量,求内积得长度,乘基底得方向,减去投影得正交分量,最后归一化。
应用示例:CBMS 2026.1 Q7#
CBMS近几年的线代题为受验者们提供了较为经典的解题范式。
让我们从CBMS26年冬入真题的前三问开始探讨。
(1) 行列 A=2−1−1−12−1−1−12 の固有値を求めよ。
(2) 行列 A の固有空間の基底を求めよ。
(3) PTAP が対角行列になるような直交行列 P を求めよ。
A=2−1−1−12−1−1−12核心目标: 寻找正交矩阵 P 和对角矩阵 Λ,使得 A=PΛPT。
🟢 第一阶段:求特征值 (解固有方程式)#
我们需要解特征方程 ∣λI−A∣=0。
∣λI−A∣=λ−2111λ−2111λ−2=0操作技巧(列相加): 观察到每一行的元素之和均为 λ。将第 2 列和第 3 列全部加到第 1 列上:
λλλ1λ−2111λ−2=0提取公因数并化简: 提取第 1 列的 λ,然后将第 1 行乘以 −1 分别加到第 2 行和第 3 行,使左下角清零:
λ1001λ−3010λ−3=λ(λ−3)2=0结论: 得到特征值 λ1=0 (单根),以及 λ2=λ3=3 (二重根)。
🟡 第二阶段:求特征空间的基底 (求特征向量)#
对于每个特征值,解齐次线性方程组 (λI−A)x=0。
1. 当 λ=0 时:#
−2111−2111−2x1x2x3=000解这个普通的方程组,可以得到基础解系:
v1=1112. 当 λ=3 时 (重头戏):#
111111111x1x2x3=000化简为单一约束条件:x1+x2+x3=0。
引入自由变量,令 x2=s,x3=t,则 x1=−s−t。
x1x2x3=−s−tst=s−110+t−101得到该二维特征空间的两个基底:
v2=−110,v3=−101
🟠 第三阶段:正交化与正规化 (Gram-Schmidt 过程)#
因为 A 是实对称矩阵,最终的 P 必须是正交矩阵。要求所有特征向量必须两两互相垂直,且长度为 1。
-
对于 v1 (独苗,直接正规化):
长度 ∥v1∥=12+12+12=3。
u1=31111
-
对于 v2 (选为 λ=3 阵营的老大,直接正规化):
长度 ∥v2∥=(−1)2+12+0=2。
u2=21−110
-
对于 v3 (剔除在 u2 上的投影,强制掰直,再正规化):

注意,两个红框是两种完全不同的乘法。
在同一个公式 (v3⋅u2)u2 里,包含了两次乘法,但它们的物理意义和运算法则截然不同。
- 左边的红框:这是真正的“点乘”(内积 / Dot Product)
−101⋅21−110看参与者: 它的左边是一个向量,右边也是一个向量。
看符号: 它们中间有一个非常明确的黑点 ⋅。这是点乘的专属符号。
物理意义: 这就是我们在前面讨论的“测量阶段”。它在计算 v3 落在 u2 方向上的“影子长度”。
运算结果: 两个向量进行点乘,结果会坍缩成一个纯数字(标量)。在这里,算出来的结果就是 21(或者写成 21×2−1… 提取出来的结果)。
- 右边的红框:这是“数乘”(标量乘法 / Scalar Multiplication)
21(1+0+0)−110看参与者: 它的左边 21(1+0+0) 就是一坨纯纯的数字(等于 21);而它的右边是一个向量。
看符号: 数字和向量直接挨在一起写,中间没有那个黑点 ⋅。
物理意义: 这就是我们在前面讨论的“定向阶段”。它拿着刚才算出来的影子长度(数字 21),去乘以代表方向的基底(向量 u2)。
运算结果: 把数字分配到向量的每一个坐标里去,相当于把这根向量拉长或缩短。结果是一个新的向量。
回到我们的终极公式 Proj=(v⋅u)u:
第一步: 括号里的 (v⋅u) 是点乘。向量 ⋅ 向量 → 变成数字(算出长度)。
第二步: 括号外的 (数字)u 是数乘。数字 × 向量 → 变成新向量(赋予方向)。
从“点乘算出长度”,到“数乘赋予方向”。就是算数字;数字直接贴着括号的,就是拉伸向量!
🔴 第四阶段:大结局合体 (构建 P 和 Λ)#
现在我们拥有了极其完美的标准正交基:u1,u2,u3。
1. 构建正交矩阵 P (按列排布):
P=(u1u2u3)=313131−21210−61−61622. 构建对角矩阵 Λ (主对角线填入对应的特征值):
Λ=000030003终极宣告:
至此,原矩阵 A 被完美正交对角化,满足:
A=PΛP−1=PΛPT(完整计算过程结束)
Summary#
死记硬背 Gram-Schmidt 的那一大串带 Σ(求和号)、点积、分数的公式,绝对是反人类的。在考场上一紧张,极容易把下标写错。
要想把 Gram-Schmidt 真正刻进骨子里,你必须忘掉公式,只记动作。
整个过程其实就是一个极其残酷的**“按资排辈与清洗”**系统。教你一套在考场上绝对不会忘的记忆心法:
💡 核心心法:一句话口诀#
“确立新核心,挨个交保护费(剔除投影),最后自我洗礼(正规化)。”
无论给你多少个向量(v1,v2,v3…vn),它们排着队进来改造,每个向量进门后都只能做三件事:
- 看前辈: 看看前面已经有几个被改造好的、纯洁的“大哥”了(即已经算出来的 u1,u2…)。
- 交保护费(去阴影): 前面有几个大哥,你就要向几个大哥交保护费。保护费是什么?就是你身上顺着大哥方向的“投影成分”。把它减掉!
- 自我洗礼: 保护费交干榨净后,剩下的一点残骸,强行拉伸或压缩到长度为 1(正规化),你就能晋升为新的大哥。
🔧 唯一需要背的积木:投影公式#
只需要死记这一小块积木:
如何计算 v 在单位向量 u 上的投影?
Proj=(v⋅u)u
- 物理意义记忆:
- 括号里的 (v⋅u) 是一个数字,代表“长度”(影子有多长)。
- 外面的 u 是一个向量,代表“方向”(顺着老大的方向)。
- 两者相乘:长度 × 方向 = 阴影向量。
🔄 考场上的默写流水线#
只要记住“积木”和“挨个交保护费”的规矩,你在考场上可以瞬间现推任何维度的公式,根本不需要背:
-
第一个进门的 v1:
前面没有大哥,不用交保护费。直接自我洗礼。
u1=∥v1∥v1
-
第二个进门的 v2:
前面有 1 个大哥(u1),交 1 次保护费。
残骸:
v2′=v2−(v2⋅u1)u1
洗礼:
u2=∥v2′∥v2′
-
第三个进门的 v3:
前面有 2 个大哥(u1,u2),必须交 2 次保护费!
残骸:
v3′=v3−(v3⋅u1)u1−(v3⋅u2)u2
洗礼:
u3=∥v3′∥v3′
-
第 k 个进门的 vk:
疯狂减去前面所有 k−1 个大哥的投影。
残骸:
vk′=vk−(vk⋅u1)u1−(vk⋅u2)u2−⋯−(vk⋅uk−1)uk−1
洗礼:
uk=∥vk′∥vk′
最后的防坑警告:
很多教材喜欢把公式写成 v3′=v3−v1⋅v1v3⋅v1v1−v2′⋅v2′v3⋅v2′v2′。
千万不要去背这种带分母的恶心形态! 这是因为他们没有“边做边正规化”。
在考场上,一定要算出一个 u,就立刻把它正规化(化为单位向量)! 只要所有的 u 长度都是 1,分母就永远是 1,公式就能保持极其清爽的 v−(v⋅u)u 形态。这也是最不容易算错符号的方法。
NOTE1. 固有値の算出(固有方程式)#
まずは行列 A に対して固有方程式 PA(λ)=∣λI−A∣=0 を解きます。
- 行列式の工夫: いきなり展開せず、各行・各列の和が一定なら「第1列に全て足し合わせる」等の操作で (λ−k) を括り出します。
- 検算(トレースと行列式):
- 固有値の和 = tr(A) (対角成分の和)
- 固有値の積 = det(A)
これを確認するだけで、計算ミスの 80% は防げます。
2. 固有ベクトルの算出と基底の決定#
各固有値 λi に対して、(λiI−A)x=0 を解きます。
- 自由度の確認: 重解がない場合は変数は1つ、2重解の場合は(対角化可能なら)基底が2つ出るはずです。
- 記述のポイント: 「(λiI−A)x=0 を解くと、… より x=c(111)T (c=0)。よって固有空間 W(λi) の基底は …」と丁寧に記述します。
3. 直交行列による対角化(実対称行列の場合)#
入試で最も頻出するのは「実対称行列」です。この場合、単なる変換行列 P ではなく、直交行列 P を求めよと指示されます。
- 正規化: 各固有ベクトルの長さを 1 にします(u=∣x∣x)。
- 重解がある場合の直交化:
- 同じ固有値から出た基底同士は、そのままでは直交しないことがあります。
- この場合、必ず グラム・シュミットの直交化法 を適用してください。
- 注意: 異なる固有値に属するベクトル同士は、理論上必ず直交しているため、正規化だけで済みます。
4. 変換行列 P と対角行列 D の構成#
最後に結果をまとめます。
- 並び順の一致: P=(u1 u2 u3) と並べたなら、対角行列 D も対応する固有値の順に diag(λ1,λ2,λ3) と並べる必要があります。
- 最終チェック: 余裕があれば、ごく一部の成分だけで良いので AP=PD が成立するか確認します。
【記述のコツ】採点官へのアピール#
院試の記述回答では、以下のフレーズを適切に挟むと「わかっている感」が出ます。
- 「実対称行列は直交行列によって対角化可能であるから…」
(定理の適用条件を明示)
- 「相異なる固有値に属する固有ベクトルは互いに直交するから、同一の固有空間内でのみ直交化を行えばよい」
(計算の手間を省く理論的根拠)
- 「PTP=I を満たす直交行列 P を構成すると…」
(直交行列の定義の再認)
おすすめの練習順序#
- 3次正方行列(重解なし): 基本的な計算フローの確立。
- 3次実対称行列(重解あり): グラム・シュミットの習得。
- 変数が含まれる行列: 固有値が a や b になるケース(文字式の扱いに慣れる)。