2. 线性方程组求解基础回顾
在进入数值病态诊断之前,有必要把线性方程组求解的“地基”重新夯实一遍。许多后续出现的病态现象、迭代不收敛、残差与误差背离等问题,根源往往不在算法本身,而在于对问题表示、解的存在唯一性条件以及直接法与迭代法适用边界的理解不够清晰。本节围绕四个核心问题展开:方程组如何用矩阵统一表示、解在什么条件下存在且唯一、直接法与迭代法的本质区别,以及残差与误差这两个极易混淆却决定诊断方向的概念。
一、矩阵表示:把方程组压缩成一个对象
一个含 n 个未知量、m 个方程的线性方程组,可以写成 Ax = b 的形式。其中 A 是 m×n 的系数矩阵,x 是 n 维未知向量,b 是 m 维右端向量。这种表示的价值不只是书写简洁,更在于它把“逐个方程”的视角切换为“矩阵与向量的作用”视角:求解就是寻找一个向量 x,使 A 对它的线性变换结果恰好等于 b。
以三元方程组为例:
2x₁ + x₂ - x₃ = 3
x₁ + 3x₂ + 2x₃ = 10
4x₁ - x₂ + 5x₃ = 7
其矩阵表示为 A = [[2,1,-1],[1,3,2],[4,-1,5]],b = [3,10,7]T。在数值计算中,我们通常还会构造增广矩阵 [A|b],因为高斯消元等直接法正是在增广矩阵上做行变换。需要强调的是,矩阵表示同时隐含了“行视角”(每个方程是一个约束)和“列视角”(b 是 A 各列向量的线性组合,组合系数就是 x)。列视角对理解解的存在性尤其关键。
二、解的存在唯一性:三个层次的条件
判断方程组是否有解、解是否唯一,可以按以下逻辑推进。首先看 b 是否落在 A 的列空间内:若 b 不能由 A 的列向量线性组合得到,则方程组无解(矛盾方程组)。其次,若 b 在列空间内,解的唯一性取决于 A 的零空间:零空间只含零向量时解唯一,否则有无穷多解。
对工程中最常见的方阵情形(m = n),上述条件可归结为 A 非奇异,即 det(A) ≠ 0,等价于 A 满秩、列向量线性无关。此时对任意 b 都存在唯一解 x = A-1b。但必须提醒:理论上非奇异 与 数值上可可靠求解 是两回事。一个矩阵可能 det(A) 极小但非零,此时它“有唯一解”,却可能因舍入误差被放大到面目全非——这正是后续病态诊断要处理的问题。因此存在唯一性是定性判断,条件数才是定量刻画。
三、直接法与迭代法:两条求解路线
直接法的思路是“有限步内得到(在精确算术下)精确解”。典型代表是高斯消元及其变体 LU 分解:把 A 分解为下三角 L 与上三角 U 的乘积,先解 Ly = b(前代),再解 Ux = y(回代)。对 n 阶稠密矩阵,计算量约为 O(n³)。直接法的优点是稳健、对良态问题结果可靠;缺点是存储与计算随规模增长快,且对病态矩阵同样会暴露精度问题。
迭代法的思路是“从一个初值出发,逐步逼近”。雅可比、高斯-赛德尔、共轭梯度等都属于此类。它不直接分解矩阵,而是利用矩阵的稀疏结构反复做矩阵-向量乘,单步代价低,适合大规模稀疏问题。但迭代法有收敛性门槛:例如雅可比法要求系数矩阵严格对角占优或谱半径条件满足,否则可能发散。选择哪条路线,取决于矩阵规模、稀疏性、是否良态以及对精度的要求,而不是简单地认为“迭代法更高级”。
四、残差与误差:诊断病态的两把尺子
设真解为 x*,数值方法得到的计算解为 x̂。定义误差 e = x* − x̂,衡量计算解离真解有多远;定义残差 r = b − Ax̂,衡量计算解代入方程后“差多少才平衡”。两者关系为 r = Ae,即残差是误差经矩阵 A 变换后的结果。
关键区别在于可获取性:r 可以直接算出来,因为 A、b、x̂ 都已知;而 e 依赖未知的真解 x*,实际中无法直接得到。于是人们常用残差来间接判断精度,但这一步在病态问题上会失效。举例说明:设 A = [[1,1],[1,1.0001]],b = [2,2.0001]T,真解为 x* = [1,1]T。若计算解为 x̂ = [2,0]T,则残差 r = b − Ax̂ = [0, 0.0001]T,其范数仅约 1×10⁻⁴,看起来“残差很小”;但误差 e = [−1,1]T,范数约 1.41,相对误差高达 141%。残差小到万分之一,误差却超过 100%,这就是病态矩阵的典型表现:A 接近奇异,把微小的残差放大成了巨大的误差。
五、把基础概念串成诊断思路
回顾以上内容,可以得到一条清晰的实践脉络:先用矩阵表示统一问题,再通过秩与行列式判断解的存在唯一性,据此选择直接法或迭代法;求解得到 x̂ 后,计算残差 r 作为第一道检查,同时估计矩阵条件数作为第二道检查。若残差小且条件数适中,可认为结果可信;若残差小但条件数极大,则必须警惕“残差小、误差大”的陷阱,这正是后续病态诊断章节要深入处理的核心矛盾。基础概念的价值,正在于它们为这条诊断链提供了每一个判断节点的依据。