Skip to content

算法Algorithm

迭代精化

Iterative refinement · Mixed-precision iterative refinement

复用已有矩阵因子求解残差校正方程,以精确误差递推区分因子质量、收缩速度和混合精度噪声平台。

形式陈述 ​

考虑可逆的线性系统 Ax=b,真解记为 x∗=A−1b。先在因子精度 uf 中计算带主元的近似分解,并用同一组因子求出初值 x^0。将行列置换还原到原坐标后,用固定可逆矩阵 M=A+Δ 表示这组因子的乘积。第 k 轮计算残差,复用已有LU 因子求校正,再更新解:

rk=b−Ax^k,Mdk=rk,x^k+1=x^k+dk.

这里 Mdk=rk 是对理想校正方程 Adk=rk 的近似求解。实现通过两次三角代入应用因子,不形成 M−1。输入包括 A,b、可复用因子、残差与更新精度、容差和最大轮数;输出应包含解、残差与后向误差历史、轮数和退出状态。

固定因子的精确递推 ​

统一取误差符号 ek=x∗−x^k,并选定同一向量范数及其诱导的矩阵范数。若残差、三角求解和更新均精确,则 rk=Aek,所以

ek+1=ek−M−1Aek=(I−M−1A)ek=M−1Δek.

记 T=I−M−1A=M−1Δ、q=‖T‖。若 q<1,由诱导范数的相容性逐轮得到

‖ek+1‖≤q‖ek‖,‖ek‖≤qk‖e0‖⟶0.

这说明足够好的固定因子可以反复消除误差,而精确因子 M=A 对应 T=0,一次校正即得到真解。q<1 是所选范数中的充分条件;q≥1 本身不能判定发散。对固定有限维矩阵 T,所有初始误差均收敛到零的准确判据是谱半径 ρ(T)<1,即 Tk→0。即使最坏方向不收敛,特定初始误差所在方向也可能收敛。

因子误差还可以给出一个明确但保守的充分条件。令 C=A−1Δ、a=‖C‖。当 a<1 时,M=A(I+C),Neumann 级数保证 I+C 可逆且 ‖(I+C)−1‖≤1/(1−a),于是

T=(I+C)−1C,q≤a1−a.

因此 a<1/2 足以保证收缩。若 ε=‖Δ‖/‖A‖,由线性系统条件数定义有 a≤κ(A)ε,故 κ(A)ε<1/2 也是充分条件。它同时涉及问题敏感性与实际因子误差;仅知道 κ(A) 不能确定 T。

残差、求解和更新扰动下的平台定理 ​

实际计算中,把三类误差定义为以下恒等式中的扰动:

r^k=b−Ax^k+ηk,d^k=M−1r^k+σk,x^k+1=x^k+d^k+ξk.

ηk 包含残差计算及精度转换误差,σk 是应用固定因子求校正时的误差,ξk 是更新与存储误差。依次代入,不使用近似等号,得到

ek+1=Tek−M−1ηk−σk−ξk.

假设每一轮都有非负常数 R0,R1,W0,W1 给出的统一界

‖ηk‖≤R0+R1‖ek‖,‖σk+ξk‖≤W0+W1‖ek‖.

定义

α=q+‖M−1‖R1+W1,β=‖M−1‖R0+W0.

若 α<1,则误差满足

‖ek‖≤αk‖e0‖+β(1−αk)1−α及lim supk→∞‖ek‖≤β1−α.

证明只需先对精确递推取范数,得到 Ek+1≤αEk+β,其中 Ek=‖ek‖。从 E0 出发反复代入,便有 Ek≤αkE0+β∑j=0k−1αj;求几何和并令 k→∞ 即得结论。这里的平台是统一上界,不表示每条轨道都会达到该数值。若已有常数界 ‖ηk‖≤R、‖σk‖≤D、‖ξk‖≤U,可取 R1=W1=0、R0=R、W0=D+U,平台上界就是 (‖M−1‖R+D+U)/(1−q)。

直觉

低精度直接解先给出大体正确的答案,高精度残差再指出它代回原方程后还差多少。已有 LU 因子把方程空间里的缺口翻译成解空间中的校正。T 衡量这次翻译未能消除多少旧误差;ηk,σk,ξk 则记录这一轮又引入多少新误差。前者决定能否持续收缩,后者决定收缩最终能到哪里。

精度分工因此有三种角色:用 uf 做昂贵分解与便宜校正,用工作精度 u 保存并更新解,用残差精度 ur 观察方程缺口。如果 Ax^k 与 b 已在低精度中舍入成相同值,算出的残差可能为零。更高精度乘加或扩展累加器让这些低位差异重新可见,但转换后的残差仍要经过质量足够好的因子才能成为有效校正。

迭代精化的混合精度校正回路
例子与边界

同一个系统,两组因子的相反轨迹 ​

取

A=(2112),b=(33),x∗=(11),x^0=0.

A 的特征值为 3,1,所以 κ2(A)=3;由 A−1=13(2−1−12) 也得 κ∞(A)=3。以下残差、三角求解和更新都使用精确有理数,专门比较固定因子的质量。

第一组因子满足

Lg=(101/31),Ug=(3108/3),LgUg=(3113)=A+I=Mg.

对任意残差 r=(r1,r2)T,先解 Lgy=r 得 y1=r1、y2=r2−r1/3,再解 Ugd=y 得

d2=38y2=3r2−r18,d1=r1−d23=3r1−r28.

因此 Tg=Mg−1=18(3−1−13),q∞=1/2。但初始误差沿 v=(1,1)T,且 Tgv=v/4,故本次轨迹恰为

ek=4−kv,x^k=(1−4−k)v,rk=3⋅4−kv.

范数界 2−k‖e0‖∞ 控制所有方向,具体轨迹 4−k 更快;沿 (1,−1)T 的误差才达到收缩因子 1/2。

第二组特意提供的劣质因子仍然完全可逆:

Lb=(101/21),Ub=(2/31/301/2),LbUb=(2/31/31/32/3)=A/3=Mb.

此时前代给出 y1=r1、y2=r2−r1/2,回代给出 d2=2y2=2r2−r1、d1=32(r1−d2/3)=2r1−r2。也就是 Mb−1=3A−1,所以 Tb=I−Mb−1A=−2I,每轮都过度校正:

ek=(−2)kv,x^k=(1−(−2)k)v,rk=3(−2)kv.

下面每个近似解栏列出两个相同坐标中的一个;残差由 rk=Aek 直接计算。

k 良好因子的 x^k 坐标 ‖rk‖∞ 劣质因子的 x^k 坐标 ‖rk‖∞
0 0 3 0 3
1 3/4 3/4 3 6
2 15/16 3/16 −3 12
3 63/64 3/64 9 24
4 255/256 3/256 −15 48

两次计算的 A,b、条件数和残差精度完全相同,差别在 T。第二组是人为指定的坏近似,不是对正确实现的稳定 LU 算法的实验指控。它明确证明:适中的条件数与精确残差仍不能挽救失效的校正因子。

持续更新偏差留下非零极限 ​

仍取良好因子、x^0=0,让残差和三角求解精确,但每次存储更新时加入固定偏差 ξk=−ϵv,其中 ϵ>0。误差始终沿 v,精确递推和解为

ek+1=14ek+ϵv,ek=[4−k+4ϵ3(1−4−k)]v⟶4ϵ3v.

这给出了增加轮数仍不能消除的误差。统一范数定理取 α=1/2、β=ϵ,保证极限上界 2ϵ;实际极限范数为 4ϵ/3,说明统一平台界可以严格大于轨迹平台。偏差模型用于隔离机制,并不声称浮点更新总会产生同方向的固定偏差。

Hilbert 系统的混合精度实验 ​

考虑五阶 Hilbert 矩阵:

(H5)ij=1i+j−1,1≤i,j≤5.

本次实验使用 NumPy 2.3.5 与 SciPy 1.17.0,可运行完整复算脚本查看库版本与每轮输出。先将矩阵元素存为 float64(binary64),令参考向量 x∗=(1,1,1,1,1)T,以 b = H5 @ x_ref 构造右端。调用 scipy.linalg.lu_factor(H5.astype(np.float32)) 做带部分主元的 binary32 LU 分解,再用 lu_solve 对转为 binary32 的右端求初值,并将初值转回 binary64。

每轮以 binary64 计算 r = b - H5 @ x,将残差转为 binary32 后复用同一组因子调用 lu_solve,最后将校正量转回 binary64 并更新解。下表中的残差范数也在 binary64 中计算。

这里的 x∗ 专指构造右端所用的参考向量;右端舍入后,它未必是所存系统的精确解,因此最后一列衡量的是参考向量误差。

精化轮数 k ‖b−H5x^k‖∞/‖b‖∞ ‖x^k−x∗‖∞/‖x∗‖∞
0 6.87×10−8 3.60×10−3
1 1.94×10−11 1.02×10−5
2 6.35×10−14 2.82×10−8
3 1.94×10−16 8.26×10−11
4 9.72×10−17 1.78×10−11

κ2(H5)≈4.77×105,因而小残差仍可伴随明显的参考向量误差。前三轮精化显著降低了两项指标,第四轮的参考向量误差仍有改善,而残差已接近 binary64 舍入尺度。具体末位受运算库与平台影响;继续迭代也不保证精度单调改善,因为残差与更新的舍入扰动,以及参考向量与所存系统精确解的差异,都会影响最终平台。这组实验展示了低精度因子与高精度残差、更新的分工,但平台高度仍需结合具体扰动界解释。

推论与应用

把抽象扰动界用于浮点程序时,必须为各项提供来源。在标准浮点误差模型中,若没有溢出、下溢,且 (n+1)ur<1,逐项计算残差在转换精度之前满足

‖ηk‖∞≤γn+1(r)(‖b‖∞+‖A‖∞‖x^k‖∞),γn+1(r)=(n+1)ur1−(n+1)ur.

由 ‖x^k‖∞≤‖x∗‖∞+‖ek‖∞,可取

R0=γn+1(r)(‖b‖∞+‖A‖∞‖x∗‖∞),R1=γn+1(r)‖A‖∞,

再单独加上精度转换的误差界。三角求解与更新也必须给出相应的 W0,W1,不能因残差精度较高就将它们设为零。实际程序若以每轮不同的有效矩阵 Mk 描述求解误差,推广同一证明需要统一控制 ‖I−Mk−1A‖ 与 ‖Mk−1‖;固定 M 的定理不能直接替代这些条件。

混合精度讨论中常见 κ(A)uf<1 的经验性收缩判断,以及由 u、κ(A)ur 控制平台的描述。这些简写隐去了维数、主元增长、缩放和三角求解误差。要从本页严格条件 κ(A)ε<1/2 走到关于 uf 的结论,还必须用具体 LU 误差界联系 ε 与 uf。因子无法提供收缩时,可以提高因子精度、改善缩放和主元策略,或将因子作为预条件器用于更强的内层迭代。

停止时可使用尺度化 normwise 后向误差

berrk=‖b−Ax^k‖∞‖A‖∞‖x^k‖∞+‖b‖∞,

并检查校正量相对于解的大小。分子、分母同时为零时可约定该指标为零。达到容差后,应以显式高精度残差复核;连续数轮不降、校正量增长、因子求解失败、非有限值或达到最大轮数,则应返回相应退出状态。过去几轮校正量之比可以帮助诊断,却不能自动充当约束所有后续轮次的收缩常数。残差与误差估计区分这些可观察指标与误差证书,线性系统条件数则说明后向误差怎样影响前向精度。LAPACK 驱动还结合倒条件估计和逐分量误差界;仅报告小残差不足以说明解的精度。

稠密问题只做一次 O(n3) 的 LU 分解,每轮残差矩阵—向量乘和两次三角求解均为 O(n2);稀疏问题的每轮成本取决于 nnz(A)、因子填充及访存。每轮重新分解既失去复用优势,也改变了固定因子模型。混合精度硬件带来的吞吐收益还要扣除转换和高精度累加成本,只有整体时间或能耗下降且最终误差满足目标,才构成有效优化。

参考资料
关系图谱15 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系