辛普森法,这可是数值积分领域的一员猛将。它之所以能这么出色,关键就在于它对被积函数(也就是我们要求积分的那个函数)的逼近方式。简单来说,辛普森法不像它的一些前辈那样,只是用简单的直线(梯形法则)或者水平线(中点法则)来近似曲线,而是更进一步,用了更平滑、更贴合的 二次多项式(抛物线) 来逼近被积函数在每个小区间上的形状。
这就引出了我们今天的主角——辛普森法函数值的系数。为什么它们是 1, 4, 1, 4, 1... 这样一种奇特的组合呢?要弄明白这一点,我们需要从辛普森法的基本原理出发,一步一步拆解。
辛普森法的“野心”:用抛物线来玩转积分
我们知道,要求一个函数的定积分,最直接的想法就是把积分区间分成很多小份,然后在每个小份里把函数的形状近似成一个简单的几何图形,然后把这些小图形的面积加起来。梯形法则就是用梯形,中点法则用矩形。
辛普森法就不甘于此了。它看到梯形法则虽然不错,但如果函数本身是弯曲的,梯形就有点“硬朗”了,总是会留下一些误差。辛普森法想的是,能不能用一个更灵活的图形来贴合这个弯曲的函数呢?
它就盯上了 抛物线。为什么是抛物线?因为一条抛物线(也就是一个二次多项式)可以很自然地拟合三个点。如果我们在每个小区间里取三个点来定义一条抛物线,这条抛物线就可以比直线或水平线更好地描述函数在该区间内的变化趋势,从而减小积分误差。
怎么用抛物线来逼近呢?——考察三个连续小区间
辛普森法的核心思想是 “以三点定抛物线”。但它不是孤立地看一个区间,而是同时考虑 三个连续的小区间。为什么是三个呢?这样才能有效地“拼接”起来,形成一个更平滑的整体逼近,并且避免奇数个区间带来的边界问题。
假设我们把整个积分区间 $[a, b]$ 分成了 $n$ 个等宽的小区间,每个小区间宽度为 $h = (ba)/n$。为了方便说明,我们假设 $n$ 是 偶数,这样我们就可以把区间两两配对,总共形成 $n/2$ 个“大组”,每组包含三个节点。
我们来看其中一组,它包含了四个节点:$x_0, x_1, x_2, x_3$。这些节点之间的距离都是 $h$。
$x_0 = a$
$x_1 = a + h$
$x_2 = a + 2h$
$x_3 = a + 3h$
辛普森法做的就是,在区间 $[x_0, x_3]$ 上,用一条二次多项式 $P(x)$ 来近似被积函数 $f(x)$。这条抛物线 $P(x)$ 的关键在于,它必须通过这三个点:$(x_0, f(x_0))$, $(x_1, f(x_1))$, $(x_2, f(x_2))$。
等等,这里有个小小的误会。更准确地说,在 标准辛普森法 中,我们是将两个连续的子区间(例如 $[x_0, x_1]$ 和 $[x_1, x_2]$)合在一起,然后在这三个节点 $x_0, x_1, x_2$ 处用抛物线来近似函数 $f(x)$。也就是说,在区间 $[x_0, x_2]$ 上,函数 $f(x)$ 被一个抛物线 $P(x)$ 所近似,而这个抛物线由 $f(x_0), f(x_1), f(x_2)$ 这三个函数值确定。
那么,我们如何找到这条抛物线在 $[x_0, x_2]$ 上的积分呢?这里就要用到 拉格朗日插值多项式 的思想了。
拉格朗日插值与抛物线积分的推导
我们想找到一个二次多项式 $P(x)$,使得 $P(x_0) = f(x_0)$, $P(x_1) = f(x_1)$, $P(x_2) = f(x_2)$。
为了简化推导,我们进行一个变量替换。令 $xi = (x x_1) / h$。那么:
当 $x = x_0$ 时,$xi = (x_0 x_1) / h = h / h = 1$
当 $x = x_1$ 时,$xi = (x_1 x_1) / h = 0 / h = 0$
当 $x = x_2$ 时,$xi = (x_2 x_1) / h = h / h = 1$
现在,我们将 $x$ 用 $xi$ 来表示:$x = x_1 + xi h$。
我们令 $g(xi) = f(x_1 + xi h) = f(x)$。
我们需要找到一个关于 $xi$ 的二次多项式 $Q(xi)$,使得 $Q(1) = g(1) = f(x_0)$, $Q(0) = g(0) = f(x_1)$, $Q(1) = g(1) = f(x_2)$。
使用拉格朗日插值公式,我们可以构造这个二次多项式 $Q(xi)$:
$Q(xi) = f(x_0) frac{(xi 0)(xi 1)}{(1 0)(1 1)} + f(x_1) frac{(xi (1))(xi 1)}{(0 (1))(0 1)} + f(x_2) frac{(xi (1))(xi 0)}{(1 (1))(1 0)}$
化简一下各个系数项:
第一项:$f(x_0) frac{xi(xi 1)}{(1)(2)} = f(x_0) frac{xi^2 xi}{2}$
第二项:$f(x_1) frac{(xi + 1)(xi 1)}{(1)(1)} = f(x_1) frac{xi^2 1}{1} = f(x_1)(xi^2 1)$
第三项:$f(x_2) frac{(xi + 1)xi}{(2)(1)} = f(x_2) frac{xi^2 + xi}{2}$
所以,$Q(xi) = frac{1}{2} f(x_0) (xi^2 xi) f(x_1)(xi^2 1) + frac{1}{2} f(x_2) (xi^2 + xi)$
现在我们要计算的是在 $[x_0, x_2]$ 上的积分,对应的 $xi$ 的范围是 $[1, 1]$。
$int_{x_0}^{x_2} f(x) dx = int_{1}^{1} f(x_1 + xi h) cdot h dxi = h int_{1}^{1} g(xi) dxi$
我们用 $Q(xi)$ 来近似 $g(xi)$:
$h int_{1}^{1} Q(xi) dxi = h int_{1}^{1} left[ frac{1}{2} f(x_0) (xi^2 xi) f(x_1)(xi^2 1) + frac{1}{2} f(x_2) (xi^2 + xi)
ight] dxi$
现在我们来计算积分:
$int_{1}^{1} (xi^2 xi) dxi = left[ frac{xi^3}{3} frac{xi^2}{2}
ight]_{1}^{1} = (frac{1}{3} frac{1}{2}) (frac{1}{3} frac{1}{2}) = frac{1}{3} frac{1}{2} + frac{1}{3} + frac{1}{2} = frac{2}{3}$
$int_{1}^{1} (xi^2 1) dxi = left[ frac{xi^3}{3} xi
ight]_{1}^{1} = (frac{1}{3} 1) (frac{1}{3} (1)) = frac{1}{3} 1 + frac{1}{3} 1 = frac{2}{3} 2 = frac{4}{3}$
$int_{1}^{1} (xi^2 + xi) dxi = left[ frac{xi^3}{3} + frac{xi^2}{2}
ight]_{1}^{1} = (frac{1}{3} + frac{1}{2}) (frac{1}{3} + frac{1}{2}) = frac{1}{3} + frac{1}{2} + frac{1}{3} frac{1}{2} = frac{2}{3}$
将这些结果代回积分表达式:
$h left[ frac{1}{2} f(x_0) (frac{2}{3}) f(x_1) (frac{4}{3}) + frac{1}{2} f(x_2) (frac{2}{3})
ight]$
$= h left[ frac{1}{3} f(x_0) + frac{4}{3} f(x_1) + frac{1}{3} f(x_2)
ight]$
$= frac{h}{3} [f(x_0) + 4f(x_1) + f(x_2)]$
Bingo!我们看到了熟悉的系数:1, 4, 1。这是辛普森法在 两个连续小区间(覆盖三个节点)上的积分贡献。
辛普森法的“叠加”与最终系数
辛普森法将整个积分区间 $[a, b]$ 分成 $n$ 个小区间($n$ 为偶数),也就是 $n/2$ 个“组”,每组包含两个子区间。
第一个组:覆盖 $[x_0, x_2]$,积分贡献为 $frac{h}{3} [f(x_0) + 4f(x_1) + f(x_2)]$
第二个组:覆盖 $[x_2, x_4]$,积分贡献为 $frac{h}{3} [f(x_2) + 4f(x_3) + f(x_4)]$
第三个组:覆盖 $[x_4, x_6]$,积分贡献为 $frac{h}{3} [f(x_4) + 4f(x_5) + f(x_6)]$
...
最后一个组:覆盖 $[x_{n2}, x_n]$,积分贡献为 $frac{h}{3} [f(x_{n2}) + 4f(x_{n1}) + f(x_n)]$
现在,我们将所有这些贡献加起来,就得到了整个区间 $[a, b]$ 的近似积分值:
$int_a^b f(x) dx approx frac{h}{3} [f(x_0) + 4f(x_1) + f(x_2)] + frac{h}{3} [f(x_2) + 4f(x_3) + f(x_4)] + frac{h}{3} [f(x_4) + 4f(x_5) + f(x_6)] + dots + frac{h}{3} [f(x_{n2}) + 4f(x_{n1}) + f(x_n)]$
把 $frac{h}{3}$ 提出来,并合并同类项:
$frac{h}{3} [f(x_0) + 4f(x_1) + (f(x_2) + f(x_2)) + 4f(x_3) + (f(x_4) + f(x_4)) + 4f(x_5) + dots + (f(x_{n2}) + f(x_{n2})) + 4f(x_{n1}) + f(x_n)]$
注意,中间节点的系数是如何累加的:
$f(x_0)$ 只出现在第一个组的开头,系数为 1。
$f(x_1)$ 只出现在第一个组的中间,系数为 4。
$f(x_2)$ 出现在第一个组的结尾,也出现在第二个组的开头,所以系数是 $1 + 1 = 2$。
$f(x_3)$ 只出现在第二个组的中间,系数为 4。
$f(x_4)$ 出现在第二个组的结尾,也出现在第三个组的开头,所以系数是 $1 + 1 = 2$。
以此类推,我们会发现一个规律:
首项 $f(x_0)$ 的系数是 1。
末项 $f(x_n)$ 的系数是 1。
所有 奇数下标 的内部节点 ($f(x_1), f(x_3), f(x_5), dots, f(x_{n1})$) 的系数是 4。
所有 偶数下标 的内部节点 ($f(x_2), f(x_4), dots, f(x_{n2})$) 的系数是 2。
所以,辛普森法的完整公式看起来是这样的:
$int_a^b f(x) dx approx frac{h}{3} [f(x_0) + 4f(x_1) + 2f(x_2) + 4f(x_3) + 2f(x_4) + dots + 2f(x_{n2}) + 4f(x_{n1}) + f(x_n)]$
这个公式里的系数 1, 4, 2, 4, 2, ..., 2, 4, 1 就是辛普森法的系数了!
那为什么有时候会看到 1, 4, 1, 4, 1 的写法呢?
你可能会问,上面推导出来的系数是 1, 4, 2, 4, 2, ...,为什么很多地方介绍辛普森法时,会简化成 1, 4, 1, 4, 1 的形式呢?
这里的原因是,有时为了方便记忆和表述,人们会 分组来看。辛普森法的基本单元是处理 三个节点(两个小区间) 的情况,其系数就是 1, 4, 1。然后把这些基本单元依次叠加起来。
当我们将区间 $[x_0, x_2]$ 的积分记为 $S_1 = frac{h}{3} (f(x_0) + 4f(x_1) + f(x_2))$,
将区间 $[x_2, x_4]$ 的积分记为 $S_2 = frac{h}{3} (f(x_2) + 4f(x_3) + f(x_4))$,
等等。
如果我们将这相邻两个基本单元(即 $[x_0, x_4]$ 这四个节点)的积分加起来,会是什么样子?
$S_1 + S_2 = frac{h}{3} (f(x_0) + 4f(x_1) + f(x_2)) + frac{h}{3} (f(x_2) + 4f(x_3) + f(x_4))$
$= frac{h}{3} (f(x_0) + 4f(x_1) + 2f(x_2) + 4f(x_3) + f(x_4))$
你看,在两个基本单元拼接的地方(也就是 $f(x_2)$ 这个节点),它的系数是 2。
而每个基本单元内部的节点($f(x_1)$ 和 $f(x_3)$),系数依然是 4。首尾节点($f(x_0)$ 和 $f(x_4)$)的系数是 1。
所以,当我们连续考虑一组 两个相邻的基本单元 时,系数就变成了 1, 4, 2, 4, 1。
如果你将这种 两个单元一组 的模式继续叠加下去,那么:
第一个单元的开头 $f(x_0)$ 是 1。
第一个单元内部的 $f(x_1)$ 是 4。
第一个单元的结尾 $f(x_2)$ 和第二个单元的开头 $f(x_2)$ 相加是 2。
第二个单元内部的 $f(x_3)$ 是 4。
第二个单元的结尾 $f(x_4)$ 和第三个单元的开头 $f(x_4)$ 相加是 2。
以此类推,直到最后一个单元的末尾节点。
因此,最严谨的系数序列是 1, 4, 2, 4, 2, ..., 2, 4, 1。
至于为什么有时会看到 1, 4, 1, 4, 1 的简化写法,这通常是指辛普森法的基本规则:
每三个节点构成一个抛物线拟合的单元。
这个单元内的系数是 1, 4, 1。
然后将所有这样的单元的积分贡献相加。
当人们这样描述时,往往是强调了 基本单元的结构,而没有明确指出 节点在叠加过程中系数累加 的细节。但请注意,在实际应用公式时,1, 4, 2, 4, 2, ..., 2, 4, 1 这个完整序列才是正确的。
如果你想用一个更简洁的方式来记忆,可以这样想:
1. 首尾项 的系数总是 1。
2. 中间的内部节点,交替出现系数 4 和 2。具体来说,奇数下标的节点(第一组的第一个内部节点 $x_1$,第二组的第一个内部节点 $x_3$ 等等)系数是 4。偶数下标的节点(第一组的第二个内部节点 $x_2$,第二组的第二个内部节点 $x_4$ 等等)系数是 2。
核心在于:辛普森法利用二次多项式来逼近函数,而这个二次多项式的积分在特定节点上的贡献(经过变换和累加)就形成了这个有规律的系数序列。这个序列的出现,是抛物线积分特性的自然结果。