Gauss 求积
一、直观理解:把节点位置也优化掉
梯形与 Simpson 的节点通常是等距的。Gauss 求积(Gaussian quadrature)允许在区间内自由选择节点与权重,使得对尽可能高次的多项式积分精确。 点 Gauss-Legendre 公式对次数 的多项式精确成立,因此用很少的函数求值就能达到很高精度。
直观上:同样“采样预算”,与其均匀撒点,不如把点放在对积分更有信息的位置。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 光滑被积函数;可在任意点求值;需要少节点高精度;理论与谱方法中的标准组件。 |
| 核心优点 | 代数精度高;节点少;有完整正交多项式理论;可推广到 Gauss-Hermite/Laguerre(带权积分)。 |
| 局限与缺点 | 节点非等距,不适合只能给函数表的情形;高振荡/奇异需特化;自己算高阶节点权重有数值难度(应用库)。 |
三、核心原理
在 上,
其中 为 Legendre 多项式 的根, 为相应权重。对一般 做仿射变换:
带权推广
- Gauss-Hermite:,蒙特卡洛期望的确定性对照;
- Gauss-Laguerre:。
四、实践要点
- 低阶可手写节点;高阶用
legpts(Chebfun)或查表/integral; - 先把区间映到 ;
- 对奇异权函数选对 Gauss 类型;
- 与复合低阶方法对比验证。
五、MATLAB 示例
%% 2 点与 3 点 Gauss-Legendre 积分
% [-1,1] 上 2 点: x=±1/sqrt(3), w=1,1
% 3 点: x=0, ±sqrt(0.6), w=8/9,5/9,5/9
function I = gaussLegendre01(f, n)
% 积分 \int_0^1 f(x) dx
if n == 2
t = [-1; 1]/sqrt(3);
w = [1; 1];
elseif n == 3
t = [0; -sqrt(0.6); sqrt(0.6)];
w = [8/9; 5/9; 5/9];
else
error("本示例仅实现 n=2,3");
end
% 映到 [0,1]
x = 0.5*t + 0.5;
ww = 0.5*w;
I = sum(ww .* f(x));
end
f = @(x) exp(x);
trueVal = exp(1)-1;
for n = [2 3]
approx = gaussLegendre01(f, n);
fprintf("n=%d, approx=%.12f, err=%.3e\n", n, approx, abs(approx-trueVal));
end
% 对比:梯形用更多点
x = linspace(0,1,5);
fprintf("trapz 5 点 err=%.3e\n", abs(trapz(x,f(x))-trueVal));
高阶可用内置自适应(底层亦含高阶规则):
f = @(x) cos(x.^2); % Fresnel 型
I = integral(f, 0, sqrt(pi));
fprintf("integral 结果 = %.12f\n", I);
Gauss-Hermite 思想示例(估计 ):
% 3 点 Hermite 近似 \int e^{-x^2} g(x) dx,再换元到标准正态需系数
% 这里直接用蒙特卡洛对照
rng(1);
g = @(z) cos(z);
mc = mean(g(randn(1e5,1)));
fprintf("E[cos(Z)] MC ≈ %.6f, 真值 e^{-0.5}=%.6f\n", mc, exp(-0.5));
六、如何解释结果
说明 Gauss 类型、点数、区间变换、近似值与误差。强调“ 点精确到 次”只对多项式保证,对一般 仍是逼近。
七、常见误区
1. 把函数表硬塞进 Gauss 节点
Gauss 需要在特定节点求值。
2. 区间变换漏掉雅可比因子
这是最常见实现错误。
3. 对不光滑 盲目追高阶
光滑性不足时高阶优势消失,应分段或变元去奇异。
附:建模流程中的落地清单(Gauss 求积)
在竞赛或课程论文中,仅写出定义式往往不够。建议按下列顺序组织材料,既能保证可复现,也便于评委快速抓住贡献。
1. 问题对齐
先用两三句话说明:题目中的哪个子问题对应本方法,输入是什么,输出要支持什么决策。避免“因为常见所以使用”。若存在更简单的替代方法,应说明为何不够用。
2. 符号与单位
列出核心符号表,强调单位一致。许多错误并非算法失败,而是日/年、米/千米、概率/百分比混用。对无量纲参数,说明取值来源(估计、文献、情景设定)。
3. 关键公式回顾
点 Gauss-Legendre 对次数 的多项式精确。区间变换必须乘上 。
4. 计算与实现要点
- 固定随机种子(若涉及随机);
- 记录中间量以便手算核对小例子;
- 用极限情形或解析特例做冒烟测试;
- 保存主要输入输出到表格,便于敏感性分析复用。
5. 补充 MATLAB 片段
t=[-1;1]/sqrt(3); w=[1;1]; a=0;b=1; x=0.5*t+0.5; ww=0.5*w; I=sum(ww.*exp(x)); fprintf('%.12f vs %.12f\n',I,exp(1)-1);
6. 结果报告模板
建议至少报告:点数、节点权重来源、区间变换、误差。
7. 何时不该使用
只有函数表却强行 Gauss;或漏掉仿射变换的雅可比因子。
完成以上清单后,再进入“小结”中的一句话金句,通常论文的方法段与验证段就会扎实许多。
八、小结
Gauss 求积通过优化节点与权重,用极少求值达到高代数精度,是光滑积分的利器,并推广到带权与高维(张量积/稀疏网格)。理解梯形/Simpson/Gauss 的谱系,有助于在建模中按数据形态选择合适的积分器。