数值微分与积分方法
用离散点的函数值近似连续的微分/积分,通过多项式插值作为桥梁——先从离散点构造插值多项式,再对多项式求导/积分获得数值微分/积分公式。
📑 目录
- 1. 插值方法概览
- 2. 拉格朗日插值
- 3. 厄密插值
- 4. 龙格现象与分段插值
- 5. 三次样条插值
- 6. Akima 插值
- 7. 多维插值
- 8. 分数多项式插值与 Padé 近似
- 9. 数值微分
- 10. 牛顿-柯特斯积分
- 11. 复合积分与变步长积分
- 12. 理查森外推与龙贝格算法
- 13. 高斯积分
- 14. WKB 近似
- 15. 总结对比表
1. 插值方法概览
┌─────────────────────────┐
│ 插值方法体系 │
└───────────┬─────────────┘
│
┌─────────────┬───────────┼───────────┬─────────────┐
│ │ │ │ │
全局多项式插值 分段插值 有理插值 多维插值 函数逼近
┌───┴───┐ ┌───┴───┐ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐
│拉格朗日│ │三次样条│ │分数 │ │双线性│ │Taylor│
│ Hermite│ │ Akima │ │Padé │ │Kriging│ │Cheby │
└───────┘ └───────┘ └─────┘ └──────┘ └──────┘
插值的本质:已知 N+1 个离散点 (x₀, y₀), (x₁, y₁), ..., (xN, yN),构造一个"穿过"所有点的光滑函数 P(x),用 P(x) 来估计任意位置的函数值。
| 方法 | 特点 | 适用场景 |
|---|---|---|
| 拉格朗日插值 | N+1 个点给出 N 次多项式 | 点数少、要求高精度 |
| Hermite 插值 | 同时用函数值和导数值 | 已知导数信息时 |
| 三次样条插值 | 分段三次,二阶连续光滑 | 点数多、避免振荡 |
| Akima 插值 | 分段三次,无需解方程组 | 效率要求高 |
| 分数多项式插值 | 有理函数,能处理极点 | 函数有奇点时 |
| 多维插值 | 推广到二维/三维 | 网格数据 |
2. 拉格朗日插值
2.1 核心思想
人话:给 N+1 个点 ,找一个 N 次多项式 P(x) 恰好穿过这些点。做法是构造一组"开关函数" ℓk(x),每个 ℓk 在自己那个点等于 1,在其他点等于 0。
2.2 插值基函数
第 k 个基函数 的构造(N+1 个点,k = 0, 1, ..., N):
中文解释:分子是 (x - 除了xk以外的所有xi) 连乘,分母是 (xk - 除了xk以外的所有xi) 连乘。当 x=xk 时分子分母完全相同,结果为1;当 x=xi(i≠k)时,分子中有一个因子 (xi - x_i)=0,结果为0。这就是"开关"效果。
2.3 插值多项式
拉格朗日插值多项式 = 各点函数值 × 对应基函数的加权和:
2.4 具体数值例子
两点插值(直线):已知 (x₀=1, y₀=2), (x₁=3, y₁=6)
ℓ₀(x) = (x - 3)/(1 - 3) = -(x-3)/2
ℓ₁(x) = (x - 1)/(3 - 1) = (x-1)/2
P(x) = 2·ℓ₀(x) + 6·ℓ₁(x)
= 2·(3-x)/2 + 6·(x-1)/2
= (3-x) + 3(x-1)
= 3 - x + 3x - 3
= 2x ← 还原为直线 y=2x ✓
三点插值(抛物线):已知 (x₀=-1, y₀=0), (x₁=0, y₁=1), (x₂=1, y₂=0)
ℓ₀(x) = (x-0)(x-1)/((-1-0)(-1-1)) = x(x-1)/2
ℓ₁(x) = (x+1)(x-1)/((0+1)(0-1)) = -(x+1)(x-1) = 1-x²
ℓ₂(x) = (x+1)(x-0)/((1+1)(1-0)) = x(x+1)/2
P(x) = 0·ℓ₀(x) + 1·ℓ₁(x) + 0·ℓ₂(x)
= 1 - x² ← 还原为抛物线 y=1-x² ✓
💡 物理直觉:拉格朗日插值就像用 N+1 个"开关"拼出一个波形。每个基函数是一个"尖峰"——在自己的点等于1、在别人的点等于0。叠加起来后恰好能穿过所有数据点。
2.5 插值余项(误差)
人话:用 P(x) 代替真实函数 f(x) 的误差有多大?
余项公式(ξ 在 x₀ 和 x_N 之间):
数值理解:
误差 = 第(N+1)阶导数的值 / (N+1)的阶乘 × 所有距离的乘积
↑ 表示函数的弯曲程度 ↑ 表示点之间的距离效应
- 函数越"弯"(高阶导数大)→ 误差越大
- 点越多、阶乘越大 → 分母越大 → 误差可能减小
- 但!龙格现象会破坏这个直觉(见第4节)
3. 厄密插值
3.1 核心思想
人话:拉格朗日只用了函数值 yₖ。如果还知道每一点的导数 y'ₖ,就能做得更精确——用 2N+1 次多项式的精度。
3.2 插值条件
已知 N+1 个点,每个点有 两个信息:
- 函数值:
- 一阶导数:
总共 2N+2 个条件 → 可以确定 2N+1 次多项式!
3.3 Hermite 基函数
构造两类基函数:
- :在第 k 个点 hₖ(xₖ)=1,且 hₖ'(xₖ)=0;在其他所有点 hₖ(xⱼ)=0, hₖ'(xⱼ)=0
- :在第 k 个点 ĥₖ(xₖ)=0,且 ĥₖ'(xₖ)=1;在其他所有点 ĥₖ(xⱼ)=0, ĥₖ'(xⱼ)=0
Hermite 插值多项式:
↑ 函数值贡献 ↑ 导数值贡献
设拉格朗日插值基函数为 Li(x)(它在 xi处为1,在其他节点处为0)。我们定义两组新的基函数:
- A_i(x):负责控制函数值。它保证在 xi处值为1,导数为0;在其他节点处值为0,导数为0。
- B_i(x):负责控制导数值。它保证在 xi处值为0,导数为1;在其他节点处值为0,导数为0。
公式如下(这是你需要记住的黄金公式):
其中:
直观理解: 平方项 [Li(x)]^{2} 保证了在其他节点处函数值和导数值都为0(因为平方让一阶导在节点处也为0)。而前面的线性项 1−2... 则是为了“修正”在 xi 处的导数不为0的缺陷,强行将导数调整为0。
3.4 数值例子:两点 Hermite
已知两个端点 x₀, x₁ 的函数值和导数值:
- f(x₀)=y₀, f'(x₀)=m₀
- f(x₁)=y₁, f'(x₁)=m₁
间距: h = x₁ - x₀
H(x) = y₀·φ₀(t) + y₁·φ₁(t) + m₀·h·ψ₀(t) + m₁·h·ψ₁(t)
其中 t = (x - x₀)/h ∈ [0,1]
φ₀(t) = 2t³ - 3t² + 1 (t=0时为1, t=1时为0, 导数均为0)
φ₁(t) = -2t³ + 3t² (t=1时为1, t=0时为0, 导数均为0)
ψ₀(t) = t³ - 2t² + t (t=0时导数为1, t=1时导数为0, 值均为0)
ψ₁(t) = t³ - t² (t=1时导数为1, t=0时导数为0, 值均为0)
💡 为什么 Hermite 更精确? 它利用了"速度"信息,就像已知位置和速度来推轨迹比只知位置更准确。在已知导数的场合(如实验数据附带变化率),Hermite 插值用更少的点达到更高的精度。
即三次插值
具体的推导
两个节点
引入
借助上述归一化后 Lagrange插值中 两个最基本的 一次基函数 为:
对于x求导,而非对t求导!!!(回归关于x的等式然后求导即可)
带入公式
可得到
就得到了
4. 龙格现象与分段插值
4.1 龙格现象
人话:虽然插值点越多多项式次数越高,但边缘误差反而爆炸式增长!
龙格函数例子:f(x) = 1/(1 + x²) 在 [-5, 5] 上等距取点:
取5个点 (N=4):边缘误差 ≈ 0.4
取9个点 (N=8):边缘误差 ≈ 0.6
取13个点 (N=12):边缘误差 ≈ 2.5 ← 越加越糟!
取17个点 (N=16):边缘误差 ≈ 20 ← 爆炸!
误差趋势(概念图):
N=4: 误差 ··· 0.4 ···
N=8: 误差 ······ 0.6 ······
N=12: 误差 ············· 2.5 ·············
N=16: 误差 ····························· 20 ···
↑ 边缘剧烈振荡
💡 物理直觉:高次多项式很"硬"——要同时穿过很多点就会在两端剧烈摇摆。真实物理量通常很"光滑",不需要这么硬的拟合。解决方案:分段——每段用低次多项式!
4.2 分段插值思路
不用:一个14次多项式穿过15个点 → ❌ 边缘振荡严重
改用:把区间切成14段
每段两个点 → 14条直线 → ⚠️ 角点不光滑
每段三个点 → 7条抛物线 → ⚠️ 连接处导数不连续
每段四个点+光滑条件 → 三次样条 ✓
5. 三次样条插值
5.1 核心思想
人话:把整个区间切成 N 段,每段用一个三次多项式。除了要求穿过数据点,还要求相邻段在连接处函数值、一阶导数、二阶导数都相等——这样整条曲线就像一条柔韧的细木条(旧时绘图用的"样条")自然弯曲。
5.2 构造框架
假设 N+1 个数据点 (x₀,y₀), ..., (xN,yN),共 N 个小区间。
第 j 段(区间 [xⱼ, xⱼ₊₁],j=0,...,N-1):
Sⱼ(x) = aⱼ + bⱼ(x-xⱼ) + cⱼ(x-xⱼ)² + dⱼ(x-xⱼ)³
每段 4 个未知系数,N 段共 4N 个未知数。
5.3 条件清单
| 条件类型 | 数量 | 数学表达式 |
|---|---|---|
| 插值条件:Sⱼ(xⱼ)=yⱼ, Sⱼ(xⱼ₊₁)=yⱼ₊₁ | 2N | 每段必须穿过两个端点 |
| 一阶导数连续:S'ⱼ(xⱼ₊₁)=S'ⱼ₊₁(xⱼ₊₁) | N-1 | 内部连接处斜率连续 |
| 二阶导数连续:S''ⱼ(xⱼ₊₁)=S''ⱼ₊₁(xⱼ₊₁) | N-1 | 内部连接处曲率连续 |
| 边界条件 | 2 | 两端各一个 |
| 合计 | 4N | 恰好确定 |
5.4 具体推导过程
对于一个均匀间距 h 的例子(3个点:x₀=1, x₁=2, x₂=3;y₀=0, y₁=1, y₂=0):
步骤1:利用连续性条件消去 dⱼ
S''ⱼ(xⱼ) = 2cⱼ
S''ⱼ(xⱼ₊₁) = 2cⱼ + 6dⱼ·h = 2cⱼ₊₁ (二阶导数连续)
→ dⱼ = (cⱼ₊₁ - cⱼ) / (3h) (j=0,...,N-2)
步骤2:利用一阶导数连续性消去 bⱼ
S'ⱼ(xⱼ₊₁) = bⱼ + 2cⱼ·h + 3dⱼ·h² = bⱼ₊₁ (一阶导数连续)
→ bⱼ = (yⱼ₊₁ - yⱼ)/h - h·(2cⱼ + cⱼ₊₁)/3
步骤3:得到关于 cⱼ 的三对角方程组
h·cⱼ₋₁ + 4h·cⱼ + h·cⱼ₊₁ = 3[(yⱼ₊₁ - yⱼ)/h - (yⱼ - yⱼ₋₁)/h]
即 cⱼ₋₁ + 4cⱼ + cⱼ₊₁ = (3/h)·[(yⱼ₊₁-yⱼ)/h - (yⱼ-yⱼ₋₁)/h]
5.5 三对角矩阵形式
对于 N+1 个点(N 个区间),关于 c₁, c₂, ..., c_{N-1} 的方程组:
┌ ┐ ┌ ┐ ┌ ┐
│ 4 1 0 0 │ │ c₁ │ │ 3[(y₂-y₁)/h - (y₁-y₀)/h]/h │
│ 1 4 1 0 │ │ c₂ │ │ 3[(y₃-y₂)/h - (y₂-y₁)/h]/h │
│ 0 1 4 1 │ │ c₃ │ = │ ... │
│ 0 0 1 4 │ │ c₄ │ │ 3[(y₅-y₄)/h - (y₄-y₃)/h]/h │
└ ┘ └ ┘ └ ┘
即: 三对角矩阵 × c向量 = 右端向量(由函数值差分决定)
中文解释:这是一个三对角线性方程组(每行最多3个非零元素),系数矩阵对角线全是 4,上下对角线全是 1,可以用追赶法(Thomas算法)在 O(N) 时间内高效求解。
5.6 边界条件
自然边界条件(最常用):
S''(x₀) = 2c₀ = 0 → c₀ = 0
S''(x_N) = 2c_N = 0 → c_N = 0
这样第一行和最后一行的方程变为:
第一行:4c₁ + c₂ = 右端
最后行:c_{N-2} + 4c_{N-1} = 右端
一次微分边界条件:给定两端的一阶导数值 S'(x₀)=y'₀, S'(xN)=y'N:
2c₀ + c₁ = (3/h)·[(y₁-y₀)/h - y'₀]
c_{N-1} + 2c_N = (3/h)·[y'_N - (y_N-y_{N-1})/h]
💡 物理直觉:自然边界条件相当于说"样条两端可以自由弯曲、不受力矩约束"——就像一根细木条,两端不加拧紧的力。这是物理上最自然的状态,也是默认选择。
5.7 算法流程
输入: N+1 个点 (x₀,y₀)...(x_N,y_N)
输出: 每段的系数 aⱼ,bⱼ,cⱼ,dⱼ
步骤1: 计算间距 hⱼ = xⱼ₊₁ - xⱼ
步骤2: 构造三对角方程组 → 求 c₀,...,c_N
步骤3: 回代求 bⱼ 和 dⱼ
步骤4: aⱼ = yⱼ(直接已知)
伪代码:
for j = 0 to N-1:
h[j] = x[j+1] - x[j]
for j = 1 to N-1: // 构造右端项
rhs[j] = 3/h * ( (y[j+1]-y[j])/h - (y[j]-y[j-1])/h )
solve_tridiagonal() → c[0],...,c[N]
for j = 0 to N-1:
d[j] = (c[j+1] - c[j]) / (3*h)
b[j] = (y[j+1]-y[j])/h - h*(2*c[j]+c[j+1])/3
a[j] = y[j]
6. Akima 插值
6.1 核心思想
人话:也是分段三次插值,但不解方程组!直接用局部数据估算导数,然后用 Hermite 两点插值公式拼出曲线。
Akima 插值的优势:
- ✅ 计算极快(不需要求解方程组)
- ✅ 天然局部性——修改一个点只影响相邻几段
- ✅ 有效避免振荡
6.2 一阶导数的估计
对于点 i,用相邻 4 个点的差分斜率做加权平均得到导数估计:
sᵢ = (yᵢ₊₁ - yᵢ) / (xᵢ₊₁ - xᵢ) ← 右侧斜率
sᵢ₋₁ = (yᵢ - yᵢ₋₁) / (xᵢ - xᵢ₋₁) ← 左侧斜率
y'ᵢ = (|sᵢ₊₁ - sᵢ|·sᵢ₋₁ + |sᵢ₋₁ - sᵢ₋₂|·sᵢ) / (|sᵢ₊₁ - sᵢ| + |sᵢ₋₁ - sᵢ₋₂|)
权重逻辑:
导数 = 左侧斜率 × 右侧变化剧烈度 + 右侧斜率 × 左侧变化剧烈度
────────────────────────────────────────────────────────
左右变化剧烈度之和
- 右侧变化剧烈 → 更多信赖左侧信息
- 左侧变化剧烈 → 更多信赖右侧信息
- 左右都平滑 → 平均
6.3 防止除零
当分母 |sᵢ₊₁ - sᵢ| + |sᵢ₋₁ - sᵢ₋₂| = 0 时(连续三个斜率相同):
y'ᵢ = (sᵢ₋₁ + sᵢ) / 2 ← 直接取平均
6.4 构造插值
得到每个数据点的一阶导数后,每段 [xᵢ, xᵢ₊₁] 用两点 Hermite 插值公式:
已知: f(xᵢ)=yᵢ, f(xᵢ₊₁)=yᵢ₊₁, f'(xᵢ)=y'ᵢ, f'(xᵢ₊₁)=y'ᵢ₊₁
Sᵢ(x) = yᵢ·φ₀(t) + yᵢ₊₁·φ₁(t) + y'ᵢ·h·ψ₀(t) + y'ᵢ₊₁·h·ψ₁(t)
其中 t = (x-xᵢ)/h, h = xᵢ₊₁-xᵢ
φ₀,φ₁,ψ₀,ψ₁ 为 Hermite 基函数(与 §3.4 相同)
💡 算法思路:Akima = 局部导数加权估计 + Hermite 分段拼接。省掉了样条插值中解三对角方程组那步,因此计算量从 O(N) 进一步降低——但这个 O(N) 本身就很快了,Akima 真正的优势是局部性:修改一个数据点后不需要重算整条曲线。
6.5 边界处理
在端点处需要额外的数据来估算导数:
- 左端点:用最左 3 个点的二次外推估计导数
- 右端点:用最右 3 个点的二次外推估计导数
7. 多维插值
7.1 双线性插值
人话:二维表格数据,先沿 x 方向插值,再沿 y 方向插值(或反过来),结果等价。
场景:已知网格四点 f(x₀,y₀), f(x₁,y₀), f(x₀,y₁), f(x₁,y₁),求中间点 f(x,y)。
策略1(逐方向插值):
Step 1: 在 y=y₀ 这行沿 x 插值
f(x,y₀) = f(x₀,y₀)·(x₁-x)/Δx + f(x₁,y₀)·(x-x₀)/Δx
在 y=y₁ 这行沿 x 插值
f(x,y₁) = f(x₀,y₁)·(x₁-x)/Δx + f(x₁,y₁)·(x-x₀)/Δx
Step 2: 用上面两个结果沿 y 插值
f(x,y) = f(x,y₀)·(y₁-y)/Δy + f(x,y₁)·(y-y₀)/Δy
Δx = x₁-x₀, Δy = y₁-y₀
面积权重理解(另一种等价的看法):
把点 (x,y) 到四个角连成四个小矩形:
f(x,y) = f₁₁·A₁₁ + f₁₀·A₁₀ + f₀₁·A₀₁ + f₀₀·A₀₀
其中 A 是 (x,y) 到对角的矩形面积占整个网格面积的比例
权重之和 = 1(距离归一化到单位1)
7.2 推广到三维
三维插值 = 先做二维插值得到若干平面上的值,再沿第三方向插值。方法可递推。
7.3 散点数据方法
| 方法 | 思路 | 特点 |
|---|---|---|
| 回归分析 | 最小二乘拟合 | 全局光滑 |
| Kriging(克里金法) | 空间统计插值 | 地质统计标准方法 |
| Radial Basis Function | 径向基函数加权 | 灵活处理散点 |
💡 延伸思考:均匀网格的双线性插值在图像缩放中无处不在(cv2.resize 的 INTER_LINEAR 就是它),因为计算极快且效果可接受。
8. 分数多项式插值与 Padé 近似
8.1 有理函数插值
人话:普通多项式遇到函数有极点(分母为零)时会很糟糕。用分子/分母形式的有理函数 R(x) 可以自然描述极点行为——分母的零点就是极点。
形式:
R(x) = P(x)/Q(x),其中 P 是 u 次多项式,Q 是 v 次多项式
通过 m+1 = u+v+1 个数据点来确定系数。
8.2 Padé 近似
人话:给定函数的 Taylor 展开,找一个分子 u 次 + 分母 v 次的有理函数,使得有理函数展开后的前 u+v 项与 Taylor 展开完全相同。
构造(令 b₀=1):
函数 f(x) 的 Taylor 级数:
f(x) = a₀ + a₁·x + a₂·x² + a₃·x³ + ...
Padé 近似 R(x) = (p₀ + p₁x + ... + p_u x^u) / (1 + b₁x + ... + b_v x^v)
要求:R(x) 展开后前 u+v+1 项系数与 Taylor 展开一致
系数求解 — 线性方程组:
对于 k ≥ u+1:
a_k + a_{k-1}·b₁ + a_{k-2}·b₂ + ... + a_{k-v}·b_v = 0
这是关于 b₁,b₂,...,b_v 的方程组(v 个方程解 v 个未知数)
解出 b_i 后回代得到 p₀,...,p_u:
p₀ = a₀
p₁ = a₁ + a₀·b₁
p₂ = a₂ + a₁·b₁ + a₀·b₂
...
数值例子:f(x) = eˣ 的 Padé [1,1] 近似
Taylor: eˣ = 1 + x + x²/2 + x³/6 + ...
设 R(x) = (p₀ + p₁x) / (1 + b₁x)
方程(k=2): a₂ + a₁·b₁ = 0
→ 1/2 + 1·b₁ = 0
→ b₁ = -1/2
回代:p₀ = a₀ = 1
p₁ = a₁ + a₀·b₁ = 1 + 1·(-1/2) = 1/2
因此 R(x) = (1 + x/2) / (1 - x/2)
= (2+x)/(2-x)
验证:展开 R(x) = 1 + x + x²/2 + x³/4 + ...
其中前3项与 eˣ 完全相同!
💡 为什么 Padé 好? Padé 在极点附近表现远优于 Taylor 截断。例如 1/(1-x) 在 x≈1 附近,Taylor 需要很多项才收敛,而 Padé [0,1] = 1/(1-x) 直接就对了。
9. 数值微分
9.1 核心思想
人话:从拉格朗日插值多项式 P(x) 出发,直接对 P(x) 求导得到数值微分公式。P(x) 是对 f(x) 的近似,所以 P'(x) 就是对 f'(x) 的近似。
9.2 两点公式(前向差分)
从两点插值推导:已知 f(x) 和 f(x+h) 在 的取值
插值: P(x) = f(x₀)·(x₁-x)/h + f(x₁)·(x-x₀)/h
求导: P'(x) = [-f(x₀) + f(x₁)] / h
f'(x₀) ≈ [f(x₀+h) - f(x₀)] / h ← 前向差分 (Forward Difference)
误差:O(h) —— 一阶精度
9.3 三点公式
三点中点公式(误差 O(h²),最常用):
已知:f(x-h), f(x), f(x+h)
f'(x) ≈ [f(x+h) - f(x-h)] / (2h) ← 中心差分,O(h²)
三点端点公式(用于边界):
f'(x₀) ≈ [-3f(x₀) + 4f(x₁) - f(x₂)] / (2h) ← 左端点,O(h²)
f'(x₂) ≈ [f(x₀) - 4f(x₁) + 3f(x₂)] / (2h) ← 右端点,O(h²)
数值验证:f(x) = x³,在 x=1 处,h=0.1
真实值: f'(1) = 3
中点公式: [f(1.1) - f(0.9)] / 0.2 = (1.331 - 0.729) / 0.2 = 3.01
误差 ≈ 0.01 = O(h²) ✓
前向差分: [f(1.1) - f(1)] / 0.1 = (1.331 - 1) / 0.1 = 3.31
误差 ≈ 0.31 = O(h) ✓
📊 对比:
- 前向/后向差分 O(h):用 2 点,精度一般,适合简单估算
- 中心差分 O(h²):用 3 点,精度高一阶,最常用
- 五点公式 O(h⁴):用 5 点,精度更高,但需更多数据
9.4 五点公式
五点中点公式:
f'(x₀) ≈ [f(x₀-2h) - 8f(x₀-h) + 8f(x₀+h) - f(x₀+2h)] / (12h)
权重系数:[-1, +8, 0, -8, +1] / (12h),关于中心点反对称。
五点端点公式:
f'(x₀) ≈ [-25f(x₀) + 48f(x₁) - 36f(x₂) + 16f(x₃) - 3f(x₄)] / (12h)
系数表(对于等距点 x₀, x₀+h, x₀+2h, x₀+3h, x₀+4h):
| 位置 | 系数 × 12h | 说明 |
|---|---|---|
| x₀ | -25 | 最左 |
| x₁ | +48 | |
| x₂ | -36 | |
| x₃ | +16 | |
| x₄ | -3 | 最右 |
| 精度 | O(h⁴) |
9.5 二阶微分
三点公式(从二阶泰勒展开推导):
f''(x) ≈ [f(x+h) - 2f(x) + f(x-h)] / h² ← 中心差分,O(h²)
五点二阶微分公式:
f''(x) ≈ [-f(x+2h) + 16f(x+h) - 30f(x) + 16f(x-h) - f(x-2h)] / (12h²)
系数:[-1, +16, -30, +16, -1] / (12h²),关于中心点对称。
除了从插值多项式求导,还可以先做样条插值 → 对样条函数直接解析求导,这样得到的导数在整个区间连续且光滑。
样条插值微分的优雅解决方案:
- 全局拟合:我们先用上一节学到的三次样条插值(Cubic Spline),将所有数据点拟合成一条全局光滑的曲线。 在每一个区间上,我们都得到了一个极其平滑的解析函数:
- 解析求导:因为我们已经求出了所有的系数 ,所以我们可以直接在数学上对这个三次多项式求导,得到一阶和二阶导数:
这样做的巨大优势:
- 全局一阶连续性:在所有数据点的拼接处,样条插值本身就强制要求了一阶和二阶导数的连续性。因此,你求出来的导数曲线 将是一条完全无缝、平滑的连续曲线,而不会像普通差分法那样在点与点之间出现不连续的跳跃。
- 天然的去噪抗噪性:样条插值在求解三对角方程组时,相当于把每一个点的变动通过全局约束“平摊”到了整根铁丝上,它具有物理上最小弯曲能量的限制,因此它对局部的噪声点具有极强的过滤作用。求导出来的结果远比直接做差分要稳定得多!
10. 牛顿-柯特斯积分
10.1 核心思想
人话:从拉格朗日插值多项式出发,直接对整个插值多项式求定积分。
∫f(x)dx ≈ ∫P(x)dx。因为多项式积分有解析公式,所以得到的就是加权和形式的数值积分公式。
数值积分!!! 工程计算中 很核心的广泛应用的领域
News-Cotes Formulas
10.2 通用形式
对于一个复杂的连续函数 f(x) 无法直接求出原函数 就利用一个好积分的函数去近似 f(x) 然后对于近似的函数求取积分 —— 好的函数 就是 多项式(插值前面的方法)
设我们在等距分点 (其中 步长为 ) 构造一个 n次的的拉格朗日多项式
L(x) 就是Lagrange 基函数:
现在 我们对这个多项式 在 范围 a 到 b上 进行求和积分:
由于积分是线性算子,我们可以将积分号与求和号对调,把已知的节点值 提出来:
此为 N-C通用形式的由来!
积分值完全等价于 各个节点值 的加权和
权重 。
我们对其进行自变量代换,令 (其中 ),则
这里, 就是著名的柯特斯系数(Cotes Coefficients)。它满足:
- 与 毫无关系,只与插值阶数 以及节点索引 有关。
- 对称性:$Ck^{(n)} = C{n-k}^{(n)}$(这是由基函数关于中心点对称的代数结构决定的)。
- 归一性:$\sum{k=0}^{n} Ck^{(n)} = 1$(因为如果 ,多项式插值是完全精确的,此时积分值为 ,代入上式必然要求系数和为 1)。
10.3 常用低阶公式
(1) 梯形公式(n=1,2点)
步长 ,节点为 。
拉格朗日基函数为:
求它们的积分: 同理,由于对称性, 。
所以,我们极其自然地得到了梯形公式:
柯特斯系数为
区间 [x₀, x₁],h = x₁-x₀
积分 ≈ h × [f(x₀) + f(x₁)] / 2
系数: C₀^(1) = C₁^(1) = 1/2
几何意义:用梯形面积代替曲线下面积。
误差:$O(h³·f''(ξ))$,有 1 次代数精度(对一次多项式精确)。
具体数值:∫₀¹ x² dx,h=1
梯形: 1 × [0² + 1²]/2 = 0.5
真实值: 1/3 ≈ 0.333
误差 ≈ 0.167
(2) Simpson 公式(n=2,3点,抛物线法则)
步长 ,三个节点分别为:$x0 = a$,$x1 = \frac{a+b}{2}$,$x_2 = b$。
为了简化积分计算,我们做无损平移,让中点 落在原点 上。 此时,三个节点变为:$-h, 0, h$。 我们来写出 的表达式:
对 进行在 上的积分:
由于总区间长度为 ,所以:
由对称性,另外两个系数 。 又因为所有系数和必须为 ,所以: 即 。
Simpson 公式诞生:
区间 [x₀, x₁, x₂],h = (b-a)/2
积分 ≈ (b-a)/6 × [f(x₀) + 4f(x₁) + f(x₂)]
系数: C₀^(2) = 1/6, C₁^(2) = 2/3, C₂^(2) = 1/6
等价于: h/3 × [1, 4, 1] · [f₀, f₁, f₂]ᵀ
具体数值:
三个点: x₀=0, x₁=1, x₂=2
f₀=0, f₁=1, f₂=4
Simpson: 2/6 × [0 + 4×1 + 4] = (2/6)×8 = 8/3 ≈ 2.667
真实值: 8/3 ≈ 2.667 ← 精确!(x²是2次多项式,Simpson有3次精度)
误差 : ,有 3 次代数精度。
代数精度(Degree of Precision):
定义:如果一个数值积分公式对于任意次数不超过 的多项式都能完全精确地成立,而对于 次多项式不精确,则称该公式具有 次代数精度。
按照常理,我们用 次拉格朗日多项式去近似函数并做积分,得到的公式应该刚好能对 次多项式精确,即具有 次代数精度。
- 比如梯形公式($n=1$)对 精确,代数精度为 。
但是,Simpson公式($n=2$)创造了一个数学奇迹! 它使用的是二次插值(抛物线),理论上只能对二次多项式精确。但是,它对任意三次多项式 居然也是完美精确的! 它的代数精度是 3
为什么会平空多出一阶精度?
我们用泰勒展开在对称中心 处对误差项进行分析。
由于 Simpson 公式的节点在几何上是完全对称的,当我们把积分误差展开成泰勒级数时,所有奇数阶的误差项会因为正负抵消而彻底消失!
具体来说,对于 ,其三阶导数 是个常数,其四阶导数 。 而 Simpson 公式的截断误差公式为: 因为 ,所以对于任何三次多项式,其误差严格为零。
💡 黄金规律:对于等距节点且对称的 Newton-Cotes 公式,当阶数 为偶数时,其代数精度总是为 。它会无条件向高处赠送一阶精度!
这就是为什么大家极度钟爱偶数点公式(如 Simpson 公式、五点柯特斯公式)的根本原因。
📝 推导练习提示:把拉格朗日 L₂(x) 带入积分 ∫L₂(x)dx,化简即得 Simpson 公式。
(3) 柯特斯公式(n=4,5点)
区间 [x₀, ..., x₄],h = (b-a)/4
积分 ≈ (b-a)/90 × [7f(x₀) + 32f(x₁) + 12f(x₂) + 32f(x₃) + 7f(x₄)]
系数: ×(b-a): [7/90, 32/90, 12/90, 32/90, 7/90]
≈ [0.078, 0.356, 0.133, 0.356, 0.078]
误差:O(h⁷·f⁽⁶⁾(ξ)),有 5 次代数精度。
10.4 牛顿-柯特斯系数表
| n | 系数 (× 分母) | 分母 | 精度阶 |
|---|---|---|---|
| 1 | [1, 1] | 2 | 1 |
| 2 | [1, 4, 1] | 6 | 3 |
| 3 | [1, 3, 3, 1] | 8 | 3 |
| 4 | [7, 32, 12, 32, 7] | 90 | 5 |
| 5 | [19, 75, 50, 50, 75, 19] | 288 | 5 |
| 6 | [41, 216, 27, 272, 27, 216, 41] | 840 | 7 |
💡 注意:n 越大不一定越好!n≥8 时柯特斯系数出现负数,导致舍入误差放大(与龙格现象类似的原因)。实用中都用复合低阶公式。
在插值法那一章,我们学过龙格现象(Runge's Phenomenon):在等距节点下,高阶多项式会在边界处产生剧烈的、病态的往复震荡 [9.4, 10.5]。
由于 Newton-Cotes 的权重 本质上就是对拉格朗日基函数 的积分: 当 时,由于高阶插值在边界处的急剧震荡,基函数在某些区域的值会变得极大且为负数。这直接导致积分出来的柯特斯系数 出现了负数 [10.3, 10.5]。
为什么系数出现负数是致命的?
设我们在计算机中进行数值积分,每个点上的函数值都有微小的舍入误差 (由计算机双精度浮点数限制产生)。 我们实际计算出的加权和为:
根据误差传播理论,最终积分结果的误差方差正比于:
- 当所有 均为正数时(由于 ): 所有的 都比较小,平方和 也会非常小。误差被平摊并受到了抑制。
- 当某些 变为负数时: 由于所有系数的和必须依然等于 ,这会导致其余正的系数必须变得非常大(例如,有些系数变成 ,有些变成 ,它们加起来还是 )。 但在计算平方和时,负号消失了: ——> 这意味着,输入数据中哪怕只有 的极其微小的舍入误差,乘以这些巨大的正负权重后,也会在求和过程中被急剧放大,导致最终的积分结果完全失真!
解决方案:复合低阶公式(Composite Rules)
为了避免高阶公式的灾难,我们在实际中绝不使用单段的高阶 Newton-Cotes 公式。 相反,我们会把大区间 劈成 个极小的子区间。在每一个子区间上,我们只使用极其稳定、绝对不会产生负系数的低阶公式(如复合梯形公式或复合 Simpson 公式),最后把所有子区间的积分值累加起来。 这样既保证了计算的极度稳定,又可以通过增加分点来无限逼近真实积分值。
11. 复合积分与变步长积分
11.1 复合积分思想
一大段区间用高阶公式不如切成很多小段、每段用低阶公式,然后把结果加起来。这就是"复合"求积公式。
11.2 复合 Simpson 公式
代数拼装推导
假设我们将大区间 等分为 个小段(注意:因为 Simpson 公式本身需要 个点才能构成一个子抛物线,所以小区间数 必须是偶数)。 步长 。我们把这 个区间两两成对地结合起来,一共拼成 个双步长区间:
- 第 1 对:$[x0, x2]$,它的三个点是 。
- 第 2 对:$[x2, x4]$,它的三个点是 。
- 第 3 对:$[x4, x6]$,它的三个点是 。
- 最后 1 对:$[x{n-2}, xn]$,它的三个点是 。
在每一对上,我们单独套用一次单步长为 的标准 Simpson 公式:
最后,我们把这所有的子区间积分全部加起来。 注意看那些相接的边界点(偶数下标点,如 )!
- 节点 只有第 1 对区间用到,权重为 。
- 节点 既是第 1 对区间的右端点,又是第 2 对区间的左端点。因此,它的权重被加了两次:$1 + 1 = 2$!
- 同理,所有奇数下标的节点( )都正好落在各自抛物线段的内部,权重永远保持为 ;
- 所有偶数下标的节点( ),除了最首端的 和最末端的 之外,全部是两个抛物线的交界点,所以权重全部变成 。
因此,复合 Simpson 的系数形式被无缝地拼接出来:
将 [a,b] 等分成 n 个子区间(n 为偶数),每个子区间 [x{2k-2}, x{2k}] 用 Simpson 公式:
步长 h = (b-a)/n
∫_a^b f(x)dx ≈
h/3 × [ f₀ + f_n + 4(f₁+f₃+...+f_{n-1}) + 2(f₂+f₄+...+f_{n-2}) ]
首 尾 奇数下标(×4) 偶数下标(×2,除首尾)
系数模式:1 → 4 → 2 → 4 → 2 → ... → 4 → 2 → 4 → 1
具体数值例子: ,分成 4 段 (n=4),h=1
分点: x₀=0, x₁=1, x₂=2, x₃=3, x₄=4
f值: 0, 1, 4, 9, 16
复合Simpson:
= 1/3 × [0 + 16 + 4×(1+9) + 2×(4)]
= 1/3 × [16 + 40 + 8]
= 1/3 × 64 = 64/3 ≈ 21.333
真实值: 4³/3 = 64/3 ≈ 21.333 ← 精确!
11.3 误差估计
在数值积分中,误差阶通常被写成
| 公式 | 误差阶 | n加倍后误差缩小 |
|---|---|---|
| 复合梯形 | O(h²) | 1/4 |
| 复合 Simpson | O(h⁴) | 1/16 |
| 复合柯特斯 | O(h⁶) | 1/64 |
假设我们正在用复合 Simpson 求解一个积分。
当我们把划分的段数 加倍(意味着网格步长 缩小到了原来的一半 ):
因为复合 Simpson 拥有 的高精度收敛性,其截断误差中包含一个 的因子。
这意味你只需要付出双倍的计算量,误差就会瞬间暴跌至原来的 (大约降低了一个数量级还要多)! 这就是高阶复合积分公式在实际工程中展现出的恐怖威力。
11.4 变步长积分
不知道用多大的步长合适,从大步长开始,不断二分,直到相邻两次计算结果足够接近。
不断二分网络 通过“新结果”与“旧结果” 的差值,实时自我估算 当前的绝对误差!
设原本有 段,步长为 。它的复合梯形公式结果为:
现在,我们把每一段一分为二,步长变为 ,段数变成 。
新增加的那些中点我们记为 (共 个新增中点)。
现在我们写出全新的 (它一共有 个点,我们依然把老点和新点在括号里剥离开):
因为 ,我们把括号前面的 分配进去:
- 第一项变成了: 这正是 !
- 第二项保持原样: 。
于是,我们极其自然地得到了这个递推公式 [11.4]:
变步长梯形算法流程:
步骤1: 初始 n=1
T₁ = (b-a)·[f(a)+f(b)]/2 ← 一个梯形
步骤2: n 翻倍,利用旧结果
T₂ₙ = Tₙ/2 + h_new × (新增中点的函数值之和)
新增中点在: a+h/2, a+3h/2, a+5h/2, ...
步骤3: 检查收敛
如果 |T₂ₙ - Tₙ| < ε → 停止
否则 → 回到步骤2
收敛判定:二分后误差 ≈ 原误差 / 4(对梯形法)
为什么这里平空冒出了一个除以 3?
这个结论叫做理查森外推(Richardson Extrapolation)估算,它的推导极其经典:
我们知道复合梯形公式的真实值 与其近似值 之间的关系可以写成(其中 是与步长无关的常数):
当我们将区间数加倍到 时,新步长变为了 。新近似值 与真实值的关系为:
我们现在用方程 减去方程 ,以此消去未知积分真实值 :
由此,我们解出了未知的常量 :
我们把这个解出来的 重新代回到方程 中,去看看当前最新计算出来的 距离真实值 到底还差多少:
证毕! 这个推导简直妙不可言:我们无法得知积分的真实值 ,但我们通过两次近似结果的差值 ,就能极其精准地估算出当前的实际截断误差恰好就是差值的 ! [11.4]
因此,只要我们在程序里监测到 (比如 ),我们就能百分之百自信地确信:当前最新的估算值 的实际误差绝对不会超过 (即 )!我们可以立刻安全地终止程序,输出结果。这就是变步长数值积分的精髓所在。
12. 理查森外推与龙贝格算法
12.1 理查森外推思想
人话:一个近似量的误差可以写成 h² 的级数,那么用两个不同步长计算出的结果,可以"消除"最低阶误差项,得到更高精度的近似。
12.2 外推原理
数值微分/积分公式的误差可以写成 h 的偶次幂级数:
D(h) = D_exact + A·h² + B·h⁴ + C·h⁶ + ...
↑ 用两个不同h消掉这项
消去 h² 项:用步长 h 和 h/2 各算一次
D_exact ≈ D(h/2) + [D(h/2) - D(h)] / 3 ← 精度提升两阶!
或者记作: D^(1) = (4·D(h/2) - D(h)) / 3
这就是理查森一阶外推公式!
- 精度跃升:原来的 和 都只有二阶精度 。
- 但通过这个极其简单的线性组合,我们不费吹灰之力,将最低阶误差项 彻底消灭,得到的 精度瞬间暴涨到了 四阶精度 !
12.3 数值例子(微分外推)
用中心差分计算 f'(1),f(x)=sin x:
步长 h=0.4:
D(0.4) = [sin(1.4)-sin(0.6)]/0.8
= (0.9854-0.5646)/0.8 = 0.5260
步长 h=0.2:
D(0.2) = [sin(1.2)-sin(0.8)]/0.4
= (0.9320-0.7174)/0.4 = 0.5365
外推一次: D_exact ≈ D(0.2) + [D(0.2)-D(0.4)]/3
= 0.5365 + 0.0105/3 = 0.5400
真实值: cos(1) = 0.5403 ← 外推后精度大幅提升!
原始误差 0.0142 → 0.0003
12.4 Romberg 积分
理查德外推 可以将精度提升两阶的好用的东西 那么 Romberg积分 就是把这一手段无限嵌套、循环使用的终极策略!!!
理查森外推 + 复合梯形公式 = Romberg 积分。
梯形法逐次二分 → 用不同步长的结果外推 → 精度跃升。
Romberg算法的直观理解:
复合梯形公式 的精度是
如果我们把 和 进行一次理查森外推,消去 项,得到的新结果其精度为 。在数学上,这个结果恰好等价于复合 Simpson 公式 的值 !
同理,既然我们有了好几个不同步长的 Simpson 值 和 (精度均为 ),那我们能不能对它们再做一次外推,消去 项? 可以!外推后,精度再次暴涨两阶,达到 ,这恰好等价于复合 Cotes 公式 。
以此类推,我们对 Cotes 的值再做外推,就能得到拥有 恐怖精度的 Romberg 值 !
Romberg 表格(T-表):
第0列(T₀): 复合梯形 O(h²)
第1列(T₁): Simpson O(h⁴) = (4×T₀(h/2) - T₀(h)) / 3
第2列(T₂): Cotes O(h⁶) = (16×T₁(h/2) - T₁(h)) / 15
第3列(T₃): Romberg O(h⁸) = (64×T₂(h/2) - T₂(h)) / 63
核心递推公式
j :代表列 精度阶数 也就是 外推了多少次
k:代表行 区间划分次数 即二分了多少次
j = 0 j = 1 j = 2 j = 3
梯形列 Simpson列 Cotes列 Romberg列
(原始计算) (一阶外推) (二阶外推) (三阶外推)
─────────────────────────────────────────────────────────────k = 0 (1段) T_0^(0) ──┐
│k = 1 (2段) T0^(1) ──┴───→ T1^(0) ──┐
│ │k = 2 (4段) T0^(2) ──┴───→ T1^(1) ──┴───→ T_2^(0) ──┐
│ │ │k = 3 (8段) T0^(3) ──┴───→ T1^(2) ──┴───→ T2^(1) ──┴───→ T3^(0)
现在你再去看这个外推公式:
就会发现,要计算一个新位置 ,它只依赖于它左边那一列($j-1$)的两个相邻数3:
- 一个是它左下方的数:
- 一个是它正左方的数:
我们要算 Simpson 列的第一项 ( ):
我们需要它左下方的 和正左方的 :
我们要算 Cotes 列的第一项 ( ) [12.5]:
我们需要它左下方的 和正左方的 :
可以来拆解下不同列 就是 不同 j 时候的具体的代数形式:
1、j = 1 (k = 0 做一次二分)从梯形外推到 Simpson:
带入数值 可以得到
用来消去 项的标准理查森外推公式
当 时(从 Simpson 外推到 Cotes):
因为此时我们要消去的是 项,它的误差变化比例是 。
所以我们要用系数 来消元 [12.4]:
当 时(从 Cotes 外推到 Romberg):
消去 项,误差变化比例是
数学的和谐之美在此处展现得淋漓尽致。所有的外推步骤都被优雅地统一在了一个极其简单的公式 中。在写代码时,只需要两层循环,就能把整张 Romberg 表源源不断地算出来。
12.5 Romberg 完整数值例子
计算 ∫₀¹ 1/(1+x) dx = ln 2 ≈ 0.693147
步骤1 — 逐次二分梯形:
n=1, h=1:
T₀^(0) = 1·[1 + 1/2]/2 = 0.750000
n=2, h=0.5:
T₀^(1) = 0.5/2·[1 + 2×(1/1.5) + 1/2]
= 0.25·[1 + 1.3333 + 0.5] = 0.708333
n=4, h=0.25:
T₀^(2) = 0.25/2·[1 + 2×(1/1.25+1/1.5+1/1.75) + 1/2]
= 0.125·[1 + 4.0762 + 0.5] = 0.697024
n=8, h=0.125:
T₀^(3) = ... = 0.694122
步骤2 — Romberg 外推:
Simpson列:
T₁^(0) = (4×0.708333 - 0.75)/3 = 0.694444
T₁^(1) = (4×0.697024 - 0.708333)/3 = 0.693254
T₁^(2) = (4×0.694122 - 0.697024)/3 = 0.693155
Cotes列:
T₂^(0) = (16×0.693254 - 0.694444)/15 = 0.693175
T₂^(1) = (16×0.693155 - 0.693254)/15 = 0.693148
Romberg列:
T₃^(0) = (64×0.693148 - 0.693175)/63 = 0.693147 ← 精度极高!
Romberg T-表可视化:
k 梯形 O(h²) Simpson O(h⁴) Cotes O(h⁶) Romberg O(h⁸)
0 0.750000
1 0.708333 0.694444
2 0.697024 0.693254 0.693175
3 0.694122 0.693155 0.693148 0.693147
💡 物理直觉:Romberg 就像"梯度下降"逼近真实值——每一步二分梯形只提供 O(h²) 精度,但两次二分结果组合一下就能跃升到 O(h⁴),再组合到 O(h⁶)...到最后只用梯形公式算 8 段就能达到 O(h⁸) 精度!
13. 高斯积分
13.1 核心思想
牛顿-柯特斯用 n+1 个等距点达到最多 n+1 次代数精度。但如果允许节点位置自由选择,用同样的 n+1 个点可以达到 2n+1 次代数精度!——这就是高斯积分的精髓。
直观对比:
牛顿-柯特斯 (等距点): n+1 个点 → n+(n的奇偶修正) 次精度
高斯积分 (最优选点): n+1 个点 → 2n+1 次精度 ← 翻倍!
核心思想:打破等距的限制!
在前面的 N-C公式中 都有一个默认的限制:节点 x_i 必须是等距离分布的
如果我们固定使用 n+1 个等距节点, 我们最多只能获得 n+1 次代数精度(如果n为偶数,可以利用对称性提升到 n+2 阶精度)
如果我们把这 个节点 的位置也当作可以自由调整的未知数,那么:
- 我们有 个可自由移动的节点位置 ;
- 我们有 个对应的求积权重 。
一共有 2n+2 自由度 理论上可以写出 2n+2 个代数方程 从而使得 求积公式 对所有次数 不超过 2n+1 的多项式 都达到 绝对精确
13.2 高斯点条件
定理: 是高斯点的充要条件——多项式 与所有不超过 n 次的多项式 P_n(x) 在 [a,b] 上正交。
为什么正交能带来高精度?
这里有一个极其优美的代数证明: 对于任意一个最高次数为 的多项式 ,我们都可以用 (它是 次多项式)去除它。根据多项式带余除法,一定可以写成: 其中:
- 商式 的次数最高为 次。
- 余式 的次数最高也为 次。
现在,我们对 求精确积分: 如果 正交于所有不超过 次的多项式(而 正好不大于 次),那么根据正交性的定义,第一项积分直接归零 [13.2, 13.3]: 因此,真实积分值完全退化为:
接下来,我们用高斯公式来计算 的近似积分。
由于高斯节点 正好是 的零点(即 ),所以:
因此高斯积分公式给出:
因为 只是一个最高 次的多项式,而任何包含 个节点的插值型求积公式对 次多项式都是绝对精确的:
把这几步串起来:
其中 权重 :是这些代表所拥有的“投票权大小”(即话语权比重)
我们要算一段区间的积分(也就是求围成的图形面积),高斯积分就是只挑选 个特定位置的函数值 进行加权求和:
证毕! 这个证明堪称数学史上最优雅的篇章之一。它表明:只要把节点选在正交多项式的零点上,高阶多项式中高于 次的部分就会因为正交性被“自动过滤”掉,使公式精度奇迹般地翻倍!
13.3 高斯-勒让德积分
在 [-1,1] 上,取勒让德多项式 的零点作为高斯点。
为什么是勒让德? 勒让德多项式天然在 [-1,1] 上正交!
勒让德多项式
P₀(x) = 1
P₁(x) = x
P₂(x) = (3x² - 1)/2
P₃(x) = (5x³ - 3x)/2
P₄(x) = (35x⁴ - 30x² + 3)/8
递推: (n+1)·P_{n+1}(x) = (2n+1)·x·P_n(x) - n·P_{n-1}(x)
正交性: ∫^{1}_{-1} P_m(x)·P_n(x) dx = 0 (m ≠ n)
归一化: ∫^{1}_{-1} [P_n(x)]² dx = 2/(2n+1)
求节点:以 n=2(3点)为例
3 个高斯点 = P₃(x) 的 3 个零点:
P₃(x) = (5x³ - 3x)/2 = 0
→ x·(5x² - 3) = 0
→ x₀ = -√(3/5) ≈ -0.774597
x₁ = 0
x₂ = √(3/5) ≈ +0.774597
求权重:解矩方程
高斯积分公式:
要求对 都精确(3 点可达 2×3-1=5 次精度):
对 f(x)=1: ∫1 dx = 2 = A₀+A₁+A₂
对 f(x)=x: ∫x dx = 0 = A₀·(-√0.6) + A₁·0 + A₂·(√0.6)
→ A₀ = A₂
对 f(x)=x²: ∫x²dx = 2/3 = A₀·(0.6) + A₁·0 + A₂·(0.6)
→ 2A₀·0.6 = 2/3, A₀ = 5/9
→ A₀ = A₂ = 5/9, A₁ = 2 - 10/9 = 8/9
矩阵形式理解(矩方程):
┌ ┐ ┌ ┐ ┌ ┐
│ 1 1 1 │ │ A₀ │ │ ∫1·x⁰dx = 2 │
│ x₀ x₁ x₂ │ │ A₁ │ │ ∫1·x¹dx = 0 │
│ x₀² x₁² x₂² │ │ A₂ │ = │ ∫1·x²dx =2/3 │
└ ┘ └ ┘ └ ┘
代入 x₀=-√0.6, x₁=0, x₂=√0.6,解线性方程组得权重
13.4 高斯-勒让德节点与权重表
| n | 节点 xₖ | 权重 Aₖ |
|---|---|---|
| 1 | 0 | 2 |
| 2 | ±1/√3 ≈ ±0.577350 | 1, 1 |
| 3 | 0, ±√(3/5) ≈ ±0.774597 | 8/9, 5/9, 5/9 |
| 4 | ±0.339981, ±0.861136 | 0.652145, 0.347855 |
| 5 | 0, ±0.538469, ±0.906180 | 0.568889, 0.478629, 0.236927 |
13.5 积分区间变换
由于勒让德多项式天然正交于区间 [13.3],所有标准的高斯点和权重表都是针对 设计的 [13.4]。 如果实际积分区间是 ,我们必须进行一次线性自变量替换。
令 。我们希望当 时 ,当 时 。
代入解方程组:
由此得到经典的区间映射变换式:
同时,微分项也需要按比例缩放: 权重也需要同步缩放 !
高斯-勒让德节点在 [-1,1] 上,实际积分区间 [a,b] 需要变换:
∫_a^b f(x)dx = (b-a)/2 × ∫_{-1}^{1} f((a+b)/2 + (b-a)t/2) dt
≈ (b-a)/2 × Σ Aₖ·f((a+b)/2 + (b-a)xₖ/2)
k
通俗转化:
变量替换: x = (a+b)/2 + (b-a)t/2
→ dx = (b-a)/2 · dt
→ t∈[-1,1] 时 x∈[a,b]
权重也缩放: Aₖ' = (b-a)/2 × Aₖ
13.6 数值例子(n=2,3点高斯)
计算 ∫₋₁¹ x⁴ dx = 2/5 = 0.4
节点: x₀=-√0.6, x₁=0, x₂=√0.6
权重: A₀=5/9, A₁=8/9, A₂=5/9
高斯积分 = A₀(x₀)⁴ + A₁(0)⁴ + A₂(x₂)⁴
= 5/9 × 0.36 + 0 + 5/9 × 0.36
= 10/9 × 0.36 = 0.4 ← 精确!
而Simpson (3个等距点):
= 1/3 × [(-1)⁴ + 4×0⁴ + 1⁴] = 2/3 ≈ 0.667 ← 误差巨大!
原因: Simpson对3次以下精确,x⁴是4次 → 有误差
3点高斯对5次以下都精确!
13.7 带权高斯积分
解决数值积分中的两个超级痛点:
- 积分区间是无穷大( )怎么办?
- 函数在端点会爆炸(奇点, )怎么办?
| 类型 | 区间 | 权函数 ρ(x) | 正交多项式 | 用途 |
|---|---|---|---|---|
| Gauss-Legendre | [-1,1] | 1 | 勒让德 | 标准有限区间积分 |
| Gauss-Laguerre | [0,∞) | e^(-x) | 拉盖尔 | 半无限区间 + 指数衰减 |
| Gauss-Hermite | (-∞,∞) | e^(-x²) | 厄米 | 全无限区间 + 高斯衰减 |
| Gauss-Chebyshev | [-1,1] | 1/√(1-x²) | 切比雪夫 | 端点有奇性的积分 |
公式形式: ,节点 xₖ 是相应正交多项式的零点。
把困难的会爆炸的或者趋于无穷的部分 剥离给 让可以进行 Guass积分处理的部分 留在f(x)!
💡 延伸思考:高斯-勒让德是"默认选项"、精度极高,但节点不在积分区间的端点(这对某些问题不方便)。高斯-拉盖尔伽利厄米积分天然处理无穷区间,在量子力学中极其重要——例如 ∫₋∞^∞ e^{-x²} f(x) dx 用 Gauss-Hermite 只需几个点就有高精度。
本质上是“正交多项式家族”针对不同物理舞台的量身定制 !!!
用最好的计算点数 避开所有数学陷阱 算出精确的积分!
14. WKB 近似
14.1 物理背景
WKB(Wentzel-Kramers-Brillouin)方法是量子力学中近似处理势垒穿透(tunneling)问题的半经典方法。一个粒子要穿过势垒的概率可以用一个积分来表示。
14.2 WKB 公式
WKB 方法的物理本质,是将量子波函数 写成关于普朗克常数 的渐近展开式
其中 对应经典力学中的哈密顿-雅可比作用量。
- 经典极限:当 时,体系的行为完全退化为牛顿经典力学。
- 量子修正:当 有限大时,它保留了波的相位信息,从而能够描述经典粒子绝对无法完成的“穿墙术”——量子隧穿
穿透因子(穿透几率)物理意义:代表粒子穿过势垒 的隧穿几率(即成功率)
周期因子:
寿命:τ = T / W
14.3 公式含义
V(q)
↑
E₀ ──├─────┐ ← ┌── 势垒(V > E₀,经典禁戒区)
│ │ │
│ a │ b c │
──────┘ └─────────└──→ q
a, b: 经典允许区边界(V(a)=V(b)=E₀)
b, c: 势垒区(V(q) > E₀,粒子需要隧穿)
[a,b]: 周期 T 的积分区间 → 粒子在阱中的往返时间
[b,c]: 穿透因子 W 的积分区间 → 决定穿透概率的指数
14.4 数值实现思路
给定表格形式的 V(q) 和 M(q) 离散数据(形变 q 从 0 到 2.5),计算隧穿寿命 τ:
步骤1: 插值 V(q) 和 M(q)(用三次样条获得光滑曲线)
步骤2: 确定临界点 a, b, c(解方程 V(q)=E₀)
→ 用二分法或牛顿法在插值曲线上找根
步骤3: 用高斯积分计算 ∫_b^c √(M(q)(V(q)-E₀)) dq
步骤4: 计算 W = exp(-2×积分结果)
步骤5: 用高斯积分计算 ∫_a^b dq/√((E₀-V(q))/M(q))
步骤6: T = ℏ × 步骤5的结果
步骤7: τ = T / W
数值细节:
- 临界点 a, b, c 通过插值后的 V(q) 曲线用二分法或牛顿法找到
- 在 b 和 c 附近 V(q)≈E₀,被积函数趋于 0 或无穷 → 需小心处理端点奇性
- 被积函数剧烈变化 → 高斯积分比等距公式更高效
💡 物理直觉:W 是量子力学中的穿透因子——势垒越宽越高,W 越小,穿透越不可能。τ 是经典周期除以穿透概率——只有在势垒内来回反射很多次才会偶尔穿透一次,所以寿命 τ 可以比经典周期长很多数量级。这就是为什么某些放射性核素的半衰期可以长达数十亿年。
15. 总结对比表
15.1 插值方法对比
| 方法 | 阶数 | 节点条件 | 光滑性 | 计算量 | 振荡风险 | 适用场景 |
|---|---|---|---|---|---|---|
| 拉格朗日 | N 次全局 | 函数值 | C^∞ | O(N²) | ⚠️ 高(龙格) | 点数少 |
| Hermite | 2N+1 次 | 函数值+导数 | C^∞ | O(N²) | ⚠️ 高 | 已知导数 |
| 三次样条 | 分段 3 次 | 函数值+C²连续 | C² | O(N) | ✅ 低 | 一般光滑数据 |
| Akima | 分段 3 次 | 函数值+C¹连续 | C¹ | O(N) | ✅ 很低 | 效率/局部性优先 |
15.2 数值微分公式对比
| 公式 | 点数 | 误差阶 | 公式 |
|---|---|---|---|
| 前向差分 | 2 | O(h) | [f(x+h)-f(x)]/h |
| 中心差分 | 3 | O(h²) | [f(x+h)-f(x-h)]/(2h) |
| 五点中点 | 5 | O(h⁴) | [-f(x+2h)+8f(x+h)-8f(x-h)+f(x-2h)]/(12h) |
| 二阶差分 | 3 | O(h²) | [f(x+h)-2f(x)+f(x-h)]/h² |
15.3 数值积分方法对比
| 方法 | 节点分布 | 节点数 | 代数精度 | 误差阶 | 特点 |
|---|---|---|---|---|---|
| 梯形 (n=1) | 等距 | 2 | 1 | O(h³) | 最简单 |
| Simpson (n=2) | 等距 | 3 | 3 | O(h⁵) | 性价比高 |
| 柯特斯 (n=4) | 等距 | 5 | 5 | O(h⁷) | 高精度等距 |
| 复合Simpson | 等距×多段 | N+1 | 3 | O(h⁴) | 稳健实用 |
| Romberg | 嵌套二分 | 2ᵏ+1 | 随列递增 | O(h^(2j+2)) | 精度可逐次提升 |
| 高斯-勒让德 | 最优分布 | n+1 | 2n+1 | — | 精度最高/n固定 |
| 高斯-拉盖尔 | 最优分布 | n+1 | 2n+1 | — | [0,∞) 半无限区间 |
| 高斯-厄米 | 最优分布 | n+1 | 2n+1 | — | (-∞,∞) 全无限区间 |
15.4 方法选择决策树
需要做什么?
├── 只有离散数据点,需要中间值
│ ├── 点数少(=10)→ 拉格朗日/ Hermite 插值
│ ├── 点数多,要光滑 → 三次样条
│ └── 点数多,要效率 → Akima 插值
│
├── 需要一阶导数
│ ├── 有解析函数 → 中心差分 O(h²)
│ ├── 有离散数据 → 先样条插值再求导
│ └── 边界处 → 三点端点公式
│
├── 需要定积分
│ ├── 被积函数光滑,任意点可求值
│ │ ├── 要绝对高精度 → 高斯积分(n 点有 2n+1 次精度)
│ │ ├── 渐进式提高精度 → Romberg 积分
│ │ └── 简单快速 → 复合 Simpson
│ ├── 只有等距表格数据 → 复合 Simpson/柯特斯
│ ├── 积分区间无限
│ │ ├── [0,∞) 带 e^{-x} 衰减 → Gauss-Laguerre
│ │ └── (-∞,∞) 带 e^{-x²} 衰减 → Gauss-Hermite
│ └── 有奇点或剧烈振荡 → 自适应积分 + 分段
│
└── 需要WKB隧穿计算
└── 样条插值 + 高斯积分 + 二分法找临界点
15.5 核心概念速记
| 概念 | 一句话理解 |
|---|---|
| 拉格朗日插值 | N+1 个点→N次多项式,"开关函数"加权 |
| 龙格现象 | 多点高次多项式→边缘爆炸振荡 |
| 三次样条 | 分段三次 + C²连续 = 自然弯曲的柔条 |
| 牛顿-柯特斯 | 等距点插值积分 = 固定权重 × 函数值 |
| Simpson 1/3 法则 | 三点抛物线 = 权重 [1,4,1] × h/3 |
| 理查森外推 | 不同步长的结果组合 → 消掉低阶误差 |
| Romberg 积分 | 梯形逐次二分 + 理查森外推 → 精度跃升 |
| 高斯积分 | 选最优位置(非等距)→ 精度翻倍 |
| WKB 近似 | 半经典隧穿:穿透率=指数×积分 |
Akurio 补充整理 笔记结束 · 2026-06-30