对应教材 2.1.1–2.1.2、定理 2.1–2.2、例 1;对应老师第 3 讲 §一、§四、§五。
本节把“会算”推进到“知道什么时候不能算”:顺序消去的充要条件、列主元为什么必要、计算量怎么估。
老师在第 3 讲先用矩阵范数给出一个“不算行列式”的可逆性判据:
- ∥A∥1=maxj∑i∣aij∣(最大列和),∥A∥∞=maxi∑j∣aij∣(最大行和);
- 若存在某个矩阵范数使 ∥A∥<1,则 I±A 可逆,且
∥(I−A)−1∥≤1−∥A∥1.
证明是反证:若 (I−A)x=0 有 x=0,则 ∥x∥=∥Ax∥≤∥A∥∥x∥<∥x∥,矛盾。这条判据是第 2.4 节迭代法收敛性的钥匙;本节先记住“找一个范数即可,不必碰行列式”。
对方程组 Ax=b,令增广矩阵 [A,b]。第 k 步用第 k 行消去下面各行的第 k 列:
mik=akk(k)aik(k),aij(k+1)=aij(k)−mikakj(k),bi(k+1)=bi(k)−mikbk(k)
(i=k+1,…,n,j=k+1,…,n)。消元完成后回代:
xi=aii(i)bi(i)−∑j=i+1naij(i)xj,i=n,n−1,…,1.
计算量:消元约 3n3 次乘除法,回代约 2n2 次;主导项是 O(n3)。这就是为什么大规模问题要利用结构(见 2.2.3–2.2.4)或改用迭代法(见 2.4)。
定理 2.1(顺序消去的充要条件):顺序 Gauss 消去的前 n−1 个主元素 akk(k) (k=1,…,n−1) 均不为零,当且仅当 A 的前 n−1 个顺序主子式
Dk=a11⋮ak1⋯⋯a1k⋮akk=0,k=1,…,n−1.
证明要点:消元不改变顺序主子式(行变换 Ri←Ri−mikRk 把第 k 行倍数减到第 i 行,主子式不变)。消到第 k 步时,Dk=a11(1)a22(2)⋯akk(k);故 Dk=0⟺ 前 k 个主元全不为零。取 k=n−1 即得。■
例 1(教材 2.1,四位十进制):教材用
⎩⎨⎧0.012x1+0.010x2+0.167x3=0.6781,1.000x1+0.8334x2+5.910x3=12.10,3200x1+1200x2+4.200x3=981.0
说明:顺序消去时第一个主元 0.012 很小,乘数 m21≈83.3、m31≈2.7×105,舍入误差被剧烈放大,四位十进制下结果不可信;改用列主元后,先把绝对值最大的 3200 换到主元位,乘数被控制住,结果可靠。这个例子不是“算错”,而是算法不稳定。
第 k 步先在当前第 k 列的第 k,…,n 行中选绝对值最大者:
ik=argk≤i≤nmax∣aik(k)∣,
交换第 k 行与第 ik 行(增广列一起换),再做消元。这样所有乘数满足 ∣mik∣≤1,避免“小主元当分母”。
定理 2.2:若 A 非奇异,则列主元 Gauss 消去的各个列主元素 akk(k) (k=1,…,n−1) 均不为零。
证明要点:反设某个 r 处列主元为零,则当前第 r 列从第 r 行往下全为零;由行列式按列展开(或行交换不改变非奇异性)推出 detA=0,与 A 非奇异矛盾。■
算法(列主元):
- 对 k=1,…,n−1:选 ik,交换行;对 i=k+1,…,n 算 mik 并更新第 i 行。
- 回代。
计算量与顺序消去同阶(O(n3)),但数值稳定性好得多;代价是每步一次列扫描和行交换。列主元不是可选项,是默认动作——尤其当主元可能很小时。
例 2.1.1(顺序 vs 列主元):取
A=(10−3111),b=(12).
精确解约为 (0.9990,1.0010)T。
- 顺序消去:m21=103,第二步主元 1−103≈−999,在三位有效数字下右端变成 2−103,回代得到严重失真的解;
- 列主元:先交换两行,主元为 1,乘数 10−3,三步得到 (1.00,1.00)T。
实验建议:用 NumPy 的 float32 复现:顺序消去与 np.linalg.solve(内部列主元)对比,观察误差量级;再换 float64 看误差是否被压住。结论不是“float64 更好”,而是算法不稳定性不会因为多几位精度就消失。
2.1 · 三位十进制的顺序消去与列主元(教材习题 1)
在三位十进制下,分别用顺序 Gauss 消去和列主元求解教材第 2 章习题 1 的方程组,比较结果。
参考答案
顺序消去在第一个主元 0.5 处乘数不大,但第二步会出现小主元,三位十进制下解的误差明显;列主元把绝对值较大的元素换到主元位,结果接近精确解 (−2.6,1,2)T。关键不是“算得快”,而是“乘数被控制住”。具体数值按教材数据逐行算,保留三位有效数字。
2.2 · 消元矩阵 R(教材习题 2)
顺序消去中,k=1 的消元过程相当于用 R 左乘 [A,b]。写出 R。
参考答案
R=1−m21⋮−mn1010⋯⋱⋯001,mi1=a11ai1.
它是单位下三角矩阵,正是 LU 分解中 L 的第一步。
2.3 · 行交换矩阵 Q_k(教材习题 3)
交换第 k 行与第 ik 行,相当于左乘什么矩阵?
参考答案
左乘置换矩阵 Qk:单位矩阵交换第 k、ik 两行(或两列)得到的矩阵。Qk−1=QkT=Qk。列主元算法就是“Qk 与消元矩阵 Pk 交替作用”。
覆盖核对
本节覆盖教材 2.1.1、2.1.2、定理 2.1–2.2、例 1、习题 1–3;老师第 3 讲 §一、§四、§五。下一节:2.2 直接三角分解。