均匀网格把同样的计算量分配给每个位置,但函数可能只在一小段区域变化剧烈。自适应积分先估计每块误差,再把计算集中到尚未满足要求的区间。

本章以 lecture note 第 5.12 节为主要依据,沿用 S(a,b)S(a,b)、S2S_2、绝对误差估计 EE 与容许误差 tol\mathrm{tol}。Δ=S2−S(a,b)\Delta=S_2-S(a,b) 和 QcorrQ_{\mathrm{corr}} 是为推导引入的辅助记号。讲义的算法接受 S2S_2;本文还明确给出 Richardson 修正选项,并在实验中使用该修正。不把经验估计写成严格保证[1][1] S. Rojas, “Lecture Notes on Computational Mathematics,” 2025. Course lecture note distributed with MTH2051; local source course-lecture-notes.pdf., [2][2] M. U. School of Mathematics, “MTH2051: Introduction to Computational Mathematics: Course Lecture Notes and Study Workbooks,” 2026. Monash University course materials and study workbooks, Semester 2, 2026., [3][3] R. L. Burden and J. D. Faires, Numerical Analysis, 9th ed. Brooks/Cole, Cengage Learning, 2011.。

粗块、细块与分母十五

令 m=(a+b)/2m=(a+b)/2、L=b−aL=b-a。粗块 Simpson 值为

S(a,b)=L6[f(a)+4f(m)+f(b)].S(a,b)=\frac L6[f(a)+4f(m)+f(b)].

把区间一分为二,定义

S2=S(a,m)+S(m,b),Δ=S2−S(a,b).S_2=S(a,m)+S(m,b),\qquad \Delta=S_2-S(a,b).

粗计算使用三个点,细计算新增两个四分点。

定理局部 Richardson 误差估计

若 f∈C6f\in C^6,在收缩的区间上且相关导数一致有界,则

I−S2=Δ15+O(L7),I-S_2=\frac{\Delta}{15}+O(L^7),

所以修正值

Qcorr=S2+Δ15Q_{\mathrm{corr}}=S_2+\frac{\Delta}{15}

具有局部误差 O(L7)O(L^7)。沿用讲义,以 E=∣Δ∣/15E=|\Delta|/15 作为绝对误差的数值估计;它不是精确误差。

证明

在中点做 Taylor 展开至五次项,余项为 O(L6)O(L^6)。积分与 Simpson 对次数至多三的项精确,对称性消去五次项,四次项给出

I−S(a,b)=−L52880f(4)(m)+O(L7).I-S(a,b)=-\frac{L^5}{2880}f^{(4)}(m)+O(L^7).

两个半块分别贡献长度 (L/2)5(L/2)^5 的项。其中心的四阶导数平均与 f(4)(m)f^{(4)}(m) 相差 O(L2)O(L^2),所以

I−S2=−L546080f(4)(m)+O(L7).I-S_2=-\frac{L^5}{46080}f^{(4)}(m)+O(L^7).

因此粗误差首项是细误差的十六倍。相减得 Δ=15(I−S2)+O(L7)\Delta=15(I-S_2)+O(L^7)。除以十五并修正,即得结论。需要 C6C^6 才有这里的七次余项控制;仅凭通常的 C4C^4 Simpson 定理,不能自动推出这个强余项。

注讲义误差系数的核对

讲义第 5.12 节把两半块误差相加后印成分母 9216092160;由 2(L/2)5/2880=L5/460802(L/2)^5/2880=L^5/46080 可知,正确分母是 4608046080。因此粗细首项之比为十六。这里沿用讲义的 S2,E,tolS_2,E,\mathrm{tol} 记号,但系数与符号以以上推导为准。

分母十五估计的是两块细 Simpson 的总误差。它不是单独一块的误差,也不是修正值的严格上界。区间尚未细到渐近规律有效时,这个估计可能漏掉重要特征。

粗细 Simpson 比较与容许误差平分

粗细 Simpson 比较与容许误差平分

分配容许误差

给当前块分配绝对容许误差 tol>0\mathrm{tol}>0。若 ∣Δ∣≤15tol|\Delta|\leq15\mathrm{tol},接受修正值;否则分别递归左右半块,各分配 tol/2\mathrm{tol}/2。

命题容许误差总额守恒

从根区间的 tol\mathrm{tol} 出发,每次将父块额度平分,所有末级区间的额度之和始终为 tol\mathrm{tol}。

证明

最初只有一个额度 tol\mathrm{tol}。一次分裂将一个数 uu 替换为 u/2+u/2u/2+u/2,不改变总和。对分裂次数归纳即可。

如果每个末级区间的真实误差确实不超过各自额度,则三角不等式保证总误差不超过 tol\mathrm{tol}。算法检查的却只是 EE,所以额度守恒本身并不证明真实误差达标。

若另有已证明的局部四阶导数界 B4B_4,可以对未修正的细 Simpson 值使用

∣I−S2∣≤L5B446080.|I-S_2|\leq\frac{L^5B_4}{46080}.

证明是对两个半块分别使用单块误差界再相加。这样的导数界才提供严格保证,与仅从两个数值差得到的估计有不同的证据要求。

递归算法与采样复用

算法 1 自适应 Simpson 的递归步骤

Require: 区间 [a,b][a,b],已缓存 f(a),f(m),f(b),S(a,b)f(a),f(m),f(b),S(a,b),额度 tol\mathrm{tol},剩余深度 dd

1:计算两个四分点的函数值

2:SL←S(a,m)S_L\gets S(a,m),SR←S(m,b)S_R\gets S(m,b)

3:Δ←SL+SR−S(a,b)\Delta\gets S_L+S_R-S(a,b)

4:if ∣Δ∣≤15tol|\Delta|\leq15\mathrm{tol} then

5:return (SL+SR+Δ/15, accepted)(S_L+S_R+\Delta/15,\ \mathrm{accepted})

6:end if

7:if d=0d=0 then

8:return (SL+SR+Δ/15, limit)(S_L+S_R+\Delta/15,\ \mathrm{limit})

9:end if

10:递归左半区间,缓存对应函数值,额度 tol/2\mathrm{tol}/2,深度 d−1d-1

11:递归右半区间,缓存对应函数值,额度 tol/2\mathrm{tol}/2,深度 d−1d-1

12:return 两个子结果之和及合并状态

接受状态表示估计检查通过;达到限制表示估计尚未达标就停止。调用者不能把后一种情况包装成成功。实际实现还要检查非有限函数值,以及中点或四分点是否由于浮点分辨率不足而与端点重合。

网页实验缓存已有采样:递归一次只新增两个函数值。若最终有 NN 个末级区间,二叉树共有 2N−12N-1 个访问节点,每次访问新增两个值,连同最初三个,调用总数为 4N+14N+1。树节点数的证明是:每次分裂让末级区间数增加一,并让总节点数增加二。

交互实验:网格如何适应函数

这个交互图需要启用 JavaScript。

先选光滑指数函数,再选窄峰。调整容许误差,查看末级区间边界、函数调用数、估计之和以及真实误差。将最大深度降到零,可以直接检查“达到限制”的状态是否保留下来。

平方根在端点不满足本章的光滑性要求。算法仍可能给出有用的结果,但这里的渐近证明不能直接解释其全部表现。

为什么估计可能完全漏掉误差

反例最初五个采样点都为零

在 [0,1][0,1] 上取

f(x)=∏r=04(x−r4)2.f(x)=\prod_{r=0}^4\left(x-\frac r4\right)^2.

粗块与细块的所有采样都为零,所以 S=S2=Δ=0S=S_2=\Delta=0。算法对任意正的 tol\mathrm{tol} 都会立即接受并返回零。然而

∫01f(x) dx=51419264>0.\int_0^1f(x)\,dx=\frac5{1419264}>0.
证明

五个采样点就是多项式的根。多项式非负,在其他位置严格为正,所以积分正。精确常数可由展开平方后逐项积分核验;例如未平方的积为

x5−52x4+3516x3−2532x2+332x.x^5-\frac52x^4+\frac{35}{16}x^3-\frac{25}{32}x^2+\frac3{32}x.

平方并对各单项式使用 ∫01xk dx=1/(k+1)\int_0^1x^k\,dx=1/(k+1),即得所列分数。这个例子甚至是光滑多项式,说明仅有光滑性并不能保证第一次粗网格的估计已经可信。

实验中的“采样漏掉的正多项式”就是这个例子。还可把它乘上任意正常数,让实际误差任意增大,而采样结果仍全为零。这证明只靠有限个函数值,不附加函数类别或导数界,就不能提供普遍的严格积分误差保证。

怎样解释结果

同时保留近似值、估计误差、函数调用数和停止状态。已知断点或尖峰位置时,先分段比盲目递归更可靠。需要严格保证时,采用可证明的导数界或区间方法;只需要高效近似时,仍应比较不同初始分段和其他公式的结果。

至此,六章形成一条连贯路线:差分和求积来自局部多项式,复合公式累积局部误差,外推消去已有误差项,Gauss 用正交性选择节点,自适应方法根据局部估计分配计算量。每种改进都需要自己的数学条件。

其他公式的自适应估计

讲义第 5.12 节也讨论一般 pp 阶公式。令 Q0Q_0 为粗块近似、Q2Q_2 为两半块近似;这是区分网格的辅助记号。若相同首项模型使 I−Q0≈2p(I−Q2)I-Q_0\approx2^p(I-Q_2),相减即有

I−Q2≈Q2−Q02p−1,E≈∣Q2−Q0∣2p−1.I-Q_2\approx\frac{Q_2-Q_0}{2^p-1},\qquad E\approx\frac{|Q_2-Q_0|}{2^p-1}.

每块采用 nn 点 Gauss 公式时,复合精度阶数为 p=2np=2n,分母相应为 22n−12^{2n}-1。这个估计仍依赖光滑性和首项模型;不能因更换求积公式,就把差值估计当成真实误差界。

参考文献

  1. [1] S. Rojas, “Lecture Notes on Computational Mathematics,” 2025. Course lecture note distributed with MTH2051; local source course-lecture-notes.pdf. ↩
  2. [2] M. U. School of Mathematics, “MTH2051: Introduction to Computational Mathematics: Course Lecture Notes and Study Workbooks,” 2026. Monash University course materials and study workbooks, Semester 2, 2026. ↩
  3. [3] R. L. Burden and J. D. Faires, Numerical Analysis, 9th ed. Brooks/Cole, Cengage Learning, 2011. ↩