Simpson公式(辛普森积分法)是一种数值积分方法,它通过将被积函数近似为二次多项式(抛物线)来估算定积分的值。
与梯形法则不同,Simpson公式 利用了区间端点和中点三个点的信息,构造了一条通过这三点的抛物线。这条抛物线与x轴围成的面积即为积分的近似值。
Simpson公式 假设在任意两个子区间上,被积函数可以用一个二次多项式较好地逼近。这意味着它非常适合处理光滑且曲率变化不大的函数。
Simpson公式 的截断误差与 h^4 成正比(h为步长),这意味着它具有四阶精度。相比之下,梯形法则仅为二阶精度,因此在相同步长下,Simpson公式 的精度高出许多。
几何上,Simpson公式 计算的是由点 (a, f(a)), ((a+b)/2, f((a+b)/2)), (b, f(b)) 确定的抛物线弓形面积。这种近似方式比直线近似(梯形)更贴合曲线。
基本 Simpson公式 适用于单个区间 [a, b]。我们选取三个点:x_0 = a, x_1 = (a+b)/2, x_2 = b。构造拉格朗日二次插值多项式 L_2(x),然后对 L_2(x) 在 [a, b] 上积分。
推导过程如下:
L_2(x) = f(x_0) [(x-x_1)(x-x_2)] / [(x_0-x_1)(x_0-x_2)]
这个公式也被称为 1/3 法则,因为系数中出现了 1/6 和 4/6=2/3 等比例关系。
当积分区间较大或被积函数变化剧烈时,单一的基本 Simpson公式 精度不足。此时需将区间 [a, b] 分为 n 个偶数个子区间,步长 h = (b-a)/n。
复合 Simpson 公式 表达式:
其中,奇数下标项系数为 4,偶数下标项(除首尾)系数为 2。这种结构保证了在每个子区间对上应用基本 Simpson公式。
| 节点类型 | 索引 i | 系数 | 说明 |
|---|---|---|---|
| 端点 | i=0, n | 1 | 仅出现一次 |
| 奇数点 | i=1, 3, ..., n-1 | 4 | 每个子区间对中点 |
| 偶数点 | i=2, 4, ..., n-2 | 2 | 相邻子区间公共点 |
Simpson公式 的截断误差 R_n 由下式给出:
关键点:
James Gregory 在《Vera, certa & nova constructio quadraturae circuli et hyperbolae》中首次提出了类似的抛物线积分法则,但未广泛传播。
Thomas Simpson 在其著作《Essays of Several Important Mathematical Subjects》中独立发现并推广了该方法,因此得名“Simpson公式”。
随着微积分理论的发展,数学家们开始深入分析数值积分的误差界,确立了 Simpson公式 在数值分析中的地位。
计算机的出现使得复合 Simpson公式 成为工程计算的标准工具之一,广泛应用于物理、金融和信号处理领域。
在期权定价模型中,某些路径依赖型期权的价格计算涉及高维积分。Simpson公式 常被用于蒙特卡洛模拟后的数值积分步骤,以提高计算效率。
计算粒子在势阱中的波函数归一化常数时,需要积分 |ψ(x)|^2。Simpson公式 因其高精度,常用于求解薛定谔方程的数值解。
在计算信号的总能量或功率时,需要对信号平方进行积分。Simpson公式 提供了一种离散化的精确计算方法,优于简单的矩形法。
Simpson公式 利用二次抛物线拟合被积函数,而梯形公式仅利用直线。对于光滑函数,Simpson公式 的截断误差阶为O(h^4),而梯形公式为O(h^2)。这意味着在相同步长下,Simpson公式 通常能提供高得多的精度,尤其是在函数曲率变化较大时。
复合 Simpson公式 的基本单元是三个点(两个子区间),通过这三点确定一条抛物线。为了覆盖整个积分区间[a, b],我们需要将区间划分为偶数个子区间,这样才能保证每个基本单元都能完整配对,从而应用 Simpson公式 系数(1, 4, 2, ..., 4, 1)。如果n是奇数,最后一段将无法构成完整的Simpson单元,导致公式失效或精度下降。
虽然 Simpson公式 的截断误差随步长减小而降低,但步长过小会增加计算节点数,从而累积浮点数舍入误差。最佳实践是进行自适应步长控制:先计算较大步长的结果,再减半步长计算,若两者差异小于预设容差,则停止迭代。此外,使用双精度浮点数(double)而非单精度(float)是必须的。
不能。Simpson公式 是一种数值积分方法,专门用于计算定积分(即求面积)。不定积分是求原函数,通常通过解析方法(如换元法、分部积分法)解决。数值方法无法直接给出解析形式的原函数。
以下是使用 Python 实现复合 Simpson公式 的简单代码:
import math
def simpson(f, a, b, n):
"""
使用复合Simpson公式计算定积分
:param f: 被积函数
:param a: 积分下限
:param b: 积分上限
:param n: 子区间数 (必须为偶数)
:return: 积分近似值
"""
if n % 2 != 0:
raise ValueError("n must be an even number")
h = (b - a) / n
sum_val = f(a) + f(b)
for i in range(1, n, 2):
sum_val += 4 f(a + i h)
for i in range(2, n, 2):
sum_val += 2 f(a + i h)
return sum_val h / 3
示例:计算 e^(-x^2) 在 [0, 1] 上的积分
def integrand(x):
return math.exp(-x2)
result = simpson(integrand, 0, 1, 100)
print(f"积分结果: {result}")