本页目录
数值 III · 方程求根、插值与逼近
两个古老而常用的主题。求根是"迭代思想"的教学样板(二分的稳、Newton 的快、不动点的统一视角);插值与逼近回答"怎么用简单函数替身复杂函数"——以及那个著名的反例:对特定函数使用等距节点做全局高次插值时,加点也可能更糟的 Runge 现象。
学习层:快的步骤,什么时候仍然有证书?
1. 先预测,再打开两本账
求根时先不要看轨迹:对当前函数预设,判断二分法是否拥有连续性与变号证书;再判断一个很小的 \(|f(x)|\) 是否已经足以保证很小的 \(|x-r|\)。插值时先判断:在 Runge 函数的均匀误差上,等距节点还是端部加密的 Chebyshev 节点更可靠,以及这个判断需要哪些函数与误差范数条件。
实验有一个预测门:选择预设、回答当前模式的两个判断,再点击“核对预测”才会显示曲线、数值和逐步账本。改变函数、步数或节点数后,预测会重新锁定;这样“先写下条件,再看结果”不会被图形的第一眼替代。
2. 最小模型:三种求根步骤各自保证什么?
设 \(f\) 在 \([a,b]\) 上连续,且 \(f(a)f(b)\leq0\)。二分法令 \(m=(a+b)/2\),保留仍然变号的一半区间。它的证书是
证书来自中间值定理,不来自“当前残差看起来很小”。Newton 步
是局部线性化:单根 \(f'(r)\neq0\)、初值落在合适邻域且导数不太小时,才有局部二次收敛的保证;它本身不维护区间,候选点可能越界。保守/阻尼 Newton 保留一个有效变号区间,只有当 Newton 候选点在区间内且残差下降时才接受,否则缩短步长或回退到中点。它的区间证书与二分同源,但速度不必每步二次。
还有一条容易漏掉的区别:对任意区间内点 \(x_k\),仅由 \(r\in[a_k,b_k]\) 能保证的是
只有 \(x_k\) 恰为中点才可使用半宽。实验的保守 Newton 证书已按当前点计算,并且所有候选都对当前收缩区间检查。固定预设用 \(|f(x_k)|\le10^{-14}\) 或区间宽度 \(\le10^{-12}\max(1,|x_k|)\) 停止,避免机器精度下无法“继续严格下降”而把好解推远。残差停止只是数值规则;平根仍可能有较大根误差。浮点函数求值的符号也不是严格区间算术证书。
三种量必须分列记录:
若 \(f'(r)\) 很小,局部反推还会把残差放大成根误差:由 \(f(x)\approx f'(r)(x-r)\) 可见,小残差不普遍等于小根误差。实验将“导数过小”“候选越界”“没有有效变号区间”单独列为状态,不把它们埋进一个收敛数字。
3. 插值的稳定计算:节点、公式、误差范数
对节点 \(x_i\) 和数据 \(y_i=f(x_i)\),用重心公式
脚本对权重乘积做对数缩放来构造 \(w_i\),并在 \(x=x_i\) 时直接返回 \(y_i\);实际求值使用上面的稳定重心式,避免先展开幂基或把巨大乘积带入计算。比较的是
其中 \(\Lambda_N(x)\) 是 Lebesgue 函数,\(\Lambda_N\) 是它的最大值。Chebyshev 节点的优势是对区间上的光滑函数、均匀范数和 Runge 型端部振荡提供更好的稳定/逼近尺度;它不是对任意噪声数据、任意权重范数或奇异函数的无条件定理。
无 JavaScript 时的静态读法:本实验固定函数,不允许把交互中的“示例”误读成所有函数的定理。求根预设及其条件如下;“区间证书”只有在函数在区间上连续并且端点变号(或端点已经是根)时才有意义。
| 预设 | \(f(x)\) | \([a,b]\) | 已知根 \(r\) | 要留意的边界 |
|---|---|---|---|---|
| 余弦交点 | \(\cos x-x\) | \([0,1]\) | \(0.7390851332\ldots\) | 连续、单根,Newton 可作局部比较 |
| 三次方程 | \(x^3-x-1\) | \([1,2]\) | \(1.3247179572\ldots\) | 连续、单根;初值离开邻域时仍可能越界 |
| 平根提示 | \((x-1)^3\) | \([0,2]\) | \(1\) | 有变号但 \(f'(r)=0\),不适用单根二次收敛保证 |
| 无变号 | \((x-1)^2\) | \([0,2]\) | \(1\) | 连续但端点同号,二分无区间证书 |
二分、Newton 与保守 Newton 的静态账本读法是:
| 方法 | 每步 | 残差栏 | 根误差栏 | 区间证书栏 | 状态栏 |
|---|---|---|---|---|---|
| 二分 | \(m=(a+b)/2\),保留变号半区间 | \(\lvert f(m)\rvert\) | \(\lvert m-r\rvert\) | \(r\in[a,b]\),所以 \(\lvert m-r\rvert\le(b-a)/2\) | 连续/变号不满足时停止 |
| Newton | \(x-f(x)/f'(x)\) | \(\lvert f(x)\rvert\) | \(\lvert x-r\rvert\) | 无(除非另行护栏) | \(\lvert f'(x)\rvert\) 过小或候选越界 |
| 保守/阻尼 Newton | 接受区间内的降残差步,否则减半或取中点 | \(\lvert f(x)\rvert\) | \(\lvert x-r\rvert\) | 当前点到区间两端距离的较大者 | 接受 Newton、阻尼、区间回退 |
因此,若某一行的 \(|f(x)|\) 很小而 \(|x-r|\) 仍不小,不能据此否定二分证书;应检查 \(f'(r)\)、单根假设和区间是否仍然有效。脚本可用时,表中每一行都会同时显示这四个数值/状态,并把 raw Newton 的越界与保守 Newton 的回退分开。
插值部分固定 Runge 函数
并比较同样数量 \(N\) 个节点:
(实现按从左到右排序)。静态判断表为:
| 节点 | 端部分布 | Runge 均匀最大误差 | Lebesgue 读法 | 条件 |
|---|---|---|---|---|
| 等距 | 端部稀疏 | 次数升高时端部振荡可能放大 | \(\Lambda_N(x)\) 在端部形成高峰 | 特定 Runge 例子、全局高次插值 |
| Chebyshev-Lobatto | 端部加密 | 通常显著压低该例的 \(E_N\) | \(\Lambda_N\) 更均衡,\(\Lambda_N\) 较小 | 光滑函数与均匀范数等条件下的比较 |
改变 \(N\) 后应同时看 \(E_N^{\rm eq},E_N^{\rm ch}\) 与 \(\Lambda_N^{\rm eq}(x),\Lambda_N^{\rm ch}(x)\);交互数值是在均匀采样网格上近似最大值,不能把有限网格读成解析极值。只看插值曲线经过节点,也不能判断区间内部误差。Lebesgue 常数只是从节点数据误差到插值误差的放大因子,不是“Chebyshev 对所有任务永远最优”的口号。
4. 误区与迁移
- “二分总能收敛”是错的。 需要函数在区间上连续且端点变号;同号端点可能包着偶重根,也可能根本没有根。
- “Newton 比二分快,所以应替代二分”是错的。 Newton 是局部方法;导数过小、初值不在单根邻域或候选越界时,保守护栏才是可解释的退路。
- “小残差就是小根误差”是错的。 还要看导数尺度、根的重数、输入/输出条件数;实验把两者分账正是为了阻止这个偷换。
- “Runge 现象证明高次插值总是坏”是错的。 它是一个特定函数、区间、等距节点和均匀误差范数下的反例;节点策略、函数正则性与误差范数都要写清楚。
- “Chebyshev 节点无条件最好”也是错的。 这里的优势对应光滑函数的全局插值和区间均匀误差;噪声、非均匀权重、奇异点或分段方法会改变选择。
5. 迁移题:证书究竟约束哪个点?
- 已知 \(r\in[0,1]\),当前点为 \(x=0.9\),能保证误差不超过 \(0.5\) 吗?
- 对 \(f(x)=(x-1)^3\),残差 \(10^{-12}\) 对应的根误差是多少?
- 已知 \(|f'|\ge m>0\) 于包含 \(x,r\) 的区间,如何从残差推出误差界?这比仅知道“单根”多了什么?
展开核对:半宽、残差与导数下界
- 不能;根可能在 \(0\),误差可达 \(0.9\)。中点 \(0.5\) 才享有半宽 \(0.5\) 的界。
- \(|x-1|=10^{-4}\)。小残差不能不经缩放就被称作同样小的坐标误差。
- 中值定理给 \(|f(x)-f(r)|=|f'(\xi)||x-r|\ge m|x-r|\),故误差不超过 \(|f(x)|/m\)。需要整个相关区间上的可验证下界,不能只用未知根处“导数非零”替代。
先修回链:中值定理、浮点误差。实现中可参考 SciPy brentq 的连续性、变号与坐标停止容差说明;本实验的保守 Newton 并非 Brent 算法。
1. 非线性方程求根 \(f(x) = 0\)
二分法:连续函数变号区间反复对半(零点定理,数分 I 的算法化)。在连续与变号假设成立、函数求值符号可靠时,每步区间减半——线性收敛、区间证书稳健;要把绝对误差压到 \(\varepsilon\),步数约为 \(\log_2\frac{b-a}{\varepsilon}\)。打底用。
不动点迭代(统一视角):改写 \(f(x) = 0 \iff x = g(x)\),迭代 \(x_{k+1} = g(x_k)\)。
定理(局部收敛) \(g\) 连续可微,\(|g'(x^*)| < 1\) ⇒ 附近迭代收敛(误差 \(e_{k+1} \approx g'(x^*)e_k\),线性收敛率 \(|g'|\));\(|g'(x^*)| > 1\) 则推开。 (压缩映像原理的局部版——ODE 页 Picard 迭代、本页 Newton 法、值迭代(优化 IV)全是这一个定理的分身。同一方程的不同改写 \(g\) 收敛性天差地别——改写是技术活,例 1 演示。)
Newton 法:切线代曲线(数分 II 线性化的算法化):
二次收敛(\(e_{k+1} \approx \frac{|f''|}{2|f'|}e_k^2\)——有效数字每步翻倍;视角二:它是 \(g = x - f/f'\) 的不动点迭代且 \(g'(x^*) = 0\),"收敛率为零"即超线性)。代价与风险:要导数、单根附近才保证、初值差会飞(实务:二分圈定 + Newton 收尾)。割线法:差商代导数,收敛阶 \(\approx 1.618\)(黄金比!),免导数——不会求导时的 Newton。🔗 优化 II 的 Newton/拟 Newton 正是本节在 \(\nabla f = 0\) 上的多维版;torch 里 rsqrt 类硬件指令的内部实现也是 Newton 迭代。
2. 多项式插值
问题:过 \(n+1\) 个点 \((x_i, y_i)\) 求次数 \(\leq n\) 的多项式(存在唯一——Vandermonde 行列式非零,高代 II)。两种写法同一多项式:
Lagrange 形式(理论顺手):\(P_n(x) = \sum_i y_i\, \ell_i(x)\),基函数 \(\ell_i(x) = \prod_{j \neq i}\frac{x - x_j}{x_i - x_j}\)(在 \(x_i\) 取 1、其余节点取 0)。
Newton 形式(计算顺手):\(P_n(x) = f[x_0] + f[x_0,x_1](x - x_0) + f[x_0,x_1,x_2](x-x_0)(x-x_1) + \cdots\),系数是差商(差商表递推 \(f[x_i..x_j] = \frac{f[x_{i+1}..x_j] - f[x_i..x_{j-1}]}{x_j - x_i}\))——加一个新点只需添一项,增量友好。
误差余项(Taylor 余项的插值版,结构完全平行——数分 II):
3. Runge 现象与两条出路
反例(Runge, 1901):\(f(x) = \frac{1}{1 + 25x^2}\) 在 \([-1,1]\) 上取越来越密的等距节点做全局插值时,插值多项式不在整个区间上一致收敛,端部会出现不断放大的振荡。根源可从节点多项式、Lebesgue 放大与函数复奇点共同理解,不能只把责任归给某一个余项因子。"多项式次数"可能成为过拟合旋钮——这与 ai 课 01 讲的偏差—方差问题相通;对带噪数据强制穿过每点通常会放大噪声,但是否“必然变差”仍取决于噪声模型、节点、度量与正则化。
出路一(换节点):取 Chebyshev 根 \(x_i = \cos\frac{(2i+1)\pi}{2n+2}\)(端部加密),其首一节点多项式在 \([-1,1]\) 上达到 minimax 尺度;上方实验使用的是同时包含两个端点的 Chebyshev–Lobatto 节点 \(x_i=\cos\frac{i\pi}{n}\)。两族公式不同,但都把节点向端部聚集,并显著改善本页 Runge 例子的均匀误差与 Lebesgue 放大;不能把其中一条公式悄悄换成另一条(谱方法的地基,知其所以然即可)。
出路二(降次分段)——三次样条:每段三次多项式,节点处 \(C^2\) 拼接(函数、一二阶导全连续)+ 两个边界条件 ⇒ 系数由三对角方程组唯一定(追赶法 \(O(n)\) 解,上一页的特例)。样条以分段低次控制全局高次振荡,并提供平滑连接;普通三次样条仍可能过冲,保单调或保形需要额外设计。样条广泛用于 CAD、字体与动画曲线;是否选分段方法仍要看数据和误差需求。
4. 最小二乘拟合(数据带噪时的正确姿势)
放弃"穿过每点",改求 \(\min_c \sum_i \big(y_i - \sum_k c_k \varphi_k(x_i)\big)^2\)——正规方程 \(A^\top A c = A^\top y\)(高代最小二乘/统计 V OLS 的同一公式第三次出场)。数值要点回收上一页:正规方程条件数是 \(\kappa(A)^2\)(平方级恶化!),认真做用 QR 分解直接解最小二乘——"同一数学、不同算法、精度两个档次"的又一标本。
插值 vs 拟合的选择判据:数据精确(函数表、几何造型)→ 插值/样条;数据带噪(实验、统计)→ 低维拟合 + 残差诊断(统计 V)。
5. 典型例题
例 1(改写的艺术) 解 \(x^3 - x - 1 = 0\)(根 \(\approx 1.325\))。改写 A:\(x = x^3 - 1\),\(g' = 3x^2 \approx 5.3 > 1\) 发散;改写 B:\(x = \sqrt[3]{x + 1}\),\(g' = \frac13(x+1)^{-2/3} \approx 0.19 < 1\) 收敛(每步误差乘 0.19)。同一方程,生死两重天。
例 2(Newton 手算) \(\sqrt 2\):解 \(x^2 - 2 = 0\),\(x_{k+1} = \frac12(x_k + \frac{2}{x_k})\)。从 \(x_0 = 1\):\(1.5,\ 1.41\overline{6},\ 1.414216,\ 1.41421356\dots\)——四步 8 位有效,二次收敛的体感(这也是巴比伦开方法,人类最古老的算法之一)。
例 3(差商表) 过 \((0,1), (1,2), (2,5)\):差商 \(f[x_0]=1,\ f[x_0,x_1]=1,\ f[x_0,x_1,x_2]=\frac{3-1}{2}=1\) ⇒ \(P_2 = 1 + x + x(x-1) = x^2 + 1\)。验证三点全过 ✓。\(\blacksquare\)
最后一页:积分算不出原函数怎么办、微分方程解不出解析解怎么办——数值积分与 ODE 数值解,扩散模型采样器的老家。