单块求积用一个低次多项式近似整个区间;复合求积把区间细分,再逐块使用同一个低次公式。改进准确度靠的是缩小网格,而不是把全局插值次数不断提高。
本章沿用 lecture note 第 5.6 节的网格约定: 是小区间数,节点有 个。设
误差始终写成 。下面由单块误差定理推导全局常数,避免混淆小区间宽度与 Simpson 块宽度[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.。
三个复合公式
对 ,定义
要求 为正偶数。每个 Simpson 块占两个小区间,宽度为 :
把单块公式逐项相加。梯形内节点属于左右两个块,各得 ,总权重为 。Simpson 每块的三个权重是 。奇数节点只在一块的中间,偶数内节点连接两块,端点只出现一次,因此得到 的权重结构。中点节点各属于一个小区间。
局部误差如何累积成全局误差
若 ,存在各自的 ,使
若 ,且 为偶数,则存在 ,使
每个梯形块的误差是 。求和后,用连续导数的介值定理把 个导数值的平均值写为某点导数,再用 ,得到梯形结论。中点块的常数为 ,同理可得。
Simpson 有 个块。每块宽 ,所以单块误差为
共有 项,平均值仍可写为同一个连续导数的某点值,因此总误差为 ,即所求。
于是梯形和中点的全局精度是二阶,Simpson 是四阶。单块 的误差乘上约 个块后变成 ,不能把局部阶数直接当作全局阶数。这些是上界意义的阶数;若首项系数为零,具体函数可能表现出更高阶甚至完全精确。
将余项导数换成最大绝对值,就得到可计算的界。记
例如 Simpson 的充分条件是
因此可选择不小于 的最小正偶数。这需要真正可用的导数界;仅由两个网格结果接近,不能得到同样的保证。
凸函数、界与成本
若 ,误差定理给出 。也可从凸性直接证明:每块上,函数图像在端点连线之下,积分不超过梯形;关于中点的对称两点平均至少为中点函数值,积分后至少为中点近似。
一次直接计算的函数调用数分别为:梯形 ,中点 ,Simpson 。比较相同 时,Simpson 必须取偶数;比较相同成本时,应另外核对实际调用数。高阶规则的误差常数涉及不同阶导数,并不存在对所有函数都更好的固定排序。
对同一个粗网格,恒有
细网格中,新节点恰是粗网格各块中点。将 的权重按旧节点和新节点拆开,分别等于 与 。对 ,旧内节点权重为 ,端点为 ,新中点为 ,正是 。再代入第一个等式即可。
这些是任意函数采样值之间的代数恒等式,不需要光滑性。它们的四阶误差结论仍然需要前面的条件。后一个表达式也是第一层 Richardson 外推的来源。
观测阶数与光滑性失效
若误差有非零首项 ,则
证明只需将分子、分母分别除以 ,再取极限; 保证分母最终不为零。只有误差上界 时,不能反推该比值一定趋于 。
对 ,端点导数无界,标准二阶与四阶定理均不适用。开放式公式不取端点,并不能恢复缺失的光滑性。甚至可严格证明其复合中点误差绝对值是 :第一块误差为 ,其余块由凹性可知同为负;第 块用局部二阶导数界控制,绝对值不超过 。级数收敛,因此得到同阶上界,第一块给出非零下界。
交互实验与可执行例子
这个交互图需要启用 JavaScript。
先用指数函数观察误差比,再改为平方根,检查高阶预期为什么失效。窄峰例子提醒我们:粗网格上的小误差差值可能只是没采到重要区域。
下面的实现与网页实验使用同一组权重;接口中的 表示小区间数。
def composite_simpson(f, a, b, n): if not isinstance(n, int) or not a < b or n < 2 or n % 2: raise ValueError("require a < b and positive even n") h = (b - a) / n total = f(a) + f(b) for i in range(1, n): total += (4 if i % 2 else 2) * f(a + i * h) return h * total / 3在 上积分 时,误差恰为 ,因为四阶导数恒为 。用这个算例核对程序的权重、误差符号和网格定义,比只比较一个小数结果更有效。
参考文献
- [1] S. Rojas, “Lecture Notes on Computational Mathematics,” 2025. Course lecture note distributed with MTH2051; local source course-lecture-notes.pdf. ↩
- [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] R. L. Burden and J. D. Faires, Numerical Analysis, 9th ed. Brooks/Cole, Cengage Learning, 2011. ↩
评论