JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

从消元到 LU:把分解看作记账

第一卷只解一次 Ax=b。把高斯消元重写成乘积 A=LU,你就能反复求解——再加上选主元,让它永不崩溃。

重放消元

在第一卷里,你对增广矩阵高斯消元来解一个方程组。一旦得到答案,所做的工作——行变换——就被丢掉了。分解把这份工作保存下来。每一步消元——把某一行的倍数从另一行减去——本身就是一次矩阵乘法,而所有这些步骤的乘积正好把 A 化为上三角形式。

你用来清掉每一列的乘数,恰好整齐地放进一个下三角矩阵 L(对角线为 1);清完后的结果就是上三角矩阵 U。这就是 LU 分解的全部内容:A = LU,其中 L 记录*你如何*消元,U 记录*剩下了什么*。

A = [ 2  1  1 ;     L = [ 1   0  0 ;    U = [ 2   1    1 ;
      4  3  3 ;           2   1  0 ;          0   1    1 ;
      8  7  9 ]           4   3  1 ]          0   0    2 ]

# row2 -= 2*row1, row3 -= 4*row1, then row3 -= 3*row2.
# the multipliers 2, 4, 3 are exactly the sub-diagonal of L.
# check: L @ U reproduces A, entry by entry.
一个 3x3 的 LU:消元乘数变成 L 的元素。

为何如此——分解一次,永久复用

一旦存好 A = LU,对任意新的 b 求解 Ax = b 几乎不花代价:用前代(自上而下)解 Ly = b,再用回代(自下而上)解 Ux = y。昂贵的 O(n^3) 消元只做一次;之后每个右端项仅需 O(n^2)。对一位用上千种方式给同一座桥加载的结构工程师来说,这就是几分钟与几毫秒之差。

  1. 分解一次:A = LU(O(n^3) 的代价)。
  2. 前代解 Ly = b 求 y——L 是下三角的,y_1 直接得到,再逐级向下传递。
  3. 回代解 Ux = y 求 x——U 是上三角的,x_n 直接得到,再逐级向上传递。

选主元:别除以(近乎)零

朴素 LU 在主元为零的瞬间就崩溃,而且远在此之前就开始退化:除以极小的主元会放大舍入误差。解决办法是部分选主元——在清每一列之前,把该列中绝对值最大的行换到上面。这些交换被记录在置换矩阵 P 中,给出你真正会用到的形式:PA = LU。选主元使 L 中每个乘数的绝对值都不超过 1,从而让分解在数值上保持诚实。

没有选主元规则,LU 甚至不是唯一的——在不同的行序下,许多 L、U 对都能复原给定的 A。把 L 的对角线固定为 1 并固定主元规则后,分解就变得唯一。唯一性是贯穿整条学习线的主题:一种分解只有在你确定了是什么让它成为*那个*分解之后,才真正有价值。