5587 words
28 minutes
How to Memorize Gram-Schmidt Orthogonalization: Starting from CBMS Exam Problems

前言#

我们知道,修考矩阵对角化的出题公式可以概括为以下四步:

  1. 求固有值(列方程):解特征方程 λIA=0|\lambda I - A| = 0。利用行列式性质(如全行相加)提取公因式,求出 λ\lambda,并利用迹(Trace)和行列式(Det)快速检算。
  2. 求基底(解方程组):对每个 λ\lambda 解齐次方程組 (λIA)x=0(\lambda I - A)\boldsymbol{x} = \boldsymbol{0}。规范书写固有空间的基底向量,注意重根情况下基底的数量。
  3. 正交化(针对实对称矩阵):若要求正交矩阵 PP,需对固有向量进行单位化。若存在重根,必须对该特征值的基底执行施密特正交化(Gram-Schmidt)。
  4. 写结论(对应匹配):构造 PP 和对角阵 DD。务必保证 PP 中列向量的顺序与 DD 中特征值的排列顺序完全对应。

其中,Gram-Schmidt部分一直是记忆的难点。本人在参考诸多B站视频以及与AI探讨过后,总结出了一些较好的记忆方法,记录于本贴中。

定义#

Gram-Schmidt的定义一直不难,难点在于公式的应用。传统的 Gram-Schmidt 公式通常被写作如下形态:

vk=vki=1k1vkuiuiuiuiv_k' = v_k - \sum_{i=1}^{k-1} \frac{v_k \cdot u_i}{u_i \cdot u_i} u_i

这个公式之所以“丑陋”且难记,根本原因在于其保留了非单位向量的中间状态。分母上的 uiuiu_i \cdot u_i(即向量长度的平方)是为了消除基底长度不为 11 所带来的缩放误差,这是一种代数上的“补丁”。

也有视频说在记忆时可以理解为上面两个uiu_i和下面两个互相抵消,这样算出来的就是未归一化时向量的方向。

优化方案:即时归一化(Immediate Normalization)。 如果我们在算法的每一步,都强制将生成的新正交基缩放为单位向量(长度为 11,即 ui=1\|u_i\| = 1,那么 uiuiu_i \cdot u_i 将永远等于 11。恶心的分母瞬间消失,整个体系将迎来极度的清爽。

记忆方法#

“正交投影”的几何直觉#

在即时归一化的前提下,Gram-Schmidt 算法实际上只由一块基础“积木”循环构建而成,即向量在单位向量上的投影公式:

Proju(v)=(vu)u\text{Proj}_{u}(v) = (v \cdot u) u

很多学习者在接触点乘(内积)时,往往只记住了坐标相乘再相加的代数公式(如 x1x2+y1y2x_1 x_2 + y_1 y_2),却完全丧失了对其底层几何直觉的感知。为了透彻理解这个投影公式,我们需要暂时抛开代数课本,回到初中几何的直角三角形中,将公式解构为“测量”与“定向”两个独立动作。

1. (vu)(v \cdot u) —— 测量标量(影子的绝对长度)#

在线性代数中,点乘拥有一个极其伟大的几何定义公式:

vu=vucosθv \cdot u = |v| |u| \cos\theta

其中,v|v| 是向量 vv 的真实长度(斜边),u|u| 是向量 uu 的真实长度(底边),θ\theta 是两者之间的夹角。

这里的核心关键在于:在 Gram-Schmidt 过程中,我们严格要求选出的基底 uu 必须是单位向量u=1|u| = 1)。将其代入上述公式:

vu=v×1×cosθ=vcosθv \cdot u = |v| \times 1 \times \cos\theta = |v| \cos\theta

在直角三角形中,斜边乘以夹角的余弦值(vcosθ|v| \cos\theta),正是那条“邻边”的长度。这恰恰对应了手电筒垂直照射下来时,斜边 vv 在底边 uu 上投出的影子的绝对物理长度

⚠️ 致命防坑提示: 这解释了为何基底必须归一化。若 uu 的长度为 33,算出的点积将是 3×vcosθ3 \times |v|\cos\theta,影子的长度会被错误地放大 33 倍!只有当 u=1|u|=1 时,点乘结果才完美等价于影子的真实标量长度。

2. uu —— 赋予矢量(影子的空间方向)#

通过点乘,我们得到了影子长度(假设算出的数字是 55)。但在向量空间中,标量无法直接参与向量的加减运算。我们需要将“长度 55”转化为一个活生生的向量。

数字(标量)只有大小没有方向,例如“往前走 55 米”。 向量(矢量)既有大小又有方向,例如“顺着 xx 轴正方向走 55 个单位”。

怎么把标量变成矢量?非常简单:拿长度去乘以一个代表纯粹方向的“单位方向向量”。由于基底 uu 的长度严格为 11,它在乘法中只提供空间方向,绝不会改变标量的数值大小。

  • 标量表述:“顺着 uu 的方向走 55 个单位”,写成代数形式即为 5u5u
  • 投影表述:“顺着 uu 的方向走 (vu)(v \cdot u) 个单位”,写成代数形式即为 (vu)u(v \cdot u) u

将两者结合,我们得到了投影公式的完整逻辑:

(vu)大小 (投影长度)×u方向 (基底方向)=(vu)u完整的投影向量\underbrace{(v \cdot u)}_{\text{大小 (投影长度)}} \times \underbrace{u}_{\text{方向 (基底方向)}} = \underbrace{(v \cdot u) u}_{\text{完整的投影向量}}
TIP

虽然公式里写了 cosθ\cos\theta,但在实际计算点积的时候,我们根本不需要算 cosθ\cos\theta。 我们直接用公式 vuv \cdot u 算出的是 vcosθ|v| \cos\theta,这是一个纯数字,完美对应了影子的真实物理长度。 后续乘以 uu 只是为了给这个长度加上一个“方向”(因为 uu 是单位向量,不改变长度数值)。

初中的直角三角形余弦公式:

cosθ=邻边斜边\cos\theta = \frac{\text{邻边}}{\text{斜边}}

移项得到:

邻边长度=斜边长度×cosθ\text{邻边长度} = \text{斜边长度} \times \cos\theta

现在看回我们的点乘公式。向量 v3v_3 点乘向量 u2u_2 的物理定义是:

v3u2=v3×u2×cosθv_3 \cdot u_2 = |v_3| \times |u_2| \times \cos\theta

核心破局点来了:在 Gram-Schmidt 里,我们极其苛刻地要求了 u2u_2 必须是归一化后的方向(单位向量)! 也就是说,u2|u_2| 永远等于 1。 把它代入公式:

v3u2=v3×1×cosθ=v3cosθv_3 \cdot u_2 = |v_3| \times 1 \times \cos\theta = \mathbf{|v_3| \cos\theta}

看出来了吗?v3|v_3| 就是斜边的长度。v3cosθ|v_3| \cos\theta 就是邻边的长度!而这条邻边,就是 v3v_3 垂直照在 u2u_2 上的影子的绝对长度!

V3归一化的时间节点#

在格拉姆-施密特正交化(Gram-Schmidt Orthogonalization)过程中,对于给定的线性无关向量 v3v_3,无需预先进行单位化操作。

首先,计算 v3v_3 在已知的标准正交基 u2u_2 上的正交投影。由于 u2u_2 满足 u2=1\|u_2\| = 1,内积 v3,u2\langle v_3, u_2 \rangle 的代数运算直接等效于几何意义上的标量投影,规避了夹角余弦的显式计算。将该标量投影乘以方向向量 u2u_2,即可得到正交投影向量。

随后,通过向量减法求取正交补分量:

v3=v3v3,u2u2v'_3 = v_3 - \langle v_3, u_2 \rangle u_2

此操作剥离了 v3v_3u2u_2 方向上的线性相关信息,确保生成的 v3v'_3u2u_2 绝对正交。

最后,对该正交补分量执行归一化(Normalization)处理,将其除以自身的欧几里得范数,从而构造出新的标准正交基向量:

u3=v3v3u_3 = \frac{v'_3}{\|v'_3\|}
NOTE

在投影公式中,被减数v3v_3不用归一化,是算完v3v'_3,也就是垂直那条向量的最终长度,通过v3v_3减去v3v_3点乘u2u_2u2u_2长度是1所以得到投影,我理解的是cosθ\cos\theta是物理意义,只是数值等于v3v_3点乘u2u_2,实际算的时候没有用到这个cosθ\cos\theta)再乘上u2u_2(这时候u2u_2是方向),最后再转化成单位基,这样的一个过程。


算法核心框架#

有了最简的投影公式,Gram-Schmidt 正交化就不再是一长串死记硬背的字符,而是一个清晰的标准迭代过程。

假设输入为一组线性无关的向量集 {v1,v2,,vn}\{v_1, v_2, \dots, v_n\},目标是输出一组标准正交基 {u1,u2,,un}\{u_1, u_2, \dots, u_n\}。算法遵循以下三步生命周期:

Step 1: 初始化 (Initialization)#

初始向量 v1v_1 无需与其他向量进行正交化处理,直接对其进行归一化操作,确立为第一个标准正交基:

u1=v1v1u_1 = \frac{v_1}{\|v_1\|}

Step 2: 剔除已知投影分量 (Orthogonalization)#

当第 kk 个向量 vkv_k 进入时,前面已经存在 k1k-1 个互相垂直的单位基底(u1,u2,,uk1u_1, u_2, \dots, u_{k-1})。 为了保证正交性,vkv_k 必须减去其在所有已知基底上的投影分量。此步骤的物理意义是:剔除与已有维度重合的信息,仅保留全新的正交分量

vk=vk(vku1)u1在 u1 上的投影(vku2)u2在 u2 上的投影(vkuk1)uk1在 uk1 上的投影v_k' = v_k - \underbrace{(v_k \cdot u_1)u_1}_{\text{在 } u_1 \text{ 上的投影}} - \underbrace{(v_k \cdot u_2)u_2}_{\text{在 } u_2 \text{ 上的投影}} - \dots - \underbrace{(v_k \cdot u_{k-1})u_{k-1}}_{\text{在 } u_{k-1} \text{ 上的投影}}

Step 3: 归一化输出 (Normalization)#

完成投影剔除后,残余分量 vkv_k' 已经与前面所有的基底绝对正交。最后,将其缩放为单位长度,即可得到第 kk 个标准正交基:

uk=vkvku_k = \frac{v_k'}{\|v_k'\|}

小结#

通过重构几何直觉,我们可以将 Gram-Schmidt 算法提炼为极其严密的通用逻辑。在实际推导或编写代码时,无需回忆带有分母的复杂公式表,只需执行这个“减去所有已知投影 \rightarrow 归一化”的循环控制流程:

对于 k=1,2,,nk = 1, 2, \dots, n

  1. 提取全新正交分量(减去影子):
vk=vki=1k1(vkui)uiv_k' = v_k - \sum_{i=1}^{k-1} (v_k \cdot u_i) u_i
  1. 归一化生成新基底(确立路标):
uk=vkvku_k = \frac{v_k'}{\|v_k'\|}

核心准则: 始终维护一个单位向量集合。面对新向量,求内积得长度,乘基底得方向,减去投影得正交分量,最后归一化。

应用示例:CBMS 2026.1 Q7#

CBMS近几年的线代题为受验者们提供了较为经典的解题范式。

让我们从CBMS26年冬入真题的前三问开始探讨。


(1) 行列 A=(211121112)A = \begin{pmatrix} 2 & -1 & -1 \\ -1 & 2 & -1 \\ -1 & -1 & 2 \end{pmatrix} の固有値を求めよ。

(2) 行列 AA の固有空間の基底を求めよ。

(3) PTAPP^T AP が対角行列になるような直交行列 PP を求めよ。


A=(211121112)A = \begin{pmatrix} 2 & -1 & -1 \\ -1 & 2 & -1 \\ -1 & -1 & 2 \end{pmatrix}

核心目标: 寻找正交矩阵 PP 和对角矩阵 Λ\Lambda,使得 A=PΛPTA = P\Lambda P^T


🟢 第一阶段:求特征值 (解固有方程式)#

我们需要解特征方程 λIA=0|\lambda I - A| = 0

λIA=λ2111λ2111λ2=0|\lambda I - A| = \begin{vmatrix} \lambda - 2 & 1 & 1 \\ 1 & \lambda - 2 & 1 \\ 1 & 1 & \lambda - 2 \end{vmatrix} = 0

操作技巧(列相加): 观察到每一行的元素之和均为 λ\lambda。将第 2 列和第 3 列全部加到第 1 列上:

λ11λλ21λ1λ2=0\begin{vmatrix} \lambda & 1 & 1 \\ \lambda & \lambda - 2 & 1 \\ \lambda & 1 & \lambda - 2 \end{vmatrix} = 0

提取公因数并化简: 提取第 1 列的 λ\lambda,然后将第 1 行乘以 1-1 分别加到第 2 行和第 3 行,使左下角清零:

λ1110λ3000λ3=λ(λ3)2=0\lambda \begin{vmatrix} 1 & 1 & 1 \\ 0 & \lambda - 3 & 0 \\ 0 & 0 & \lambda - 3 \end{vmatrix} = \lambda(\lambda - 3)^2 = 0

结论: 得到特征值 λ1=0\lambda_1 = 0 (单根),以及 λ2=λ3=3\lambda_2 = \lambda_3 = 3 (二重根)。


🟡 第二阶段:求特征空间的基底 (求特征向量)#

对于每个特征值,解齐次线性方程组 (λIA)x=0(\lambda I - A)x = 0

1. 当 λ=0\lambda = 0 时:#

(211121112)(x1x2x3)=(000)\begin{pmatrix} -2 & 1 & 1 \\ 1 & -2 & 1 \\ 1 & 1 & -2 \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \\ x_3 \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \\ 0 \end{pmatrix}

解这个普通的方程组,可以得到基础解系:

v1=(111)v_1 = \begin{pmatrix} 1 \\ 1 \\ 1 \end{pmatrix}

2. 当 λ=3\lambda = 3 时 (重头戏):#

(111111111)(x1x2x3)=(000)\begin{pmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \\ x_3 \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \\ 0 \end{pmatrix}

化简为单一约束条件:x1+x2+x3=0x_1 + x_2 + x_3 = 0。 引入自由变量,令 x2=sx_2 = sx3=tx_3 = t,则 x1=stx_1 = -s - t

(x1x2x3)=(stst)=s(110)+t(101)\begin{pmatrix} x_1 \\ x_2 \\ x_3 \end{pmatrix} = \begin{pmatrix} -s - t \\ s \\ t \end{pmatrix} = s \begin{pmatrix} -1 \\ 1 \\ 0 \end{pmatrix} + t \begin{pmatrix} -1 \\ 0 \\ 1 \end{pmatrix}

得到该二维特征空间的两个基底:

v2=(110),v3=(101)v_2 = \begin{pmatrix} -1 \\ 1 \\ 0 \end{pmatrix}, \quad v_3 = \begin{pmatrix} -1 \\ 0 \\ 1 \end{pmatrix}

🟠 第三阶段:正交化与正规化 (Gram-Schmidt 过程)#

因为 AA 是实对称矩阵,最终的 PP 必须是正交矩阵。要求所有特征向量必须两两互相垂直,且长度为 1

  • 对于 v1v_1 (独苗,直接正规化): 长度 v1=12+12+12=3\|v_1\| = \sqrt{1^2 + 1^2 + 1^2} = \sqrt{3}

    u1=13(111)u_1 = \frac{1}{\sqrt{3}} \begin{pmatrix} 1 \\ 1 \\ 1 \end{pmatrix}
  • 对于 v2v_2 (选为 λ=3\lambda=3 阵营的老大,直接正规化): 长度 v2=(1)2+12+0=2\|v_2\| = \sqrt{(-1)^2 + 1^2 + 0} = \sqrt{2}

    u2=12(110)u_2 = \frac{1}{\sqrt{2}} \begin{pmatrix} -1 \\ 1 \\ 0 \end{pmatrix}
  • 对于 v3v_3 (剔除在 u2u_2 上的投影,强制掰直,再正规化):

    • 步骤 A (计算投影并相减):

      v3=v3(v3u2)u2v'_3 = v_3 - (v_3 \cdot u_2)u_2 v3=(101)((101)12(110))12(110)v'_3 = \begin{pmatrix} -1 \\ 0 \\ 1 \end{pmatrix} - \left( \begin{pmatrix} -1 \\ 0 \\ 1 \end{pmatrix} \cdot \frac{1}{\sqrt{2}} \begin{pmatrix} -1 \\ 1 \\ 0 \end{pmatrix} \right) \frac{1}{\sqrt{2}} \begin{pmatrix} -1 \\ 1 \\ 0 \end{pmatrix} v3=(101)12(1+0+0)(110)=(101)(1/21/20)=(1/21/21)v'_3 = \begin{pmatrix} -1 \\ 0 \\ 1 \end{pmatrix} - \frac{1}{2}(1 + 0 + 0)\begin{pmatrix} -1 \\ 1 \\ 0 \end{pmatrix} = \begin{pmatrix} -1 \\ 0 \\ 1 \end{pmatrix} - \begin{pmatrix} -1/2 \\ 1/2 \\ 0 \end{pmatrix} = \begin{pmatrix} -1/2 \\ -1/2 \\ 1 \end{pmatrix}
    • 步骤 B (正规化 v3v'_3): 长度 v3=(1/2)2+(1/2)2+12=6/4=62\|v'_3\| = \sqrt{(-1/2)^2 + (-1/2)^2 + 1^2} = \sqrt{6/4} = \frac{\sqrt{6}}{2}。 压缩至单位长度:

      u3=1v3v3=26(1/21/21)=16(112)u_3 = \frac{1}{\|v'_3\|} v'_3 = \frac{2}{\sqrt{6}} \begin{pmatrix} -1/2 \\ -1/2 \\ 1 \end{pmatrix} = \frac{1}{\sqrt{6}} \begin{pmatrix} -1 \\ -1 \\ 2 \end{pmatrix}

alt text


注意,两个红框是两种完全不同的乘法。

在同一个公式 (v3u2)u2(v_3 \cdot u_2)u_2 里,包含了两次乘法,但它们的物理意义和运算法则截然不同。

  1. 左边的红框:这是真正的“点乘”(内积 / Dot Product)
((101)12(110))\left( \begin{pmatrix} -1 \\ 0 \\ 1 \end{pmatrix} \cdot \frac{1}{\sqrt{2}} \begin{pmatrix} -1 \\ 1 \\ 0 \end{pmatrix} \right)

看参与者: 它的左边是一个向量,右边也是一个向量。

看符号: 它们中间有一个非常明确的黑点 \cdot。这是点乘的专属符号。

物理意义: 这就是我们在前面讨论的“测量阶段”。它在计算 v3v_3 落在 u2u_2 方向上的“影子长度”。

运算结果: 两个向量进行点乘,结果会坍缩成一个纯数字(标量)。在这里,算出来的结果就是 12\frac{1}{2}(或者写成 12×12\frac{1}{\sqrt{2}} \times \frac{-1}{\sqrt{2}} \dots 提取出来的结果)。

  1. 右边的红框:这是“数乘”(标量乘法 / Scalar Multiplication)
12(1+0+0)(110)\frac{1}{2}(1 + 0 + 0) \begin{pmatrix} -1 \\ 1 \\ 0 \end{pmatrix}

看参与者: 它的左边 12(1+0+0)\frac{1}{2}(1+0+0) 就是一坨纯纯的数字(等于 12\frac{1}{2});而它的右边是一个向量。

看符号: 数字和向量直接挨在一起写,中间没有那个黑点 \cdot

物理意义: 这就是我们在前面讨论的“定向阶段”。它拿着刚才算出来的影子长度(数字 12\frac{1}{2}),去乘以代表方向的基底(向量 u2u_2)。

运算结果: 把数字分配到向量的每一个坐标里去,相当于把这根向量拉长或缩短。结果是一个新的向量。

回到我们的终极公式 Proj=(vu)u\text{Proj} = (v \cdot u) u

第一步: 括号里的 (vu)(v \cdot u) 是点乘。向量 \cdot 向量 \rightarrow 变成数字(算出长度)。

第二步: 括号外的 (数字)u(\text{数字}) u 是数乘。数字 ×\times 向量 \rightarrow 变成新向量(赋予方向)。

从“点乘算出长度”,到“数乘赋予方向”。就是算数字;数字直接贴着括号的,就是拉伸向量!


🔴 第四阶段:大结局合体 (构建 PPΛ\Lambda)#

现在我们拥有了极其完美的标准正交基:u1,u2,u3u_1, u_2, u_3

1. 构建正交矩阵 PP (按列排布):

P=(u1u2u3)=(13121613121613026)P = (u_1 \quad u_2 \quad u_3) = \begin{pmatrix} \frac{1}{\sqrt{3}} & -\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{6}} \\ \frac{1}{\sqrt{3}} & \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{6}} \\ \frac{1}{\sqrt{3}} & 0 & \frac{2}{\sqrt{6}} \end{pmatrix}

2. 构建对角矩阵 Λ\Lambda (主对角线填入对应的特征值):

Λ=(000030003)\Lambda = \begin{pmatrix} 0 & 0 & 0 \\ 0 & 3 & 0 \\ 0 & 0 & 3 \end{pmatrix}

终极宣告: 至此,原矩阵 AA 被完美正交对角化,满足:

A=PΛP1=PΛPTA = P \Lambda P^{-1} = P \Lambda P^T

(完整计算过程结束)

Summary#

死记硬背 Gram-Schmidt 的那一大串带 Σ\Sigma(求和号)、点积、分数的公式,绝对是反人类的。在考场上一紧张,极容易把下标写错。

要想把 Gram-Schmidt 真正刻进骨子里,你必须忘掉公式,只记动作

整个过程其实就是一个极其残酷的**“按资排辈与清洗”**系统。教你一套在考场上绝对不会忘的记忆心法:


💡 核心心法:一句话口诀#

“确立新核心,挨个交保护费(剔除投影),最后自我洗礼(正规化)。”

无论给你多少个向量(v1,v2,v3vnv_1, v_2, v_3 \dots v_n),它们排着队进来改造,每个向量进门后都只能做三件事:

  1. 看前辈: 看看前面已经有几个被改造好的、纯洁的“大哥”了(即已经算出来的 u1,u2u_1, u_2 \dots)。
  2. 交保护费(去阴影): 前面有几个大哥,你就要向几个大哥交保护费。保护费是什么?就是你身上顺着大哥方向的“投影成分”。把它减掉!
  3. 自我洗礼: 保护费交干榨净后,剩下的一点残骸,强行拉伸或压缩到长度为 1(正规化),你就能晋升为新的大哥。

🔧 唯一需要背的积木:投影公式#

只需要死记这一小块积木:

如何计算 vv 在单位向量 uu 上的投影?

Proj=(vu)u\text{Proj} = (v \cdot u) u
  • 物理意义记忆:
    • 括号里的 (vu)(v \cdot u) 是一个数字,代表“长度”(影子有多长)。
    • 外面的 uu 是一个向量,代表“方向”(顺着老大的方向)。
    • 两者相乘:长度 ×\times 方向 = 阴影向量。

🔄 考场上的默写流水线#

只要记住“积木”和“挨个交保护费”的规矩,你在考场上可以瞬间现推任何维度的公式,根本不需要背:

  • 第一个进门的 v1v_1 前面没有大哥,不用交保护费。直接自我洗礼。

    u1=v1v1u_1 = \frac{v_1}{\|v_1\|}
  • 第二个进门的 v2v_2 前面有 1 个大哥(u1u_1),交 1 次保护费。

    残骸: v2=v2(v2u1)u1v_2' = v_2 - \mathbf{(v_2 \cdot u_1)u_1}

    洗礼: u2=v2v2u_2 = \frac{v_2'}{\|v_2'\|}

  • 第三个进门的 v3v_3 前面有 2 个大哥(u1,u2u_1, u_2),必须交 2 次保护费!

    残骸: v3=v3(v3u1)u1(v3u2)u2v_3' = v_3 - \mathbf{(v_3 \cdot u_1)u_1} - \mathbf{(v_3 \cdot u_2)u_2}

    洗礼: u3=v3v3u_3 = \frac{v_3'}{\|v_3'\|}

  • kk 个进门的 vkv_k 疯狂减去前面所有 k1k-1 个大哥的投影。

    残骸: vk=vk(vku1)u1(vku2)u2(vkuk1)uk1v_k' = v_k - (v_k \cdot u_1)u_1 - (v_k \cdot u_2)u_2 - \dots - (v_k \cdot u_{k-1})u_{k-1}

    洗礼: uk=vkvku_k = \frac{v_k'}{\|v_k'\|}

最后的防坑警告: 很多教材喜欢把公式写成 v3=v3v3v1v1v1v1v3v2v2v2v2v_3' = v_3 - \frac{v_3 \cdot v_1}{v_1 \cdot v_1}v_1 - \frac{v_3 \cdot v_2'}{v_2' \cdot v_2'}v_2'千万不要去背这种带分母的恶心形态! 这是因为他们没有“边做边正规化”。 在考场上,一定要算出一个 uu,就立刻把它正规化(化为单位向量)! 只要所有的 uu 长度都是 1,分母就永远是 1,公式就能保持极其清爽的 v(vu)uv - (v \cdot u)u 形态。这也是最不容易算错符号的方法。

NOTE

1. 固有値の算出(固有方程式)#

まずは行列 AA に対して固有方程式 PA(λ)=λIA=0P_A(\lambda) = |\lambda I - A| = 0 を解きます。

  • 行列式の工夫: いきなり展開せず、各行・各列の和が一定なら「第1列に全て足し合わせる」等の操作で (λk)(\lambda - k) を括り出します。
  • 検算(トレースと行列式):
    • 固有値の和 = tr(A)\text{tr}(A) (対角成分の和)
    • 固有値の積 = det(A)\det(A) これを確認するだけで、計算ミスの 80% は防げます。

2. 固有ベクトルの算出と基底の決定#

各固有値 λi\lambda_i に対して、(λiIA)x=0(\lambda_i I - A)\boldsymbol{x} = \boldsymbol{0} を解きます。

  • 自由度の確認: 重解がない場合は変数は1つ、2重解の場合は(対角化可能なら)基底が2つ出るはずです。
  • 記述のポイント:(λiIA)x=0(\lambda_i I - A)\boldsymbol{x} = \boldsymbol{0} を解くと、\dots より x=c(111)T\boldsymbol{x} = c \begin{pmatrix} 1 & 1 & 1 \end{pmatrix}^T (c0c \neq 0)。よって固有空間 W(λi)W(\lambda_i) の基底は \dots」と丁寧に記述します。

3. 直交行列による対角化(実対称行列の場合)#

入試で最も頻出するのは「実対称行列」です。この場合、単なる変換行列 PP ではなく、直交行列 PP を求めよと指示されます。

  • 正規化: 各固有ベクトルの長さを 11 にします(u=xx\boldsymbol{u} = \frac{\boldsymbol{x}}{|\boldsymbol{x}|})。
  • 重解がある場合の直交化:
    • 同じ固有値から出た基底同士は、そのままでは直交しないことがあります。
    • この場合、必ず グラム・シュミットの直交化法 を適用してください。
    • 注意: 異なる固有値に属するベクトル同士は、理論上必ず直交しているため、正規化だけで済みます。

4. 変換行列 PP と対角行列 DD の構成#

最後に結果をまとめます。

  • 並び順の一致: P=(u1 u2 u3)P = (\boldsymbol{u}_1 \ \boldsymbol{u}_2 \ \boldsymbol{u}_3) と並べたなら、対角行列 DD も対応する固有値の順に diag(λ1,λ2,λ3)\text{diag}(\lambda_1, \lambda_2, \lambda_3) と並べる必要があります。
  • 最終チェック: 余裕があれば、ごく一部の成分だけで良いので AP=PDAP = PD が成立するか確認します。

【記述のコツ】採点官へのアピール#

院試の記述回答では、以下のフレーズを適切に挟むと「わかっている感」が出ます。

  1. 「実対称行列は直交行列によって対角化可能であるから…」 (定理の適用条件を明示)
  2. 「相異なる固有値に属する固有ベクトルは互いに直交するから、同一の固有空間内でのみ直交化を行えばよい」 (計算の手間を省く理論的根拠)
  3. PTP=IP^T P = I を満たす直交行列 PP を構成すると…」 (直交行列の定義の再認)

おすすめの練習順序#

  1. 3次正方行列(重解なし): 基本的な計算フローの確立。
  2. 3次実対称行列(重解あり): グラム・シュミットの習得。
  3. 変数が含まれる行列: 固有値が aabb になるケース(文字式の扱いに慣れる)。
How to Memorize Gram-Schmidt Orthogonalization: Starting from CBMS Exam Problems
https://blog.yirong.site/posts/0056/
Author
Kuchina
Published at
2026-05-01
License
CC BY-NC-SA 4.0
ページ閲覧数: 読み込み中…
サイト閲覧数: 読み込み中…