高斯求积
高斯求积(Gaussian quadrature)同时选择积分节点和权重,使给定节点数的求积公式对尽可能高次数的多项式精确。对正权函数的积分, 点高斯公式可精确积分次数至多 的多项式;节点取相应正交多项式的零点。它不同于先固定等距节点、再计算权重的Newton—Cotes公式。
最简单的非平凡例子是在 上用两个节点。取节点 、权重均为一,得到 它对三次及以下多项式精确,却只评价两次函数。
两节点公式的矩匹配
利用区间对称性,设节点为 、权重同为 。常数函数的积分为二,要求 ,故 。二次函数的积分为 ,再要求 ,得 。一次与三次函数都是奇函数,对称积分与对称节点求和都为零,所以四个基函数 全部匹配。
任意三次以下多项式都是这四个基函数的线性组合,积分与求积也都是线性的,故该公式对它们全部精确。这给出两点公式的直接推导,而不只是列出一张节点表。节点也是Legendre多项式 的两个零点。[1]
主例取 。奇次项在两节点处抵消,常数项给二,二次项给 ,所以求积值为 ,与逐项积分相同。
变式。 取 。两点公式给 ,真积分却为 ,误差为 。四次已超出精确次数三;更多次幂不应由前四个矩的匹配自动保证。
正交性给出的通用精确性证明
设 在有限区间 上可积且几乎处处为正,以 定义多项式内积。令 为次数 的实正交多项式,它与全部次数低于 的多项式正交。
先说明其节点合法。若 在区间内部少于 个变号零点,以这些零点构成多项式 ;它次数小于 ,而 在区间内不变号,且不恒为零。正权使其积分严格为正或严格为负,与正交性矛盾。因此 有 个不同的内部零点 ,所有零点均为单根。
在这些节点上构造拉格朗日基函数 ,取权重 。此规则已对次数至多 的多项式精确。对任意次数至多 的 ,多项式除法可写为 积分中的 因正交性消失,节点上的该项因 也消失。剩余 已被求积规则精确积分,所以规则对 精确。
权重还必为正: 次数至多 ,可用刚证明的精确性,得到 这里没有预先假设权重为正,正性是由精确性和正权积分推出的。
精确次数的上限
任何使用给定 个不同实节点的公式,都不可能精确积分全部 次多项式。考虑 全部节点处 ,求积值为零;但 且不恒为零,在正权下积分严格为正,形成矛盾。高斯公式达到 ,因此在这个意义下达到最大代数精度,并非对每个非多项式被积函数都自动误差最小。
两点公式的余项与光滑性
对 ,两点常权公式还满足 这个结论需要四阶连续导数,代数精确性本身没有这项假设。证明可用节点 处的三次Hermite插值 ,令它在 同时匹配函数值和一阶导数。
对不同于节点的 ,构造 函数在两个节点各有二重零点,并在 为零。反复使用Rolle定理可得某个内部点 满足 ,故 节点处两边都为零。因为求积对三次 精确,且 ,积分余项就是 。非负因子满足 用四阶导数的上下界夹住积分,再用其连续性,便得到某个内部点的四阶导数乘 。这也与 例子的 一致。
映射到有限区间 时,长度缩放给出 例如 上积分 的误差为 ;长度不变,常数四阶导数也不变。若没有四阶光滑性,节点值仍可计算,但不能沿用这个余项界。
可运行的两点Gauss—Legendre实现
将一般区间映射为 ,其中 ,得到两次函数评价的公式。下面只实现两点常权版本,端点有限;可反向积分,零长度区间不评价函数。
from math import isfinite, sqrt
def gauss_legendre_two(function, a, b):
a, b = float(a), float(b)
if not isfinite(a) or not isfinite(b):
raise ValueError("finite endpoints required")
if a == b:
return 0.0
midpoint, half = (a+b)/2, (b-a)/2
shift = half / sqrt(3)
left = float(function(midpoint-shift))
right = float(function(midpoint+shift))
if not isfinite(left) or not isfinite(right):
raise ValueError("nonfinite function value")
return half * (left + right)
for degree in range(4):
expected = 0 if degree % 2 else 2/(degree+1)
assert abs(gauss_legendre_two(lambda x, d=degree: x**d, -1, 1)
- expected) < 1e-14
assert abs(gauss_legendre_two(lambda x: x**3, 0, 2) - 4) < 1e-13
assert abs(gauss_legendre_two(lambda x: x**3, 2, 0) + 4) < 1e-13
assert gauss_legendre_two(lambda x: 1/0, 2, 2) == 0
assert abs(gauss_legendre_two(lambda x: x**4, -1, 1) - 2/9) < 1e-14
print(gauss_legendre_two(lambda x: 1+x+x*x+x**3, -1, 1))
两点版除函数评价外只有固定数量运算,时间与额外空间均为 。一般 点公式在节点、权重已预计算后需 次函数评价;节点构造是另一个计算阶段,不能混入这两个函数调用的成本结论。
若被积函数有内部奇点、跳跃或尖峰,节点可能错过重要结构,代数精度也不再给出实际误差保证。可先分割奇点、使用加权高斯公式,或结合分区与误差估计;选择权函数时应明确把哪一部分纳入 ,避免重复计算或遗漏权重。
参考文献
- ↑ NIST Digital Library of Mathematical Functions:§3.5(v) Gauss Quadrature,正交多项式节点、权重和精确次数;Legendre情形为常权函数。访问日期:2026-10-22。