自适应辛普森积分法的误差控制与递归实现
字数 1095 2025-10-29 23:21:20
自适应辛普森积分法的误差控制与递归实现
题目描述
计算定积分 ∫ₐᵇ f(x)dx,其中 f(x) = sin(x²)(振荡函数)。要求使用自适应辛普森积分法,通过递归划分区间和误差估计,使结果精度达到 10⁻⁶。
解题过程
-
基础辛普森公式
- 在区间 [a, b] 上,辛普森公式近似为:
S(a, b) = (b - a)/6 · [f(a) + 4f((a+b)/2) + f(b)]
此公式对三次以下多项式精确成立。
- 在区间 [a, b] 上,辛普森公式近似为:
-
误差控制原理
- 将 [a, b] 等分为两个子区间 [a, m] 和 [m, b](m = (a+b)/2),分别应用辛普森公式:
S₁ = S(a, m), S₂ = S(m, b), S_total = S₁ + S₂ - 若 |S_total - S(a, b)| ≤ 15·ε₀(ε₀ 为预设容差,如 10⁻⁶),则认为 S_total 足够精确;否则递归划分子区间。
- 将 [a, b] 等分为两个子区间 [a, m] 和 [m, b](m = (a+b)/2),分别应用辛普森公式:
-
递归实现步骤
- 步骤1:定义递归函数
adaptive_simpson(a, b, ε, f),计算当前区间 [a, b] 的积分。 - 步骤2:计算中点 m = (a+b)/2,并求出:
S_whole = S(a, b)
S_left = S(a, m), S_right = S(m, b)
S_split = S_left + S_right - 步骤3:误差估计 δ = |S_split - S_whole|。若 δ ≤ 15ε,返回 S_split 作为积分值(Richardson 外推可提升精度至 O(h⁶))。
- 步骤4:若 δ > 15ε,递归计算两个子区间:
返回adaptive_simpson(a, m, ε/2, f) + adaptive_simpson(m, b, ε/2, f)
(容差 ε/2 确保子区间误差累积不超过总容差)。
- 步骤1:定义递归函数
-
应用示例:f(x) = sin(x²) 在 [0, 2] 的积分
- 初始化 a=0, b=2, ε=1e-6。
- 第一层计算:S_whole 与 S_split 差异较大,触发递归。
- 递归深入振荡频繁区域(如 x>1 时 sin(x²) 周期缩短),自动细化步长。
- 终止条件:所有子区间满足误差要求,总积分值收敛至 0.804776(精确到 10⁻⁶)。
-
关键优势
- 自适应局部加密避免全局均匀划分,高效处理振荡函数。
- 误差控制避免过度计算,平衡精度与效率。
总结:该方法通过递归划分和误差比较,动态优化区间划分,特别适合像 sin(x²) 这样振荡频繁的被积函数。