跳转至

反常积分怎样完成可靠数值计算?

先备知识

前五个单元已经分别解决两件事:

  • 对反常积分,逐端点定义、比较判别与振荡判别回答“目标值是否存在”,尾部估计回答 “截断丢掉多少”;
  • 对有限区间积分,中点、梯形与 Simpson 公式在导数界成立时给出可证明的求积误差。

本单元只做最后的合并。程序不会替你证明反常收敛,也不会替你证明导数界;它负责在 已经证明的前提下执行有限网格求积并返回可审计的状态。

学习目标

完成本单元后,你应能:

  1. 先证明收敛,再讨论数值近似;
  2. 把总容差拆成尾部误差预算与求积误差预算;
  3. 由尾部界反求截断点;
  4. 在完整截断区间上证明导数界;
  5. 从解析误差公式反求合法网格数;
  6. 用三角不等式合并两类误差;
  7. 区分“结果接近”“预算耗尽”与“已有总误差证书”;
  8. 用精确值、第二种方法或独立手算做不替代证明的回验。

牵引问题

若直接把无穷区间交给一个有限循环,循环实际上必定在某处停止。停止点右侧的积分没有 消失,有限区间上的离散误差也没有消失。怎样把这两笔误差分别记账,并给最终小数附上 可检查的保证?

探索与猜想

设目标是

\[ I=\int_a^\infty f(x)\,dx. \]

选取截断点 \(R>a\),在 \([a,R]\) 上用 \(Q_R\) 近似。加上再减去同一个有限积分:

\[ I-Q_R =\int_R^\infty f(x)\,dx+ \left(\int_a^R f(x)\,dx-Q_R\right). \]

这提示我们把总容差 \(\varepsilon\) 分为两份。两份不必相等,但必须在计算前写清, 且总和不超过 \(\varepsilon\)

概念与理论

总误差证书定理

设反常积分 \(I=\int_a^\infty f(x)\,dx\) 收敛。若某个 \(R>a\) 与有限区间近似 \(Q_R\) 满足

\[ \left|\int_R^\infty f(x)\,dx\right| \le \varepsilon_{\mathrm{tail}}, \qquad \left|\int_a^R f(x)\,dx-Q_R\right| \le \varepsilon_{\mathrm{quad}}, \]

那么

\[ \boxed{ |I-Q_R| \le \left|\int_R^\infty f(x)\,dx\right| + \left|\int_a^R f(x)\,dx-Q_R\right| \le \varepsilon_{\mathrm{tail}}+\varepsilon_{\mathrm{quad}}. } \]

特别地,只要 \(\varepsilon_{\mathrm{tail}}+\varepsilon_{\mathrm{quad}}\le\varepsilon\), 就得到 \(|I-Q_R|\le\varepsilon\)

证明。 上一节的恒等式和三角不等式立即给出第一步;再代入两条已证明的界得到 第二步。这里没有假定 \(f\ge0\):正负抵消已经包含在尾部积分的绝对值中。证毕。

这条结论看似简单,却明确了责任边界:反常积分理论负责第一项,有限区间求积理论负责 第二项,最后一次三角不等式负责合并。任何一项只凭观察而没有界,结论都不是严格的 总误差证书。

八步可靠工作流

  1. 先证明收敛。 指明使用定义、比较、绝对收敛或振荡判别中的哪一条路线。
  2. 分配预算。 选择非负的 \(\varepsilon_{\mathrm{tail}},\varepsilon_{\mathrm{quad}}\),并验证二者之和不超过 总容差。
  3. 推出尾部界。 由精确积分、比较函数或已证明的振荡尾部估计控制 \(\left|\int_R^\infty f\right|\)
  4. 选择截断点。 解不等式,使尾部界不超过尾部误差预算。
  5. 证明导数界。 若选 Simpson,就在整个 \([a,R]\) 上证明 \(|f^{(4)}|\le M_4\);不能只抽样几个点。
  6. 反求网格预算。

[ \frac{R-a}{180}M_4h^4\le\varepsilon_{\mathrm{quad}}, \qquad h=\frac{R-a}{n}, ]

求出最小允许的正偶数 \(n\)。 7. 运行并读取状态。 调用共享模块,记录近似值、网格数、函数求值次数、解析 error_boundstatus;若为 budget_exhausted,只报告当前有效界。 8. 合并并回验。 写出具体的总误差不等式,再检查数量级、单位和独立参照。

预算可以不均分。若尾部衰减慢而有限区间很光滑,可以给尾部更多预算;若截断容易但 导数界很粗,可以给求积更多预算。改变分配以后,截断点与网格数都要重新计算。

例题与迁移

例 1:指数衰减的完整基准

要求以总误差不超过 \(10^{-4}\) 近似

\[ I=\int_0^\infty e^{-x}\,dx. \]

问题来源。 这个积分有精确值 \(1\),适合验证完整证书链,但精确值只用于最后 回验。

数学转化。 正函数与 \(p\)-型之外的直接计算都说明积分收敛,并且

\[ \int_R^\infty e^{-x}\,dx=e^{-R}. \]

均分预算: \(\varepsilon_{\mathrm{tail}}=\varepsilon_{\mathrm{quad}}=5\times10^{-5}\)。 取 \(R=10\),则 \(e^{-10}<5\times10^{-5}\)

算法思想。\([0,10]\) 上,

\[ f^{(4)}(x)=e^{-x},\qquad |f^{(4)}(x)|\le1, \]

所以可取 \(M_4=1\)。Simpson 界要求

\[ \frac{10}{180}\left(\frac{10}{n}\right)^4 =\frac{10^5}{180n^4} \le5\times10^{-5}. \]

由此 \(n\ge57.74\ldots\),最小正偶数是 \(58\)

伪代码。

证明积分收敛
令 tail_budget = quad_budget = 5e-5
证明 R = 10 时 tail_bound = exp(-10) < tail_budget
证明 [0, 10] 上 M4 = 1
用 certified_simpson 计算并检查 target_met
报告 tail_bound + result.error_bound

Python。

from math import exp
from mathbook_examples.quadrature import certified_simpson

result = certified_simpson(
    lambda x: exp(-x),
    0.0,
    10.0,
    tolerance=5e-5,
    fourth_derivative_bound=1.0,
    max_subintervals=58,
)
total_bound = exp(-10.0) + result.error_bound

结果解释。 只有当 result.target_met is True 且其误差界不超过 \(5\times10^{-5}\) 时,才可写

\[ |I-Q_{10}| \le e^{-10}+\texttt{result.error\_bound} <10^{-4}. \]

还可以比较 \(Q_{10}\) 与精确值 \(1\),但这只是基准回验,不是通用工作流中的必要 证明步骤。上述解析证书也不覆盖浮点舍入误差。

例 2:Gaussian 尾部预算

考虑

\[ I=\int_0^\infty e^{-x^2}\,dx. \]

问题来源。 本例不能靠初等原函数算出目标值,因此更能体现“尾部证明加有限求积” 的作用。

数学转化。\(R>0\)\(x\ge R\) 时,\(x/R\ge1\),故

\[ e^{-x^2}\le\frac{x}{R}e^{-x^2}. \]

逐点比较并积分:

\[ \int_R^\infty e^{-x^2}\,dx \le\frac1R\int_R^\infty xe^{-x^2}\,dx =\frac{e^{-R^2}}{2R}. \]

这个上界有限,也顺带给出积分收敛。若总容差为 \(10^{-4}\) 并均分预算,取 \(R=3\)

\[ \frac{e^{-9}}6<2.1\times10^{-5}<5\times10^{-5}. \]

算法思想。 直接求导得到

\[ f^{(4)}(x)=(16x^4-48x^2+12)e^{-x^2}. \]

\([0,R]\) 上,用 \(e^{-x^2}\le1\) 与三角不等式得到有效的粗界

\[ |f^{(4)}(x)| \le16R^4+48R^2+12=:M_4. \]

\(R=3\)\(M_4=1740\)。于是 Simpson 求积误差满足

\[ |E_S| \le\frac3{180}\,1740\left(\frac3n\right)^4 =\frac{2349}{n^4}. \]

要使它不超过 \(5\times10^{-5}\),取 \(n=84\) 已经足够。这个界很保守,但它覆盖 整个区间。若能另行证明更小的 \(M_4\),可以减少网格;用采样观察到的最大值不能直接 代替证明。

Python。

from math import exp
from mathbook_examples.quadrature import certified_simpson

R = 3.0
m4 = 16 * R**4 + 48 * R**2 + 12
result = certified_simpson(
    lambda x: exp(-(x * x)),
    0.0,
    R,
    tolerance=5e-5,
    fourth_derivative_bound=m4,
    max_subintervals=84,
)
total_bound = exp(-(R * R)) / (2 * R) + result.error_bound

结果解释。 严格结论来自

\[ |I-Q_3| \le\frac{e^{-9}}6+\texttt{result.error\_bound} <10^{-4}, \]

前提是程序返回 target_met。若预算状态是 budget_exhausted,尾部证明仍有效,但 不得声称总目标已达到。

例 3:相邻网格很接近仍不是证书

有人在 \([0,R]\) 上得到

\[ Q_{40}=0.7468240,\qquad Q_{80}=0.7468241, \]

于是把 \(10^{-7}\) 写成严格误差界。这一步无效:三角不等式只给

\[ |Q_{80}-Q_{40}| \le|I_R-Q_{80}|+|I_R-Q_{40}|, \]

方向不能反过来。两个近似彼此接近,不能推出任一个都接近真实的有限积分 \(I_R\); 更没有覆盖截断后的尾部。

正确做法是分别证明尾部界与导数界,再使用有限求积误差公式。网格差可以作为发现 程序错误或数量级异常的回验,但不自动成为总误差证书。

即时检验与回望

即时检验 1

已知尾部界为 \(3\times10^{-5}\),求积界为 \(8\times10^{-5}\)。能否报告总误差 不超过 \(10^{-4}\)

答案

不能。三角不等式只保证总误差不超过 \(3\times10^{-5}+8\times10^{-5}=1.1\times10^{-4}\)。 必须缩小其中至少一项,使两笔预算之和不超过目标。

即时检验 2

为什么“先证明收敛”必须排在选择网格之前?

答案

若反常积分本身不收敛,有限截断值即使在相邻网格上很稳定,也没有一个目标极限可 逼近。网格只能控制固定有限区间上的求积误差,不能创造反常积分的存在性。

即时检验 3

\([0,R]\) 上随机抽取一千点,观察到 \(|f^{(4)}|\le2\)。能否把 \(2\) 直接传给 证书程序?

答案

不能。抽样没有覆盖连续区间的每一点。调用者需从导数表达式、单调性或其他已证明 不等式推出全区间导数界;程序只使用这个前提,不会验证它。

即时检验 4

程序返回 budget_exhausted,但仍给出 error_bound=0.002。应怎样报告?

答案

报告“在输入的导数界成立且忽略浮点舍入误差时,当前有限区间求积误差不超过 \(0.002\),但现有网格预算没有证明目标容差已达到”。再与尾部界相加,得到当前 可用的总界,不能把状态改写成成功。

回望:可靠计算不是只输出一个小数,而是输出“收敛依据、截断点、尾部误差预算、 求积误差预算、导数界来源、网格状态和最终三角不等式”组成的证据链。

习题与答案

综合练习 1:重新分配指数积分预算

\(\int_0^\infty e^{-x}dx\),总容差为 \(10^{-3}\)。取 \(\varepsilon_{\mathrm{tail}}=8\times10^{-4}\)\(\varepsilon_{\mathrm{quad}}=2\times10^{-4}\)。给出一个整数截断点、有效导数界和 Simpson 网格条件。

答案

积分由精确尾部 \(e^{-R}\) 证明收敛。取 \(R=8\),则 \(e^{-8}<8\times10^{-4}\)。在 \([0,8]\)\(|f^{(4)}|=e^{-x}\le1\),所以

\[ |E_S|\le\frac8{180}\left(\frac8n\right)^4. \]

选择满足该式不超过 \(2\times10^{-4}\) 的正偶数 \(n\),运行后若状态达标,则

\[ |I-Q_8|\le e^{-8}+|E_S|<10^{-3}. \]

综合练习 2:幂尾部与有限求积

\(I=\int_1^\infty x^{-2}dx\),总容差 \(0.01\)。均分两类预算,并说明怎样选择 \(R\) 与 Simpson 的 \(M_4\)

答案

\(p=2>1\) 知积分收敛,且尾部为 \(1/R\)。要使尾部不超过 \(0.005\),可取 \(R=200\)。因 \(f^{(4)}(x)=120x^{-6}\),在 \([1,200]\) 上可取 \(M_4=120\)。随后令

\[ \frac{199}{180}\,120\left(\frac{199}{n}\right)^4\le0.005 \]

并把 \(n\) 向上取成正偶数。若求积状态达标, \(|I-Q_{200}|\le1/200+0.005=0.01\)

综合练习 3:Gaussian 的另一截断点

\(\int_0^\infty e^{-x^2}dx\)\(R=2\)。写出尾部界和本单元粗 \(M_4\),但不必 计算网格数。

答案

比较证明给出

\[ \int_2^\infty e^{-x^2}dx\le\frac{e^{-4}}4. \]

\([0,2]\) 上可取 \(M_4=16\cdot2^4+48\cdot2^2+12=460\)。因此任一正偶数 \(n\) 的有限求积界为

\[ |E_S|\le\frac2{180}\,460\left(\frac2n\right)^4, \]

总误差不超过这两项之和。

综合练习 4:振荡尾部的责任边界

设前一单元已经证明某振荡积分收敛并有 \(\left|\int_R^\infty f\right|\le2/R\)。若总容差为 \(0.02\),给尾部预算 \(0.01\),至少怎样选 \(R\)?余下工作是什么?

答案

\(2/R\le0.01\)\(R\ge200\)。然后要在有限区间上选求积规则,证明该规则 所需的全区间导数界,并使有限求积界不超过余下的 \(0.01\)。最后写出

\[ |I-Q_R|\le2/R+\varepsilon_{\mathrm{quad}}\le0.02. \]

不能把正函数专用的尾部公式直接套在振荡函数上。

诊断练习 1:漏掉存在性

某报告只有“取 \(R=100\),两个网格结果相同到六位小数”。指出至少两个缺口。

答案

第一,没有先证明反常积分收敛;第二,没有证明 \(R\) 右侧的尾部界;第三,相邻 网格差不是有限求积严格界;第四,没有说明导数界与舍入误差边界。至少应补齐前 三项,才能形成解析总误差证书。

诊断练习 2:导数界区间错误

计算区间是 \([0,10]\),但报告只证明 \([0,1]\)\(|f^{(4)}|\le3\),随后把 \(M_4=3\) 传入程序。问题在哪里?

答案

Simpson 定理需要整个求积区间 \([0,10]\) 上的导数界。局部证明无法控制其余九 个单位长度。应证明覆盖完整区间的新界,再重新计算网格和误差;原有状态不能作为 证书。

诊断练习 3:预算状态误读

总容差 \(10^{-5}\),尾部界 \(4\times10^{-6}\),程序求积界 \(9\times10^{-6}\) 且返回 budget_exhausted。报告称“误差约为 \(9\times10^{-6}\),目标基本达到”。改写为严谨结论。

答案

已证明的总界是

\[ 4\times10^{-6}+9\times10^{-6}=1.3\times10^{-5}, \]

大于目标。应报告“当前总误差证书为 \(1.3\times10^{-5}\),预算耗尽,尚未证明 \(10^{-5}\) 目标”。不能删掉尾部项,也不能用“约为”把上界改成估计值。

边界练习 1:奇数网格预算

解析不等式给出 \(n\ge31.2\),但最大允许网格数为 \(33\)。共享 Simpson 预算程序 最多能用多少段?这是否自动达标?

答案

Simpson 要求正偶数网格。最小达标候选是 \(32\),最大允许的偶数网格也是 \(32\)。程序可用 \(32\) 段;只有把实际解析 error_bound 与目标比较后才能 确认 target_met,不能仅凭最大预算 \(33\) 自动判断。

边界练习 2:零四阶导数

截断区间上的被积函数是三次多项式,且尾部另有严格界。有限求积需要怎样的网格?

答案

三次多项式满足 \(M_4=0\),一个 Simpson 面板即 \(n=2\) 已精确,有限求积界为 零。总误差只剩已证明的尾部界。仍需先有反常收敛与尾部证明;有限区间精确不等于 原反常积分自动收敛。

核验练习 1:精确值回验

指数基准得到 \(Q_{10}=0.9999546\),解析总界为 \(9.5\times10^{-5}\)。怎样使用 精确值 \(1\) 做独立核验?

答案

计算实际基准偏差

\[ |1-Q_{10}|=4.54\times10^{-5}<9.5\times10^{-5}. \]

这与证书相容,可帮助发现实现或抄写错误;但证书仍来自尾部界、导数界与求积定理, 不是来自已知精确值。

核验练习 2:函数求值次数

复合 Simpson 在 \(n=84\) 时应使用多少个不同节点?为什么记录这个数字?

答案

节点为 \(x_0,\ldots,x_{84}\),共 \(85\) 个。记录函数求值次数可以核验端点是否 重复、网格数是否被程序悄然改变,也便于比较预算成本;它不替代误差证明。

核验练习 3:第二种规则交叉检查

同一截断区间上,Simpson 结果与梯形结果都落在各自已证明的误差区间内。怎样交叉 检查最终结论?

答案

分别写出两条有限求积界,并给二者加上同一个已证明尾部界。若两个带证书区间相交, 结果彼此相容;若不相交,至少有导数界、实现、参数或算术出错。最终仍报告所选方法 的三角不等式总界,不把两结果之差冒充更小的严格界。

常见误区与后续

  • 还没证明反常积分收敛,就把截断网格稳定当成存在性;
  • 只给总容差,不写尾部误差预算与求积误差预算;
  • 选择了 \(R\),却没有证明该点之后的尾部界;
  • 只抽样导数,未证明整个有限区间上的导数界;
  • 忘记把 Simpson 网格向上调整为正偶数;
  • 忽略 budget_exhausted,或把当前有效界说成目标已经达到;
  • 把相邻网格差、图像稳定或精确值回验当成总误差证书;
  • 把解析截断与求积界说成同时覆盖浮点舍入误差。

本章止于逐端点 Riemann 反常积分、解析尾部界和固定复合求积证书。无穷级数判别、 幂级数展开、一致收敛、Euler–Maclaurin、Romberg、自适应求积、Gauss 求积、 Lebesgue 积分、含参反常积分、Gamma 函数与 Beta 函数都留给后续部分。