科学仿真 · 从零学起 第 3 / 7 节

第 4 章 · 数值积分:从梯形到自适应

算 $\int_a^b f(x)dx$:函数值能取但原函数求不出,是数值积分的常规场景。这一章的路线图:低阶公式 → 高阶公式 → 自适应分配算力 → 特殊困难(振荡、奇异)。

牛顿-科茨家族

等距节点的插值积分:梯形(2 点,$O(h^2)$)、Simpson(3 点,$O(h^4)$)。简单可靠,是"闭式公式"的基础。误差阶由奇偶性决定:$n$ 点公式的阶是 $n$(偶数点)或 $n-1$(奇数点)——Simpson 与 4 点公式的阶相同,所以 4 点白花钱,这是选型的著名陷阱。

高斯求积:最优点数的艺术

自由选节点位置,$n$ 个点可精确积分 $2n-1$ 次多项式——比牛顿-科茨同点数高近一倍。Gauss-Legendre 是一般区间的主力;权函数带奇性时用 Gauss-Chebyshev 等变体直接吸收权。工程上常用现成的 10 点公式,$10$ 次函数调用拿 19 阶精度。

自适应求积:把算力花在刀刃上

$$\int_a^b = \int_a^{(a+b)/2} + \int_{(a+b)/2}^b, \quad \text{误差超限则递归对半}$$

每个子区间用两个阶(如 G7-K15:7 点与 15 点)的结果差作误差估计,不达标就再分。函数在某处剧烈变化时网格自动加密,平坦区自动变粗——这是黑盒积分的工业标准(QUADPACK、scipy.integrate 的内核)。

奇异与振荡的专药

  • 端点奇异 $\int_0^1 x^{-1/2}f(x)dx$:变量代换 $x=t^2$ 消除,或用带权高斯。
  • 振荡积分:分段按周期积分、Filon/Levin 方法,别让自适应公式硬扛。
  • 无穷区间:变换 $x = t/(1-t)$ 或专用 Gauss-Laguerre/Hermite。
原文要点:第 4 章的推荐路线:一般函数用自适应高斯(Gauss-Kronrod);光滑且点数多的用 Romberg(梯形 + Richardson 序列外推);书中明确警告梯形/Simpson 的"均匀网格 + 手动分段"不如自适应省心,romberg 只适合光滑函数。

老师的提醒

  • 积分结果可疑时先画 $f$:尖峰、振荡、间断一眼可见——黑盒自适应也怕 Dirac 式尖刺(可能整个漏掉)。
  • 蒙特卡洛是高维($d\gtrsim 6$)的领地:一维到六维用确定性求积,维度再高误差 $\sim N^{-1/2}$ 反而胜出(第 7 章)。

自检

  • 为什么 4 点牛顿-科茨不划算?
  • 自适应求积的误差估计怎么来?
  • 高维积分的维度分界线与原因?

更深一层:自适应求积是"误差预算的实时分配器"

自适应求积(G7-K15 类)的精髓是把全局误差预算 $ε$ 动态分配给子区间:每个子区间用两个不同阶的公式(7 点 Gauss 与 15 点 Kronrod 嵌套),它们的差给出该区间的误差估计,超过份额就二分递归。这个过程实现了"把算力精确花在函数最刁钻的地方"——光滑区大刀阔斧、尖峰区精雕细琢。工程选型速记:光滑一般函数 → 自适应 Gauss-Kronrod(QUADPACK 内核);无穷区间 → 专用变换或 Gauss-Laguerre/Hermite;振荡积分 → Filon/Levin 或分段按周期;维度 > 4 → 蒙特卡洛(误差 $\sim N^{-1/2}$ 与维度无关,碾压维数诅咒)。

高斯积分的"两倍效率"值得再咀嚼一次:$n$ 个自由节点精确积分 $2n-1$ 次,比等距点多一阶——自由度换阶数的非线性回报。这套"优化采样位置"的思想在实验设计(D-最优设计)、机器学习(主动学习选样本点)里都是同一原理的回声。

推导细读:Romberg 外推的级联结构

Romberg 是 Richardson 外推的级联应用:梯形公式误差展开为 $I = T(h) + c_1h^2 + c_2h^4 + \dots$。把步长逐次减半的多个 $T$ 值按列组合:第一列消 $h^2$ 项(Simpson 级精度)、第二列消 $h^4$(Newton-Cotes 6 点级)……三角形的每一列都是一次"跳阶"。它的适用前提严格:被积函数光滑(误差展开成立);有奇性/间断时 Romberg 不如自适应(NR 的选型表正是这么分的)。这套"已知误差结构 → 线性组合消项"的手法是外推法的通用语法——数值微分、ODE 外推法(Bulirsch-Stoer)、差分格式的 Richardson 外推,全是同语法造句。

在真实世界里:黑盒求积的三条保命规则

调用自适应求积库(scipy.integrate.quad 等)时的三条保命规则:规则一:永远检查返回的误差估计——库报告 $10^{-10}$ 的误差只在函数"行为良好"的假设下成立,尖峰漏采时它自信地错着;规则二:积分前画图或采样预览——自适应的致命盲区是"整段漏掉的特征"(极窄尖峰恰好落在初始网格间);规则三:奇异与振荡要显式告知(权重函数、区间拆分),不要指望黑盒自己悟出来。这三条来自真实教训:物理期刊曾多次刊登因漏采共振峰而错误的数值积分结果——黑盒给了信心,没给真相。

专题深入:自适应求积的"误差预算实时分配"

自适应求积(G7-K15 类)的精髓值得展开:全局误差预算 $\epsilon$ 动态分配给子区间——每个子区间用两个不同阶的公式(7 点 Gauss 与 15 点 Kronrod 嵌套),它们的差给出该区间的误差估计,超过份额就二分递归。"把算力精确花在函数最刁钻的地方"——光滑区大刀阔斧、尖峰区精雕细琢。这是"误差预算的实时分配器"——工业黑盒积分的标准(QUADPACK、scipy.integrate 的内核)。

Gauss-Kronrod 的嵌套结构(Kronrod 点集扩展 Gauss 点集,共享已算函数值)是"误差估计几乎免费"的工艺——算一次高阶、低阶免费。自适应 + 嵌套是这套方法的全部智慧。

数学细节展开:高斯积分的"最优点数"完整推导

高斯积分 $n$ 个点精确积分 $2n-1$ 次的完整推导值得走一遍:节点位置自由($n$ 个自由度)+ 权重自由($n$ 个自由度)= $2n$ 个自由度,恰好满足 $2n$ 次多项式的精确积分条件。勒让德多项式的零点恰好是这个自由度的最优解。"自由度换阶数的非线性回报"——这套"优化采样位置"的思想在实验设计(D-最优设计)、机器学习(主动学习选样本点)里都是同一原理的回声。

工程案例细节:黑盒求积的三条保命规则(展开)

调用自适应求积库的三条保命规则值得展开:规则一——永远检查返回的误差估计(库报告 $10^{-10}$ 的误差只在函数"行为良好"的假设下成立,尖峰漏采时它自信地错着);规则二——积分前画图或采样预览(自适应的致命盲区是"整段漏掉的特征"——极窄尖峰恰好落在初始网格间);规则三——奇异与振荡要显式告知(权重函数、区间拆分),不要指望黑盒自己悟出来。物理期刊曾多次刊登因漏采共振峰而错误的数值积分结果——黑盒给了信心,没给真相。

例题

用复合 Simpson 公式($n = 4$ 子区间,$h = 0.25$)计算 $\int_0^1 x^2\,dx$,验证它对二次函数精确。

解答

节点:$x = 0, 0.25, 0.5, 0.75, 1$;$f = x^2$:$0, 0.0625, 0.25, 0.5625, 1$。

$$S = \frac{h}{3}\Big[f_0 + 4(f_1+f_3) + 2f_2 + f_4\Big] = \frac{0.25}{3}\Big[0 + 4(0.0625+0.5625) + 0.5 + 1\Big]$$
$$= \frac{0.25}{3}\times[0 + 2.5 + 1.5] = \frac{0.25}{3}\times4 = \frac13\ \checkmark$$

精确值 $\int_0^1 x^2 = 1/3$——零误差。

原因:Simpson 的误差项含 $f^{(4)}$,二次函数四阶导为 0,故精确到 3 次多项式。这就是"4 点牛顿-科茨不划算、3 点已够"的阶数奇偶性根源。

本页是《数值方法(Numerical Recipes)》第 3 节的学习笔记:为便于初学,讲解、例题与要点概括均为本站原创整理,公式与章节定位供对照原书使用。

📑 本书目录 经典研读