Stage 2 — 线性方程组、消元法与逆矩阵 (Solving Linear Systems, Elimination & Inverses)

这个 Stage 你将学到什么

Stage 1 给了你语言(向量、矩阵、);Stage 2 教你怎么动手解 ,并补齐三件核心工具:

  • 矩阵乘法 (matrix multiplication)——Stage 1 只讲了矩阵 × 向量,这里讲矩阵 × 矩阵,以及它的四种视角;
  • 高斯消元法 (Gaussian elimination)——把方程组系统地化简,看清解是唯一、无解、还是无穷多;
  • 逆矩阵 (inverse matrix)——用 Gauss–Jordan 求逆,并搞懂”何时可逆”;
  • LU 分解 (LU decomposition)——把消元过程”打包”成 ,这是 Strang 极重视的工具。

对应 21-241 官方 topic:solving linear systems by row reduction, inverse matrices。
对应 Strang《Introduction to Linear Algebra》:Ch 2(Solving Linear Equations)整章。

怎么用这份笔记

这一阶段是计算密集的,以你 USACO 的底子会比较顺。但 Stage 1 的批改暴露了你的两个问题:(1) 爱跳”解释/说明”子问;(2) 复数手算偏脆。Stage 2 没有复数,但有大量”为什么”——我把每个”为什么消元有效、为什么 装的是乘数”都写清楚了,请逐字读这些解释,别只看算法步骤。

  • ★ = 必须吃透的核心;➕ = 拓展;> [!example] = 逐步手算演示;> [!question] 自测题答案可折叠。
  • 本笔记的一条主线:消元、LU、求逆,本质上是同一件事——我用同一个矩阵 把它们串起来,你会看到三者其实共用同一套乘数。

0. 全局地图:Stage 2 在解一个什么问题

线性代数最核心的方程是 。它有三种等价读法(Stage 1 已埋下):

Stage 2 要回答三个递进的问题:

  1. 怎么解? → 高斯消元法(第 2 节)。
  2. 解能不能”打包预处理”? → LU 分解(第 4 节),一次分解、反复解不同的
  3. 有没有”除法”? → 逆矩阵 (第 5 节),让 成为可能。

但所有这些都要先有矩阵乘法这块积木,所以我们从它开始。


1. 矩阵乘法 (Matrix Multiplication) ★

1.1 定义:为什么是”行乘列”

Stage 1 里 的第 个分量 = 行与 的点积。矩阵乘法只是把这件事 的每一列各做一次

,,则乘积 ,其元素为:

维度匹配铁律

有定义 的列数 = 的行数。记法:。中间两个 必须相等,外面两个 决定结果形状。这是初学者最常犯的维度错误来源。

1.2 ★ 完整算一遍(这就是”怎么算”)

例:

结果是 逐个元素算(行 点列 ):

所以

操作口诀:左手沿 的行走,右手沿 的列走,对应相乘再求和,落在交叉位置。

1.3 ★★ 四种看矩阵乘法的视角(Strang 招牌)

同一个 ,有四种解读。全部理解,后面会反复用到(尤其列视角)。

视角 1 — 元素视角:每个 是一个点积(上面就是)。

视角 2 — 列视角(最有用): 乘以 的第 列。也就是说, 的每一列都是 各列的线性组合,权重来自 对应那一列。

视角 3 — 行视角: ( 的第 行)乘以整个 。每一行是 各行的线性组合

视角 4 — 外积视角 ➕:把 的列和 的行配对相乘再求和:

每一项 是一个”列 × 行”= 一个秩 1 矩阵(rank-1 matrix)。这个视角到 SVD(Stage 7)会大放异彩。

为什么要记四个视角

不同问题用不同视角最省力:算具体数字用视角 1;理解 的列空间用视角 2;消元(把矩阵写成 ) 用视角 3;理解低秩结构 / SVD 用视角 4。Strang 的功力就在于他从不把矩阵乘法只当”填表格”,而是四个角度自由切换。

1.4 ★ 关键性质(有些反直觉)

性质成立吗说明
结合律 可以任意加括号
左右分配律
与单位矩阵 是乘法的”1”
交换律 一般不成立!

矩阵乘法不可交换——这是最重要的"反直觉"

看反例:

几何直觉:矩阵代表”动作”(旋转、剪切……),而”先转后剪”和”先剪后转”结果不同——动作的顺序有意义。这件事会影响后面所有公式里因子的顺序

1.5 转置与乘积:顺序要反转(含证明)

证明

比较两边的 元素。左边:
右边:
两者逐项相等。

记忆:“穿袜子再穿鞋,脱的时候先脱鞋”——转置(或求逆)会把乘积顺序倒过来


2. 高斯消元法 (Gaussian Elimination) ★ 核心

这是解 的主算法。核心思想:用”不改变解集”的行变换,把方程组化成阶梯形,再回代。

2.1 三种初等行变换 (Elementary Row Operations)

下面三种操作不改变方程组的解(因为它们都可逆):

  1. 倍加 (replacement):某行 另一行的倍数 → 。(消元的主力)
  2. 数乘 (scaling):某行乘以非零常数 → ()。
  3. 交换 (interchange):交换两行 → 。(主元为 0 时用)

我们把 并排写成增广矩阵 (augmented matrix) ,对它做行变换。

2.2 ★ 完整走一遍 消元(贯穿全笔记的主例)

主例:解

增广矩阵:

第一列消元(用第 1 行的主元 把它下方变 ):

  • (乘数 ):
  • (乘数 ):

第二列消元(用第 2 行的主元 把它下方变 ):

  • (乘数 ):

回代 (back substitution)——从最后一行往上解:

验证: ✓; ✓; ✓。

记住那三个乘数 ——它们马上会在 LU 分解里”复活”成矩阵

2.3 主元、行阶梯形 (REF) 与简化行阶梯形 (RREF)

  • 主元 (pivot):每行化简后最左边的第一个非零元。上面的主元是
  • 行阶梯形 (Row Echelon Form, REF):主元呈阶梯下降,主元下方全为 (上面那个上三角就是)。
  • 简化行阶梯形 (Reduced Row Echelon Form, RREF):在 REF 基础上,再把每个主元化为 、且主元上方也清成 。RREF 是唯一的(REF 不唯一)。

为什么要 RREF

REF + 回代就能解方程;但 RREF 让解”一眼可读”(主元变量直接等于右端),而且求逆矩阵正是靠把 化到 RREF(第 5 节)。

2.4 ★ 解的三种情况:唯一 / 无解 / 无穷多

消元到最后,看阶梯形的形状,就能判定解的个数。

情况 A:唯一解——每一列都有主元(像主例),回代得到唯一

情况 B:无解 (inconsistent)——出现矛盾行 ,即 ""。

无解的样子

第二行说 ,矛盾。几何:两条平行线,永不相交,无解。

情况 C:无穷多解——出现全零行 ,且有自由变量 (free variable):那些没有主元的列对应的变量可以随便取。

无穷多解(含一个自由变量)

增广矩阵消元:,:

第 3 列没有主元 是自由变量。化成 RREF():

通解(令 ):

验证 :,代入三式得 ✓。几何:三个平面交于一条直线,直线上每个点都是解。

一句话判据

消元后:有矛盾行 → 无解;无矛盾行且每列都有主元唯一解;无矛盾行但有自由列无穷多解。自由变量的个数 = 没有主元的列数。


3. 消元 = 矩阵乘法 (Elimination as Matrix Multiplication) ★

这一节把消元”代数化”——每一步行变换,其实是左乘一个矩阵。这是通向 LU 分解的桥梁。

3.1 初等矩阵 (Elementary Matrix)

单位矩阵 做一次行变换,得到的就是初等矩阵 。神奇之处: 左乘 ,等于对 做同样那次行变换(回忆视角 3:左乘影响行)。

主例里第一步的初等矩阵

"" 对应

验证 的第 2 行:——正是消元后的第 2 行 ✓。

3.2 整个消元 = 连续左乘

主例的三步消元(乘数 )合起来:

其中

这正是 LU 的来源

们移到右边:。下一节会看到,这个 的元素恰好就是那三个乘数——消元的”账本”被完整地记在了 里。

3.3 置换矩阵 (Permutation Matrix)

如果某个主元位置是 ,消元卡住,就交换两行。“交换”也是左乘一个矩阵——把 对应两行交换得到的置换矩阵

主元为 0 → 换行

左乘 交换了两行,主元就位了。置换矩阵的性质:(它的逆就是转置,因为换回去就是再换一次)。


4. LU 分解 (LU Decomposition) ➕(Strang 重点)

4.1 想法:把 拆成”下三角 × 上三角”

  • = 消元得到的上三角(upper triangular);
  • = 下三角(lower triangular),对角线全为 ,下三角部分装的就是消元乘数

4.2 ★ 为什么 装的是乘数(关键洞察)

回到 。神奇的事实: 的逆极其简单—— 放了 来消元,那它的逆就是在 (把消元”撤销”)。而且这些逆相乘时,乘数直接归位、互不干扰。结果:

就是消元乘数的”账本”: = 当初""里那个乘数。不用再算,抄下来即可。

验证主例

用列视角逐行验证 :

拼起来正好是 ✓。

4.3 ★ 用 LU 解方程:为什么值得分解

要解 ,即 分两步(都很快,因为三角矩阵直接代):

  1. 前代 (forward substitution),求中间量 ;
  2. 回代 (back substitution),求

用 LU 解主例

第一步 :

第二步 :

✓,和直接消元结果一致。

LU 的真正价值:一次分解,反复使用

如果要对同一个 、很多不同的 解方程(工程中极常见:同一结构、不同载荷),分解 只需做一次();之后每个新 只要两步三角代入()。这比每次都重新消元划算得多——这也是为什么数值库内部普遍用 LU。

4.4 需要换行时:

若消元中途必须换行,分解形式变成 ( 是置换矩阵,记录所有换行)。思想不变:先用 把行排好,再正常 LU。


5. 逆矩阵 (Inverse Matrix) ★

5.1 定义:矩阵的”倒数”

方阵 满足

有了它, 的解可以”一步写出”:。(注意:实际计算时几乎不会真去求 再乘,消元/LU 更快更稳; 主要是理论工具。)

5.2 何时可逆(可逆 ⟺ 一串等价条件)

方阵 ,下面这些互相等价(任一成立则全部成立):

  • 可逆;
  • 消元能得到 个非零主元(没有零主元);
  • 只有零解 ;
  • 每个 唯一解;
  • (行列式,Stage 5 细讲);
  • 的列线性无关(Stage 3 细讲)。

这就是"可逆矩阵定理"(Invertible Matrix Theorem)的雏形

这串等价条件是线代的”中央车站”,几乎所有概念都在这里交汇。现在记住前三条;到 Stage 3、5 会把后几条补全并证明它们等价。

5.3 的逆公式(必背)

口诀:主对角线对调、副对角线变号,再除以行列式

求逆

,

验证: ✓。

5.4 ★ Gauss–Jordan 求逆:

方法:把 和单位矩阵 并排成 ,对它做行变换,直到左边变成 ;此时右边自动变成

为什么这招有效(一句话原理)

行变换 = 左乘一串初等矩阵,记它们的总积为 。当左边 时,说明 ;而右边同时被 作用,。所以右边长出来的就是逆。

5.5 ★ 完整求一个 的逆(用主例的 )

,其中

起始 :

向下消元(用与主例相同的乘数 ):

左边已是上三角且主元全为 。现在向上消元(清主元上方),得到 RREF:

左边变成 ,右边就是逆:

验证 ,逐个算第一行:
;; ✓(其余行同理,全部得 )。

注意到了吗:同一套乘数

求逆的”向下消元”用的乘数 ,和主例消元、和 LU 里 的元素完全相同。这就是本笔记的主线:消元、LU、求逆三件事,共用同一套消元账本。理解了一个,就理解了三个。

5.6 ★ 乘积的逆:顺序反转(含证明)

证明

只需验证它乘 。用结合律:

同理 。所以 确是 的逆。

又是”先脱鞋”原则:逆把乘积顺序倒过来。直觉: 是”先 “两个动作,要撤销就得”先撤 再撤 “。

5.7 转置的逆

(转置和求逆可以交换次序。)


6. 拓展 (Extensions) ➕

6.1 可逆矩阵定理全景(预览)

把 5.2 的等价条件再扩一点,对 ,以下全部等价:
可逆 个非零主元 RREF 是 只有零解 列线性无关 列张成 不是特征值。后几条会在 Stage 3/5/6 逐一补证——把它当作贯穿全课的”主索引”。

6.2 ➕ 消元的计算复杂度(呼应你的算法背景)

矩阵,高斯消元约需 次乘加,即 。所以:

  • 求逆 、解一次方程 ;但有了 LU,额外每个 只需
  • 这解释了”为什么解 不该先求 再乘”——求逆本身就是 且数值更不稳,直接 LU 又快又稳。这是数值线代里”能不求逆就不求逆”的工程原则

6.3 ➕ 可选:用 NumPy 验证 LU 与逆

import numpy as np
import scipy.linalg as sla
 
A = np.array([[1,2,1],[2,5,3],[3,4,2]], dtype=float)
 
# LU 分解(scipy 带部分主元置换 P)
P, L, U = sla.lu(A)
print("L=\n", L); print("U=\n", U)
print("PA == LU ?", np.allclose(P @ A, L @ U))   # 注意 scipy 给的是 A = P@L@U
 
# 逆与解方程对比
b = np.array([2,4,5], dtype=float)
print("A^{-1} =\n", np.linalg.inv(A))
print("solve  :", np.linalg.solve(A, b))          # 推荐:不显式求逆
print("via inv:", np.linalg.inv(A) @ b)           # 能得同样结果,但更慢更不稳

库安装(使用国内镜像)

需要 numpyscipy。用清华镜像安装(命令行执行):

pip install numpy scipy -i https://pypi.tuna.tsinghua.edu.cn/simple

7. 例题精讲 (Worked Examples)

例 1 — 矩阵乘法(注意维度)

(),()。:

(反过来 ,形状都不同——又一次提醒:乘法不可交换。)

例 2 — 判定解的类型并求解

消元::

第 3 列无主元 → 自由,无穷多解。回代:;。通解 。验证 : ✓。

例 3 — 用 LU 解(乘数账本)

。消元 (乘数 )得 ,故 。解 :
前代 :。回代 :;。解 。验证:, ✓。

例 4 — 证明:逆是唯一的

命题:若 有逆,则逆唯一。
证明:设 都是 的逆,即 。则

所以 ,逆唯一。

技巧:这类”唯一性”证明的套路是”从两个候选出发,用结合律把它们夹成相等”——和 Stage 1 自测题里”取特殊值”是同类的标准招式。


8. 衔接 21-241:考试怎么考 + 自测

8.1 这部分在 21-241 的考点

  • 计算题(务必快准):消元解方程、求 / 的逆、矩阵乘法、LU 分解。这些是 HW 主力,考试里属于”必须拿满”的部分。
  • 概念/证明题(拉分):可能要你证明 、逆的唯一性,或论证”某矩阵何时可逆 / 为何 只有零解”。
  • 判类型题:给一个含参数的系统,问”参数取何值时无解 / 唯一 / 无穷多解”——这要你把消元做到底,盯住主元和矛盾行。

针对你的两个老问题(来自 Stage 1 批改)

(1) 别再跳”解释”子问。 这里很多题会问”为什么可逆 / 为什么无穷多解”——把理由写全(指出主元、自由变量、或那串等价条件),不要只丢一个矩阵或一个数。
(2) 顺序别写反。 转置和求逆都会反转乘积顺序(,不是 )。这是本阶段最常见的丢分点,务必盯紧。

8.2 自测题(先做,再展开答案)

自测 1(矩阵乘法)

,。算 ,它们相等吗?

自测 2(消元解方程)

自测 3(求逆 + 解方程)

(a) 求 的逆。(b) 用它解

自测 4(含参数,判类型)

对哪些实数 ,系统 分别有唯一解 / 无穷多解 / 无解?

自测 5(证明,顺序反转)

均可逆。证明


9. 一页速记 + 进入 Stage 3 的检查清单

Stage 2 速记卡

  • 矩阵乘法 ;维度 ;四视角(元素/列/行/外积);不可交换
  • 三种行变换(倍加/数乘/交换)不改变解;对增广矩阵 操作。
  • 高斯消元 → 上三角(REF)→ 回代;RREF 唯一,主元化 且上下清零。
  • 解三类:矛盾行 → 无解;每列有主元 → 唯一;有自由列 → 无穷多(自由变量数 = 无主元列数)。
  • 消元 = 左乘初等矩阵 ;换行 = 左乘置换 ()。
  • LU 分解 : 是上三角, 装消元乘数;解方程 = 前代 + 回代 ;一次分解、反复用。
  • 逆矩阵 ; 公式”对调变号除以 “;Gauss–Jordan
  • 顺序反转:,
  • 可逆 ⟺ 个非零主元 ⟺ 只有零解 ⟺ ⟺ 列线性无关(后两条 Stage 3/5 补)。

进入 Stage 3 前,确认你能:

  • 不查笔记算一个 矩阵乘法,并能从列视角解释结果;
  • 对一个 系统独立完成消元 + 回代,并判断它是唯一/无解/无穷多;
  • 把一个 做 LU 分解,并指出 里每个数来自哪一步消元;
  • 用 Gauss–Jordan 求一个 的逆并验证 ;
  • 默写并证明 ,且解释为什么顺序要反转;
  • 说清” 可逆”的至少三个等价条件。

全部打勾 → 你已经为 Stage 3(向量空间与四个基本子空间) 准备好了。


一句话收尾

Stage 2 看似在教三套独立技术(乘法、消元、求逆),其实它们由同一套消元乘数串成一条线:消元产生 ,乘数装进 ,Gauss–Jordan 把同样的过程推到底得到 而所有这些的尽头是同一个问题: 何时可解、解是什么。 这个问题的彻底答案——用”四个子空间”来回答——就是 Stage 3 的主题。