形式陈述
考虑可逆系统 A x = b 。先在因子精度 u f 中计算带主元的近似分解,并用同一组因子得到初值 x ^ 0 。迭代精化在第 k 轮执行三步:
r k = b − A x ^ k , A d k = r k , x ^ k + 1 = x ^ k + d k . 第二步不重新分解 A ,而是复用已有的LU 因子 公理库 Gaussian 消元与 LU 分解 Gaussian elimination · LU factorization · PA equals LU 把 Gaussian 消元保存为可复用的带置换 LU 分解,再用三角求解处理一个或多个右端。 做两次三角求解。输入包括 A , b 、可复用因子、残差精度、更新精度、容差和最大轮数;输出应包含精化后的解、残差与后向误差历史、轮数和退出状态。
精确算术下,若 x ∗ 是真解,则
r k = A ( x ∗ − x ^ k ) , 所以精确解出校正方程会一次得到全部误差。实际因子只近似 A ,可把一次校正视为应用近似逆 B :
e k + 1 = x ∗ − x ^ k + 1 ≈ ( I − B A ) e k . 若在相关范数中 ‖ I − B A ‖ < 1 ,误差便收缩;矩阵条件性、主元增长和低精度因子误差共同决定这项条件。
残差必须在足以看见当前误差的精度 u r 中计算。若 A x ^ k 与 b 已在低精度中舍入成相同值,低精度残差会错误地变成零,校正过程随即停住。采用更高精度乘加或扩展累加器计算 b − A x ^ k ,再把残差转换到因子求解所需精度,能把低位信息重新送入校正方程。
一种常见的混合精度配置是在低精度 u f 中分解和求解校正,在工作精度 u 中保存并更新解,在更高精度 u r 中计算残差。忽略维数与增长因子常数时,基本精化的典型充分区间是
κ ( A ) u f < 1. 达到的平台还受 u 和 κ ( A ) u r 控制。这些是解释路线,不是脱离主元、缩放和误差模型的硬阈值;即使不等式成立,溢出或不稳定因子仍会失败,不成立时也可能在特定右端上偶然改善。
每轮可用尺度化 normwise 后向误差
η k = ‖ r k ‖ ∞ ‖ A ‖ ∞ ‖ x ^ k ‖ ∞ + ‖ b ‖ ∞ 作停止指标,并同时检查 ‖ d k ‖ 相对于 ‖ x ^ k ‖ 的大小。若 η k 达到容差且一次显式高精度残差复核一致,可正常结束;若残差连续数轮不降、校正量增长、因子求解失败、出现非有限值或达到最大轮数,应返回停滞或失败,而不是继续重复同一校正。
稠密问题只做一次约 O ( n 3 ) 的 LU 分解;每轮残差矩阵—向量乘与两次三角求解均为 O ( n 2 ) 。稀疏问题的每轮成本由 nnz ( A ) 、三角因子填充和访存决定。每轮重新分解会抹掉精化相对于重新求解的成本优势,也改变了本页分析的固定近似逆。
直觉
低精度直接解先给出一张大体正确的地图,高精度残差再指出当前解代回原方程后还差多少。已有 LU 因子把这份方程空间里的缺口翻译成解空间中的校正;只要翻译虽粗但方向可靠,连续几轮就能把误差压到工作精度允许的平台。
关键不是“再解一次同一问题”,而是分工:昂贵分解只做一次,残差用更细的尺子观察,校正仍用便宜因子完成。若观察尺和初始求解同样粗,算法可能看不见自己最需要修正的低位。
例子与边界
取五阶 Hilbert 矩阵
( H 5 ) i j = 1 i + j − 1 , 1 ≤ i , j ≤ 5 , 令真解 x ∗ = ( 1 , 1 , 1 , 1 , 1 ) T ,并以 binary64 计算 b = H 5 x ∗ 。先把 H 5 , b 转为 binary32,做一次带部分主元的 LU 分解并求初值;随后仍用这组 binary32 因子求校正,但在 binary64 中计算残差和更新。一次可复查运行得到:
精化轮数 k
| b − H 5 x ^ k | ∞ / | b | ∞
| x ^ k − x ∗ | ∞ / | x ∗ | ∞
0
5.13 × 10 − 8
8.14 × 10 − 3
1
2.21 × 10 − 11
2.00 × 10 − 6
2
1.28 × 10 − 14
4.75 × 10 − 10
3
9.72 × 10 − 17
1.80 × 10 − 11
4
9.72 × 10 − 17
2.40 × 10 − 11
κ 2 ( H 5 ) ≈ 4.77 × 10 5 ,所以初始相对残差只有约 5 × 10 − 8 时,前向误差仍达到 8 × 10 − 3 ;两者的差距来自问题敏感性。前三轮复用同一低精度因子便恢复了许多数字。第四轮残差已经停在 binary64 平台,前向误差反而略有回升,说明达到平台后应停止,不能把更多轮数当成更多精度。
这个历史与对角小残差反例承担不同任务:它跟踪同一个近似解怎样被实际校正,并同时显示残差与前向误差;数字会随具体 BLAS/LAPACK 实现略有末位差异,但精度分工和停滞判断可直接复现。
若 A 过于病态,使低精度因子不能提供收缩方向,校正可能缓慢、振荡或发散。此时盲目提高轮数无效;可以提高因子精度、改善缩放与主元策略,或把低精度因子作为预条件器改用更强的内层迭代,但那已超出基本精化的固定三角校正。
推论与应用
残差与误差估计 公理库 残差、误差估计与停止准则 Residual and error estimation · Stopping criterion 区分可计算残差与未知真误差,并说明把缺陷转成误差界和停止证书所需的条件。 解释为什么停止必须使用尺度化后向误差,线性系统条件数 公理库 线性方程组的条件数与扰动 Conditioning of linear systems · Matrix condition number 把一般问题条件性具体化为可逆线性系统的右端、系数矩阵与联合扰动界。 再把它转换成可能的前向误差。LAPACK 驱动还会结合倒条件估计和逐分量误差界;只返回一个小 residual 会遗漏用户最关心的解精度。
混合精度硬件让低精度分解具有更高吞吐,但数据转换、残差高精度累加和因子复用次数都要计入总成本。只有整体时间或能耗下降、且最终误差满足工作精度目标时,低精度主体才构成有效优化。
参考资料
Nicholas J. Higham, Accuracy and Stability of Numerical Algorithms , 2nd ed., SIAM, 2002, Ch. 12.
James Demmel et al., “Error Bounds from Extra-Precise Iterative Refinement,” ACM Transactions on Mathematical Software 32(2), 2006.
LAPACK Users’ Guide, Further Details: Error Bounds for Linear Equations .