自适应积分(Adaptive Simpson):基于辛普森公式与误差估计,按区间局部复杂度自适应细分,实现对 ∫_a^b f(x) dx 的自动精度控制。通常较固定步长更高效与稳健。

Description: Adaptive Simpson integration with automatic error control using recursive subdivision and Simpson error estimate. Time: Data-dependent; typically near O(n) evals for smooth f, worst-case large Status: tested

  • 函数/接口(据实现)

    • double simpson_once(double a, double b, double fa, double fm, double fb)
      • 单次辛普森:S = (b−a)/6 · (fa + 4·fm + fb),其中 m=(a+b)/2。
    • double adaptiveSimpson(double a, double b, double eps, auto f, int maxDepth=20)
      • 返回 ∫_a^b f(x) dx 的近似值,绝对误差控制在 eps 左右;若达到最大深度则返回当前估计。
    • 常用包装 integrate(f, a, b, eps):内部缓存 f 在端点与中点的值,避免重复计算。
  • 核心算法(递归 ASR)

    1. 记 m=(a+b)/2,l=(a+m)/2,r=(m+b)/2;已知 fa=f(a), fm=f(m), fb=f(b)。
    2. 计算:
      • S = Simpson(a,b,fa,fm,fb)
      • Sl = Simpson(a,m,fa,f(l),fm)
      • Sr = Simpson(m,b,fm,f(r),fb)
      • err ≈ |Sl + Sr − S|
    3. 判定:
      • 若 err ≤ 15·eps,则返回 Sl + Sr + (Sl + Sr − S)/15(Richardson 外推修正)。
      • 否则对 [a,m] 与 [m,b] 递归,分别用 eps/2,并将结果相加。
    4. 终止:达到 maxDepth 时返回 Sl + Sr(或直接 S,视实现)。
  • 误差与稳定性

    • 误差估计基于辛普森局部误差的 15 倍关系;(Sl+Sr−S)/15 作为误差补偿项。
    • 对剧烈振荡或奇异点,递归会在问题区域细分更多层次;必要时拆分区间或变量代换。
    • 浮点稳定:累加使用 Kahan 或排序累加可减小损失;对非常大的区间可先线性缩放。
  • 复杂度

    • 与函数复杂度相关;平滑区域较少细分,评估次数远小于均匀网格。
    • 最坏情形(处处尖峰/强振荡)可能接近遍历细分到 maxDepth。
  • 实用建议

    • 选择 eps 为目标绝对误差;需要相对误差时可按 |I| 自适应设 eps = rel · (|S|+1)。
    • 对不定/广义积分(无界区间或端点奇异)先做变换:如 x=t/(1−t) 将 [0,∞) 映到 [0,1)。
    • 并行化:粗粒度上可并行两个子区间,但要注意函数评估缓存共享与栈深限制。

关联节点