跳到内容

第 10 卷 / 第 11 章 / 第 2 课

11.2 积分与数值积分:从局部速率到累计总量 ​

监控系统每分钟记录一次请求速率,业务却问一天处理了多少请求;概率模型给出的是密度,产品却关心某个区间内发生事件的概率。两类问题都在把局部速率累积成总量。

本课目标 ​

  • 区分不定积分与定积分;
  • 用微积分基本定理连接导数和积分;
  • 理解概率密度、累计量与面积的关系;
  • 比较矩形法、梯形法和采样误差。

1. 定积分是和的极限 ​

取 a<b,把区间 [a,b] 切成许多小段,在每段取一个样本点 xi∗,形成黎曼和:

∑i=1nf(xi∗)Δxi.

当最大子区间长度趋于零,若所有取点方式的和趋向同一极限,就得到定积分:

∫abf(x)dx.

若 f(x)≥0,它就是曲线与横轴间的面积。函数在横轴下方时贡献为负,因此定积分不是无条件的几何面积。

单位检查很有帮助:若 f(t) 的单位是“请求/秒”,dt 的单位是秒,积分结果就是请求数。

2. 不定积分是一族原函数 ​

若 F′(x)=f(x),则 F 是 f 的一个原函数:

∫f(x)dx=F(x)+C.

C 不能省略,因为导数会消去任意常数。定积分则由上下限给出一个数,不需要再加任意常数。

微积分基本定理的一组常用充分条件是:f 在闭区间 [a,b] 连续,且 F′=f。此时:

∫abf(x)dx=F(b)−F(a),F′=f.

它并不是说所有函数都有容易写出的初等原函数。许多实际积分只能用特殊函数或数值方法计算。

3. 概率密度不是点概率 ​

本节假设随机变量 X 存在密度,其密度 p(x) 满足:

p(x)≥0,∫−∞∞p(x)dx=1.

区间概率为:

P(a≤X≤b)=∫abp(x)dx.

在有密度的分布中,单点概率 P(X=x) 必为零,但密度 p(x) 可以大于零,甚至可能大于 1。密度有单位,概率没有单位;不能把某点的密度值直接叫作“这个值发生的概率”。

累计分布函数是:

F(x)=P(X≤x)=∫−∞xp(t)dt.

在密度 p 连续的点,有 F′(x)=p(x);一般密度下等式几乎处处成立,不能随意把它加强成逐点相等。密度在单个点上的值可以改动而不改变任何区间概率。此外,无原子的连续分布未必有密度,这里没有覆盖那种情形。

例如 X 在 [0,0.5] 上均匀分布时,区间内密度为 2,而 P(0≤X≤0.25)=2×0.25=0.5。密度大于 1 没有冲突,因为真正受 1 限制的是积分后的概率。

4. 采样数据只能近似积分 ​

若只有离散监控点,可以用梯形法:

∫abf(x)dx≈∑if(ti)+f(ti+1)2(ti+1−ti).
python
from collections.abc import Sequence
from math import fsum, isfinite

def trapezoidal_integral(
    times: Sequence[float], rates: Sequence[float], max_gap=None
) -> float:
    if len(times) != len(rates) or len(times) < 2:
        raise ValueError("need equal lengths and at least two points")
    if not all(isfinite(x) for x in times) or not all(isfinite(r) for r in rates):
        raise ValueError("observations must be finite")
    gaps = [right - left for left, right in zip(times, times[1:])]
    if any(gap <= 0 for gap in gaps):
        raise ValueError("timestamps must be strictly increasing")
    if max_gap is not None:
        if not isfinite(max_gap) or max_gap <= 0:
            raise ValueError("max_gap must be positive and finite")
        if any(gap > max_gap for gap in gaps):
            raise ValueError("gap exceeds the interpolation limit")
    return fsum((left / 2 + right / 2) * gap
                for left, right, gap in zip(rates, rates[1:], gaps))

seconds = [0, 60, 120, 180]
requests_per_second = [10, 14, 13, 9]
print(trapezoidal_integral(seconds, requests_per_second, max_gap=90))  # 2190.0

这个结果依赖采样假设:相邻观测之间用直线连接。若中间发生尖峰,低频采样可能完全错过。增加算法精度不能弥补原始数据没有观测到的变化。

这份 Python 3.9+ 代码得到 180 秒内约 2,190 次请求,允许不等距采样,但拒绝 NaN、无穷值和非递增时间戳。max_gap=90 明确拒绝跨越超过 90 秒的缺口做插值;它没有偷偷把缺测当零。这个阈值要由采集频率和业务容忍度确定,练习可改成其他策略。有限输入也不保证任意巨大数值的中间运算都不会溢出。

常见数值积分方法包括:

以下阶数比较默认在固定区间上等距加密且函数足够光滑;中点法和梯形法通常是二阶,复合 Simpson 法在分段数为偶数、四阶导数有界时是四阶。自适应算法的误差估计也可能漏掉未采到的窄峰。

方法区间内假设特点
左/右矩形法函数值保持不变简单;单调函数可判断偏差方向
中点法用中点代表区间通常比端点矩形更准
梯形法相邻点间线性变化适合已有离散样本
Simpson 法局部二次近似对光滑函数精度更高
自适应积分在难点处细分控制估计误差,但成本变化

5. 误差来自不止一个地方 ​

数值积分至少要区分:

  • 建模误差:真实过程并不等于选定函数;
  • 采样误差:观测频率不足,或忽略了实际不等距的时间间隔;
  • 离散化误差:有限分割近似连续积分;
  • 舍入误差:浮点累计造成的偏差。

缩小步长通常降低离散化误差,却增加计算量和浮点运算次数。选择方法时要结合函数平滑性、误差目标和计算预算,而不是只比较公式阶数。

对 x² 在 [0,1] 上的积分,真值为 1/3。下面用 Python 3 精确分数计算有符号误差,只在显示时转成浮点数:

python
from fractions import Fraction as F

for n in [4, 8, 16]:
    h = F(1, n)
    left = h * sum((i * h) ** 2 for i in range(n))
    midpoint = h * sum(((i + F(1, 2)) * h) ** 2 for i in range(n))
    trapezoid = left + h / 2  # f(1) - f(0) = 1
    print(n, f"{float(left-F(1,3)):.6f}",
          f"{float(midpoint-F(1,3)):.6f}", f"{float(trapezoid-F(1,3)):.6f}")
# 4 -0.114583 -0.005208 0.010417
# 8 -0.059896 -0.001302 0.002604
# 16 -0.030599 -0.000326 0.000651

分段数翻倍时,中点与梯形误差缩为四分之一。本例梯形误差恰为 1/(6n²),中点误差为 -1/(12n²);左矩形误差主要按 1/n 缩小。误差阶描述加密趋势,不保证任意函数、任意网格都遵循这组数字。

6. 在软件系统中看见积分 ​

  • 请求速率随时间积分得到请求总数;
  • 功率随时间积分得到能量;
  • 概率密度在区间积分得到概率;
  • 速度随时间积分得到位移;
  • 连续现金流贴现后积分得到现值。

有些系统用计数器直接记录累计量,比对速率曲线再积分更可靠。但计数器会重置、溢出或丢失,仍需处理数据质量。数学工具不能替代对采集机制的理解。

常见误区 ​

  • 积分永远是正面积:定积分带符号。
  • 密度值就是概率:连续分布的区间概率才由密度积分得到。
  • 采样更密就一定更准:传感器偏差和模型误差不会自动消失。
  • 有解析公式就无需数值考虑:公式在浮点实现中仍可能溢出、消减或精度不足。

练习 ​

  1. 由速度 v(t)=3t2 求 t=0 到 t=2 的位移。
  2. 用矩形法和梯形法近似 ∫01x2dx,比较不同步长的误差。
  3. 解释为什么[0,1] 上的均匀分布落在 [0,0.5] 的概率是 0.5,但任一单点概率是零。
  4. 为监控积分代码增加缺测区间策略,并说明它隐含的业务假设。

小结 ​

导数把整体过程切到局部,积分把局部速率重新累积为总量。计算机面对的是有限样本和有限精度,因此数值积分的答案总要连同采样方式、近似方法与误差假设一起解释。

后续优化内容会把局部坡度用于选择更新方向,并继续处理步长、噪声与停止条件。

Built with VitePress | Software Systems Atlas