章节摘要:数学上正确的算法,在有限精度的计算机上可能给出垃圾。本章讲数值计算的三层内功:5.1 误差来源与数值稳定性——为什么两个几乎相等的数相减是灾难;5.2 插值、数值积分与方程求根的经典算法及其适用病情;5.3 大规模稀疏线性系统的求解策略——现代仿真的真正瓶颈。读完本章,你写出的数值代码会自带"这步误差多大"的自觉。
阅读完本章,你应当能够:
算法的稳定性与问题的条件数是两回事:前者是"医生的手稳不稳",后者是"病人的体质好不好"。
三种误差源、相消灾难的复现与消除、经典的一元二次公式修复案例。
拉格朗日与样条插值的选择、复合求积与自适应积分、二分法与牛顿法的搭档关系。
稀疏存储格式、雅可比与共轭梯度迭代、预条件的作用与工程选型。
5.1 误差观(世界观)──► 5.2 经典算法(招式)──► 5.3 大规模(内力放大)
5.1 建立判断力,5.2 在小问题上练招,5.3 把招式带进十万阶的真实战场。三节的代码都可直接运行,误差数字都是真跑出来的。
| 工单 | 用到的方法 | 关键产出 |
|---|---|---|
| 数值微分步长选择 | 相消误差复现 | 误差 U 形曲线 |
| 一元二次求根 | 恒等变形修复 | 朴素与稳定版对照 |
| 黏度曲线查值 | 拉格朗日与样条对比 | 龙格现象现场 |
| 稳态温度方程 | 二分与牛顿混合 | 有效数字翻倍节奏 |
| 大型热网络 | 稀疏存储、CG、预条件 | 迭代数对比 |
本章的误差观是全册的底层纪律:2.2 节的病态诊断、8.2 节的反问题病态,都是它的直系后代。
本章的自学节奏建议:先通读 5.1 建立"误差世界观",它决定你读后两节时的警觉程度;5.2 的三组算法各配一个小实验,跑一遍误差阶的对比输出,把"阶数"从名词变成手感;5.3 视兴趣深浅——不从事大规模计算可选读,但要记住"迭代不收敛先上预条件"这条急救口诀。全章的代码都不依赖大规模算力,笔记本即可,重点始终是读懂输出里那些误差数字的来源。
自测三题:其一,数值微分的步长为什么不是越小越好?其二,求根时牛顿法步长突然巨大,标准防御动作是什么?其三,共轭梯度对矩阵性质有什么硬要求,用错会怎样?(答案分别在 5.1、5.2、5.3。)
三题若都对,你的数值代码就已经自带误差自觉——这是本章唯一真正要带走的东西。
另外提醒:本章所有实验在普通笔记本上的总运行时间不超过半分钟,反复重跑的成本极低——数值直觉就是靠这种廉价实验堆出来的。
祝练得开心。
动手愉快,误差自知。
数值代码的调试与常规代码不同:语法对、逻辑对,结果仍可能错。建议把"误差预算"写成显式注释——每个计算结果旁标注"这步误差预期多大、来自哪个源头"(5.1 的方法);改一处公式立刻重跑全部实验(笔记本半分钟即可,5.2 的成本优势);涉及大规模矩阵先查条件数与稀疏结构再选求解器(5.3 的选型顺序)。三节的小实验值得各跑两遍:第一遍照抄复现,第二遍故意改一个参数(步长放大十倍、容差放松一档),看误差数字怎么变——对误差的敏感度,正是本章想练成的内功。