数值微分与积分方法

4 小时前(已编辑)
1

数值微分与积分方法

用离散点的函数值近似连续的微分/积分,通过多项式插值作为桥梁——先从离散点构造插值多项式,再对多项式求导/积分获得数值微分/积分公式。


📑 目录


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 个点 (x0,y0)...(xN,yN)(x₀,y₀)...(x_N,y_N),找一个 N 次多项式 P(x) 恰好穿过这些点。做法是构造一组"开关函数" ℓk(x),每个 ℓk 在自己那个点等于 1,在其他点等于 0。

2.2 插值基函数

第 k 个基函数 k(x)ℓ_k(x) 的构造(N+1 个点,k = 0, 1, ..., N):

k(x)=(xx0)(xkx0)(xx1)(xkx1)...(xxk1)(xkxk1)((xxk+1)(xkxk+1)...(xxN)(xkxN) ℓ_k(x) = \frac{(x - x₀)}{(x_k - x₀)} · \frac{(x - x_1)}{(x_k - x_1)} · ... · \frac{(x - x_{k-1})}{(x_k - x_{k-1})} · (\frac{(x - x_{k+1})}{(x_k - x_{k+1})} · ... ·\frac{(x - x_{N})}{(x_k - x_{N})}

中文解释:分子是 (x - 除了xk以外的所有xi) 连乘,分母是 (xk - 除了xk以外的所有xi) 连乘。当 x=xk 时分子分母完全相同,结果为1;当 x=xi(i≠k)时,分子中有一个因子 (xi - x_i)=0,结果为0。这就是"开关"效果。

2.3 插值多项式

拉格朗日插值多项式 = 各点函数值 × 对应基函数的加权和:

P(x)=y00(x)+y11(x)+...+yNN(x) P(x) = y₀·ℓ₀(x) + y₁·ℓ₁(x) + ... + y_N·ℓ_N(x)

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 之间):

R(x)=f(x)P(x)=fN+1(ξ)(N+1)!(xx0)(xx1)...(xxN) R(x) = f(x) - P(x) = \frac{f^{N+1}(ξ)}{(N+1)!} · (x-x₀)(x-x₁)...(x-x_N)

数值理解

误差 = 第(N+1)阶导数的值 / (N+1)的阶乘 × 所有距离的乘积
       ↑ 表示函数的弯曲程度      ↑ 表示点之间的距离效应
  • 函数越"弯"(高阶导数大)→ 误差越大
  • 点越多、阶乘越大 → 分母越大 → 误差可能减小
  • 但!龙格现象会破坏这个直觉(见第4节)

3. 厄密插值

3.1 核心思想

人话:拉格朗日只用了函数值 yₖ。如果还知道每一点的导数 y'ₖ,就能做得更精确——用 2N+1 次多项式的精度。

3.2 插值条件

已知 N+1 个点,每个点有 两个信息

  • 函数值: f(xk)=ylf(x_{k}) = y_{l}
  • 一阶导数: f(xk)=ykf'(x_{k}) = y^{'}_{k}

总共 2N+2 个条件 → 可以确定 2N+1 次多项式!

3.3 Hermite 基函数

构造两类基函数:

  • hk(x)hₖ(x):在第 k 个点 hₖ(xₖ)=1,且 hₖ'(xₖ)=0;在其他所有点 hₖ(xⱼ)=0, hₖ'(xⱼ)=0
  • h^k(x)ĥₖ(x):在第 k 个点 ĥₖ(xₖ)=0,且 ĥₖ'(xₖ)=1;在其他所有点 ĥₖ(xⱼ)=0, ĥₖ'(xⱼ)=0

Hermite 插值多项式:

H(x)=ykhk(x)+ykhk^ H(x) = \sum y_{k} h_{k}(x) + \sum y_{k}^{'} \hat{h_{k}}

​ ↑ 函数值贡献 ↑ 导数值贡献

设拉格朗日插值基函数为 Li(x)(它在 xi处为1,在其他节点处为0)。我们定义两组新的基函数:

  1. A_i(x):负责控制函数值。它保证在 xi处值为1,导数为0;在其他节点处值为0,导数为0。
  2. B_i(x):负责控制导数值。它保证在 xi处值为0,导数为1;在其他节点处值为0,导数为0。

公式如下(这是你需要记住的黄金公式):

H(x)=i=0n[yiAi(x)+yiBi(x)] H(x) = \sum_{i = 0}^{n} [y_i \cdot A_{i}(x) + y_{i}^{'} \cdot B_{i}(x)]

其中:

Ai(x)=[12(xxi)Li(xi)][Li(x)]2 A_i (x) = [1 - 2(x-x_i)L_{i}^{'}(x_i)] \cdot [L_{i}(x)]^{2}
Bi(x)=(xxi)[Li(x)]2 B_{i}(x) = (x- x_i) \cdot [L_i(x)]^{2}

直观理解: 平方项 [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 插值用更少的点达到更高的精度

即三次插值

具体的推导

两个节点 x0,x1x_{0} , x_{1}

引入 t=xx0x1x0,h=x1x0t = \frac{x-x_{0}}{x_1 - x_0} , h = x_1 - x_0

借助上述归一化后 Lagrange插值中 两个最基本的 一次基函数 为:

L0(x)=xx1x0x1=h(t1)h=1tL1(x)=xx0x1x0=t L_0(x) = \frac{x-x_1}{x_0-x_1} = \frac{h(t-1)}{-h} = 1-t \\ L_1(x) = \frac{x-x_0}{x_1-x_0} = t

对于x求导,而非对t求导!!!(回归关于x的等式然后求导即可)

L0(x)=1hL1(x1)=1h L_0^{'}(x) = - \frac{1}{h} \\ L_1^{'}(x_1) = \frac{1}{h}

带入公式

Ai(x)=[12(xxi)Li(xi)][Li(x)]2 A_i (x) = [1 - 2(x-x_i)L_{i}^{'}(x_i)] \cdot [L_{i}(x)]^{2}
Bi(x)=(xxi)[Li(x)]2 B_{i}(x) = (x- x_i) \cdot [L_i(x)]^{2}

可得到

A1(x)=[12(xx1)L1(x1)][L1(x)]2=2t3+3t2 A0(x)=[12(xx0)L0(x0)][L0(x)]2=(1t)2(1+2t)=2t33t2+1 B0(x)=(xx0)[L0(x)]2=h(t3t2+t) b1(t)=h(t3t2) A_1(x) = [1-2(x-x_1)L_1^{'}(x_1)]\cdot [L_1(x)]^{2} = -2t^{3}+3t^2 \\ \space \\ A_0(x) = [1-2(x-x_0)L_0^{'}(x_0)]\cdot [L_0(x)]^{2} = (1-t)^2 (1+2t) = 2t^3-3t^2+1 \\ \space \\ B_0(x) = (x-x_0)\cdot [L_0(x)]^2 = h \cdot (t^3 - t^2 + t) \\ \space \\ b_1(t) = h \cdot (t^3 - t^2)

就得到了

H(t)=y0(2t33t2+1)+y1(2t3+3t2)+y0h(t32t2+t)+y1h(t3t2) H(t) = y_0 (2t^3 - 3t^2 +1) + y_1 (-2t^3 + 3t^2) + y_0^{'}\cdot h(t^3 - 2t^2 +t) + y_1^{'}\cdot h(t^3-t^2)

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) 在 x0x_0 的取值

插值: 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²),关于中心点对称

除了从插值多项式求导,还可以先做样条插值 → 对样条函数直接解析求导,这样得到的导数在整个区间连续且光滑。

样条插值微分的优雅解决方案:
  1. 全局拟合:我们先用上一节学到的三次样条插值(Cubic Spline),将所有数据点拟合成一条全局光滑的曲线。 在每一个区间上,我们都得到了一个极其平滑的解析函数: Sj(x)=aj+bj(xxj)+cj(xxj)2+dj(xxj)3S_j(x) = a_j + b_j(x-x_j) + c_j(x-x_j)^2 + d_j(x-x_j)^3
  2. 解析求导:因为我们已经求出了所有的系数 aj,bj,cj,dja_j, b_j, c_j, d_j,所以我们可以直接在数学上对这个三次多项式求导,得到一阶和二阶导数: Sj(x)=bj+2cj(xxj)+3dj(xxj)2S'_j(x) = b_j + 2c_j(x-x_j) + 3d_j(x-x_j)^2 Sj(x)=2cj+6dj(xxj)S''_j(x) = 2c_j + 6d_j(x-x_j)
这样做的巨大优势:
  • 全局一阶连续性:在所有数据点的拼接处,样条插值本身就强制要求了一阶和二阶导数的连续性。因此,你求出来的导数曲线 S(x)S'(x) 将是一条完全无缝、平滑的连续曲线,而不会像普通差分法那样在点与点之间出现不连续的跳跃。
  • 天然的去噪抗噪性:样条插值在求解三对角方程组时,相当于把每一个点的变动通过全局约束“平摊”到了整根铁丝上,它具有物理上最小弯曲能量的限制,因此它对局部的噪声点具有极强的过滤作用。求导出来的结果远比直接做差分要稳定得多!

10. 牛顿-柯特斯积分

10.1 核心思想

人话:从拉格朗日插值多项式出发,直接对整个插值多项式求定积分。

∫f(x)dx ≈ ∫P(x)dx。因为多项式积分有解析公式,所以得到的就是加权和形式的数值积分公式。

数值积分!!! 工程计算中 很核心的广泛应用的领域

News-Cotes Formulas

10.2 通用形式

对于一个复杂的连续函数 f(x) 无法直接求出原函数 就利用一个好积分的函数去近似 f(x) 然后对于近似的函数求取积分 —— 好的函数 就是 多项式(插值前面的方法)

设我们在等距分点 xk=a+khx_k = a + k \cdot h (其中 步长为 h=banh = \frac{b-a}{n} ) 构造一个 n次的的拉格朗日多项式 Pn(x)P_{n}(x)

f(x)Pn(x)=k=0nf(xk)Lk(x) f(x) \sim P_{n}(x) = \sum_{k = 0}^{n} f(x_k) L_k(x)

L(x) 就是Lagrange 基函数:

Lk(x)=i=0,iknxxixkxi L_{k}(x) = \prod_{i=0, i \ne k}^{n} \frac{x- x_i}{x_k - x_i}

现在 我们对这个多项式 在 范围 a 到 b上 进行求和积分:

abf(x)dxabPn(x)dx=abk=0nf(xk)Lk(x)dx \int_{a}^{b} f(x) dx \approx \int_{a}^{b} P_n(x) dx = \int_{a}^{b} \sum_{k=0}^{n} f(x_k) L_k(x) dx

由于积分是线性算子,我们可以将积分号与求和号对调,把已知的节点值 f(xk)f(x_k) 提出来

abf(x)dxk=0nf(xk)abLk(x)dxAk \int_{a}^{b} f(x) dx \approx \sum_{k=0}^{n} f(x_k) \underbrace{\int_{a}^{b} L_k(x) dx}_{A_k}

此为 N-C通用形式的由来!

积分值完全等价于 各个节点值 f(xk)f(x_{k})加权和

权重 Ak=abLk(x)dxA_k = \int_{a}^{b} L_k(x) dx

我们对其进行自变量代换,令 x=a+thx = a + t \cdot h(其中 t[0,n]t \in [0, n]),则 dx=hdtdx = h \cdot dt

Ak=h0ni=0,ikntikidt=(ba)1n0ni=0,ikntikidtCk(n) A_k = h \cdot \int_{0}^{n} \prod_{i=0, i \neq k}^{n} \frac{t - i}{k - i} dt = (b-a) \cdot \underbrace{\frac{1}{n} \int_{0}^{n} \prod_{i=0, i \neq k}^{n} \frac{t - i}{k - i} dt}_{C_k^{(n)}}

这里,Ck(n)C_k^{(n)} 就是著名的柯特斯系数(Cotes Coefficients)。它满足:

  • f(x)f(x) 毫无关系,只与插值阶数 nn 以及节点索引 kk 有关。
  • 对称性:$Ck^{(n)} = C{n-k}^{(n)}$(这是由基函数关于中心点对称的代数结构决定的)。
  • 归一性:$\sum{k=0}^{n} Ck^{(n)} = 1$(因为如果 f(x)=1f(x) = 1,多项式插值是完全精确的,此时积分值为 (ba)(b-a),代入上式必然要求系数和为 1)。

10.3 常用低阶公式

(1) 梯形公式(n=1,2点)

步长 h=bah = b-a,节点为 x0=a,x1=bx_0 = a, x_1 = b

拉格朗日基函数为: L0(x)=xx1x0x1=bxbaL_0(x) = \frac{x - x_1}{x_0 - x_1} = \frac{b - x}{b - a} L1(x)=xx0x1x0=xabaL_1(x) = \frac{x - x_0}{x_1 - x_0} = \frac{x - a}{b - a}

求它们的积分: A0=abbxbadx=1ba[bx12x2]ab=(ba)22(ba)=ba2A_0 = \int_{a}^{b} \frac{b - x}{b - a} dx = \frac{1}{b-a} \left[ bx - \frac{1}{2}x^2 \right]_{a}^{b} = \frac{(b-a)^2}{2(b-a)} = \frac{b-a}{2} 同理,由于对称性, A1=ba2A_1 = \frac{b-a}{2}

所以,我们极其自然地得到了梯形公式: abf(x)dxba2[f(a)+f(b)]\int_{a}^{b} f(x) dx \approx \frac{b-a}{2} [f(a) + f(b)]

柯特斯系数为 [C0(1),C1(1)]=[12,12][C_0^{(1)}, C_1^{(1)}] = [\frac{1}{2}, \frac{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点,抛物线法则)

步长 h=ba2h = \frac{b-a}{2},三个节点分别为:$x0 = a$,$x1 = \frac{a+b}{2}$,$x_2 = b$。

为了简化积分计算,我们做无损平移,让中点 x1x_1 落在原点 00 上。 此时,三个节点变为:$-h, 0, h$。 我们来写出 L1(x)L_1(x) 的表达式:

L1(x)=(xx0)(xx2)(x1x0)(x1x2)=(x+h)(xh)(0+h)(0h)=h2x2h2L_1(x) = \frac{(x - x_0)(x - x_2)}{(x_1 - x_0)(x_1 - x_2)} = \frac{(x + h)(x - h)}{(0 + h)(0 - h)} = \frac{h^2 - x^2}{h^2}

L1(x)L_1(x) 进行在 [h,h][-h, h] 上的积分:

A1=hhh2x2h2dx=1h2[h2x13x3]hh=1h2(2h323h3)=43hA_1 = \int_{-h}^{h} \frac{h^2 - x^2}{h^2} dx = \frac{1}{h^2} \left[ h^2 x - \frac{1}{3}x^3 \right]_{-h}^{h} = \frac{1}{h^2} \left( 2h^3 - \frac{2}{3}h^3 \right) = \frac{4}{3}h

由于总区间长度为 ba=2hb-a = 2h,所以: A1=23(ba)    C1(2)=23=46A_1 = \frac{2}{3}(b-a) \implies C_1^{(2)} = \frac{2}{3} = \frac{4}{6}

由对称性,另外两个系数 A0=A2A_0 = A_2。 又因为所有系数和必须为 ba=2hb-a = 2h,所以: A0+A2=2h43h=23h    A0=A2=13h=ba6A_0 + A_2 = 2h - \frac{4}{3}h = \frac{2}{3}h \implies A_0 = A_2 = \frac{1}{3}h = \frac{b-a}{6}C0(2)=C2(2)=16C_0^{(2)} = C_2^{(2)} = \frac{1}{6}

Simpson 公式诞生:

abf(x)dxba6[f(a)+4f(a+b2)+f(b)] \int_{a}^{b} f(x) dx \approx \frac{b-a}{6} [f(a) + 4f\left(\frac{a+b}{2}\right) + f(b)]
区间 [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₂]ᵀ

具体数值

02x2dxh=1\int_{0}^{2} x^{2} dx ,h=1

三个点: 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次精度)

误差O(h5f(4)(ξ))O(h⁵·f⁽⁴⁾(ξ)),有 3 次代数精度。

代数精度(Degree of Precision)

定义:如果一个数值积分公式对于任意次数不超过 mm 的多项式都能完全精确地成立,而对于 m+1m+1 次多项式不精确,则称该公式具有 mm 次代数精度

按照常理,我们用 nn 次拉格朗日多项式去近似函数并做积分,得到的公式应该刚好能对 nn 次多项式精确,即具有 nn 次代数精度。

  • 比如梯形公式($n=1$)对 f(x)=xf(x)=x 精确,代数精度为 11

但是,Simpson公式($n=2$)创造了一个数学奇迹! 它使用的是二次插值(抛物线),理论上只能对二次多项式精确。但是,它对任意三次多项式 f(x)=x3f(x) = x^3 居然也是完美精确的! 它的代数精度是 3

为什么会平空多出一阶精度?

我们用泰勒展开在对称中心 x1x_1 处对误差项进行分析。

由于 Simpson 公式的节点在几何上是完全对称的,当我们把积分误差展开成泰勒级数时,所有奇数阶的误差项会因为正负抵消而彻底消失

具体来说,对于 f(x)=x3f(x) = x^3,其三阶导数 f(x)f'''(x) 是个常数,其四阶导数 f(4)(x)=0f^{(4)}(x) = 0。 而 Simpson 公式的截断误差公式为: R[f]=(ba)52880f(4)(ξ)R[f] = -\frac{(b-a)^5}{2880} f^{(4)}(\xi) 因为 f(4)(ξ)=0f^{(4)}(\xi) = 0,所以对于任何三次多项式,其误差严格为零

💡 黄金规律:对于等距节点且对称的 Newton-Cotes 公式,当阶数 nn偶数时,其代数精度总是为 n+1n+1。它会无条件向高处赠送一阶精度!

这就是为什么大家极度钟爱偶数点公式(如 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 的权重 AkA_k 本质上就是对拉格朗日基函数 Lk(x)L_k(x) 的积分: 当 n8n \ge 8 时,由于高阶插值在边界处的急剧震荡,基函数在某些区域的值会变得极大且为负数。这直接导致积分出来的柯特斯系数 CkC_k 出现了负数 [10.3, 10.5]。

为什么系数出现负数是致命的?

设我们在计算机中进行数值积分,每个点上的函数值都有微小的舍入误差 ϵk\epsilon_k(由计算机双精度浮点数限制产生)。 我们实际计算出的加权和为: Icalc=k=0nAk(f(xk)+ϵk)=k=0nAkf(xk)+k=0nAkϵkI_{\text{calc}} = \sum_{k=0}^{n} A_k (f(x_k) + \epsilon_k) = \sum_{k=0}^{n} A_k f(x_k) + \sum_{k=0}^{n} A_k \epsilon_k

根据误差传播理论,最终积分结果的误差方差正比于: k=0nAk2\sum_{k=0}^{n} A_k^2

  • 当所有 AkA_k 均为正数时(由于 Ak=ba\sum A_k = b-a): 所有的 AkA_k 都比较小,平方和 Ak2\sum A_k^2 也会非常小。误差被平摊并受到了抑制。
  • 当某些 AkA_k 变为负数时: 由于所有系数的和必须依然等于 (ba)(b-a),这会导致其余正的系数必须变得非常大(例如,有些系数变成 +10+10,有些变成 9-9,它们加起来还是 11)。 但在计算平方和时,负号消失了: (+10)2+(9)2=100+81=1811(+10)^2 + (-9)^2 = 100 + 81 = 181 \gg 1 ——> 这意味着,输入数据中哪怕只有 101610^{-16} 的极其微小的舍入误差,乘以这些巨大的正负权重后,也会在求和过程中被急剧放大,导致最终的积分结果完全失真!

解决方案:复合低阶公式(Composite Rules)

为了避免高阶公式的灾难,我们在实际中绝不使用单段的高阶 Newton-Cotes 公式。 相反,我们会把大区间 [a,b][a, b] 劈成 MM 个极小的子区间。在每一个子区间上,我们只使用极其稳定、绝对不会产生负系数的低阶公式(如复合梯形公式或复合 Simpson 公式),最后把所有子区间的积分值累加起来。 这样既保证了计算的极度稳定,又可以通过增加分点来无限逼近真实积分值。

11. 复合积分与变步长积分

11.1 复合积分思想

一大段区间用高阶公式不如切成很多小段、每段用低阶公式,然后把结果加起来。这就是"复合"求积公式。

11.2 复合 Simpson 公式

代数拼装推导

假设我们将大区间 [a,b][a, b] 等分为 nn 个小段(注意:因为 Simpson 公式本身需要 33 个点才能构成一个子抛物线,所以小区间数 nn 必须是偶数)。 步长 h=banh = \frac{b-a}{n}。我们把这 nn 个区间两两成对地结合起来,一共拼成 M=n/2M = n/2 个双步长区间:

  • 第 1 对:$[x0, x2]$,它的三个点是 x0,x1,x2x_0, x_1, x_2
  • 第 2 对:$[x2, x4]$,它的三个点是 x2,x3,x4x_2, x_3, x_4
  • 第 3 对:$[x4, x6]$,它的三个点是 x4,x5,x6x_4, x_5, x_6
  • \dots
  • 最后 1 对:$[x{n-2}, xn]$,它的三个点是 xn2,xn1,xnx_{n-2}, x_{n-1}, x_n

在每一对上,我们单独套用一次单步长为 hh 的标准 Simpson 公式:

x0x2f(x)dxh3[1f(x0)+4f(x1)+1f(x2)]\int_{x_0}^{x_2} f(x)dx \approx \frac{h}{3} [1 \cdot f(x_0) + 4 \cdot f(x_1) + 1 \cdot f(x_2)]

x2x4f(x)dxh3[1f(x2)+4f(x3)+1f(x4)]\int_{x_2}^{x_4} f(x)dx \approx \frac{h}{3} [1 \cdot f(x_2) + 4 \cdot f(x_3) + 1 \cdot f(x_4)]

x4x6f(x)dxh3[1f(x4)+4f(x5)+1f(x6)]\int_{x_4}^{x_6} f(x)dx \approx \frac{h}{3} [1 \cdot f(x_4) + 4 \cdot f(x_5) + 1 \cdot f(x_6)]

\dots

xn2xnf(x)dxh3[1f(xn2)+4f(xn1)+1f(xn)]\int_{x_{n-2}}^{x_n} f(x)dx \approx \frac{h}{3} [1 \cdot f(x_{n-2}) + 4 \cdot f(x_{n-1}) + 1 \cdot f(x_n)]

最后,我们把这所有的子区间积分全部加起来注意看那些相接的边界点(偶数下标点,如 x2,x4,x6x_2, x_4, x_6 \dots)!

  • 节点 x1x_1 只有第 1 对区间用到,权重为 44
  • 节点 x2x_2 既是第 1 对区间的右端点,又是第 2 对区间的左端点。因此,它的权重被加了两次:$1 + 1 = 2$!
  • 同理,所有奇数下标的节点( x1,x3,x5x_1, x_3, x_5 \dots)都正好落在各自抛物线段的内部,权重永远保持为 44
  • 所有偶数下标的节点( x2,x4,x6x_2, x_4, x_6 \dots),除了最首端的 x0x_0 和最末端的 xnx_n 之外,全部是两个抛物线的交界点,所以权重全部变成 1+1=21+1=2

因此,复合 Simpson 的系数形式被无缝地拼接出来:

abf(x)dxh3[f0+fn+4奇数 ifi+2偶数 i0,nfi] \int_a^b f(x)dx \approx \frac{h}{3} \left[ f_0 + f_n + 4\sum_{\text{奇数 } i} f_i + 2\sum_{\text{偶数 } i \neq 0,n} f_i \right]

将 [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

具体数值例子04x2dx\int_{0}^{4} x² dx,分成 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 误差估计

在数值积分中,误差阶通常被写成 O(hp)O(h^p)

公式 误差阶 n加倍后误差缩小
复合梯形 O(h²) 1/4
复合 Simpson O(h⁴) 1/16
复合柯特斯 O(h⁶) 1/64

假设我们正在用复合 Simpson 求解一个积分。

当我们把划分的段数 nn 加倍(意味着网格步长 hh 缩小到了原来的一半 hnew=12holdh_{\text{new}} = \frac{1}{2}h_{\text{old}}):

因为复合 Simpson 拥有 O(h4)O(h^4) 的高精度收敛性,其截断误差中包含一个 h4h^4 的因子。

ErrornewC(h2)4=Ch416=116Errorold \text{Error}_{\text{new}} \approx C \cdot \left(\frac{h}{2}\right)^4 = C \cdot \frac{h^4}{16} = \frac{1}{16} \text{Error}_{\text{old}}

这意味你只需要付出双倍的计算量,误差就会瞬间暴跌至原来的 116\frac{1}{16}(大约降低了一个数量级还要多)! 这就是高阶复合积分公式在实际工程中展现出的恐怖威力。

11.4 变步长积分

不知道用多大的步长合适,从大步长开始,不断二分,直到相邻两次计算结果足够接近。

不断二分网络 通过“新结果”与“旧结果” 的差值,实时自我估算 当前的绝对误差!

设原本有 nn 段,步长为 hh。它的复合梯形公式结果为:

Tn=h[12f(a)+f(x1)+f(x2)++f(xn1)+12f(b)]T_n = h \left[ \frac{1}{2}f(a) + f(x_1) + f(x_2) + \dots + f(x_{n-1}) + \frac{1}{2}f(b) \right]

现在,我们把每一段一分为二,步长变为 hnew=h2h_{\text{new}} = \frac{h}{2},段数变成 2n2n

新增加的那些中点我们记为 x1/2,x3/2,,xn1/2x_{1/2}, x_{3/2}, \dots, x_{n-1/2}(共 nn 个新增中点)。

现在我们写出全新的 T2nT_{2n}(它一共有 2n+12n+1 个点,我们依然把老点新点在括号里剥离开): T2n=hnew{[12f(a)+f(x1)++12f(b)]所有老点组成的项+f(所有新中点)所有新点组成的项}T_{2n} = h_{\text{new}} \cdot \left\{ \underbrace{\left[ \frac{1}{2}f(a) + f(x_1) + \dots + \frac{1}{2}f(b) \right]}_{\text{所有老点组成的项}} + \underbrace{\sum f(\text{所有新中点})}_{\text{所有新点组成的项}} \right\}

因为 hnew=12hh_{\text{new}} = \frac{1}{2} h,我们把括号前面的 hnewh_{\text{new}} 分配进去:

  • 第一项变成了: 12h[12f(a)+f(x1)++12f(b)]\frac{1}{2} h \cdot \left[ \frac{1}{2}f(a) + f(x_1) + \dots + \frac{1}{2}f(b) \right] 这正是 12Tn\frac{1}{2}T_n
  • 第二项保持原样: hnewf(所有新中点)h_{\text{new}} \cdot \sum f(\text{所有新中点})

于是,我们极其自然地得到了这个递推公式 [11.4]:

T2n=12Tn+hnewf(新增中点) T_{2n} = \frac{1}{2} T_n + h_{\text{new}} \sum f\left( 新增中点 \right)

变步长梯形算法流程

步骤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(对梯形法)

如果T2nTn<ε,则近似积分误差T2nTn/3<ε/3如果 |T₂ₙ - Tₙ| < ε,则近似积分误差 ≈ |T₂ₙ - Tₙ|/3 < ε/3。

为什么这里平空冒出了一个除以 3?

这个结论叫做理查森外推(Richardson Extrapolation)估算,它的推导极其经典:

我们知道复合梯形公式的真实值 II 与其近似值 TnT_n 之间的关系可以写成(其中 CC 是与步长无关的常数): (1)ITn=Ch2+O(h4)(1) \quad I - T_n = C \cdot h^2 + O(h^4)

当我们将区间数加倍到 2n2n 时,新步长变为了 h2\frac{h}{2}。新近似值 T2nT_{2n} 与真实值的关系为: (2)IT2n=C(h2)2+O(h4)=14Ch2+O(h4)(2) \quad I - T_{2n} = C \cdot \left(\frac{h}{2}\right)^2 + O(h^4) = \frac{1}{4} C \cdot h^2 + O(h^4)

我们现在用方程 (1)(1) 减去方程 (2)(2),以此消去未知积分真实值 IIT2nTn=(Ch2)(14Ch2)=34Ch2T_{2n} - T_n = \left( C \cdot h^2 \right) - \left( \frac{1}{4} C \cdot h^2 \right) = \frac{3}{4} C \cdot h^2

由此,我们解出了未知的常量 Ch2C \cdot h^2Ch2=43(T2nTn)C \cdot h^2 = \frac{4}{3} (T_{2n} - T_n)

我们把这个解出来的 Ch2C \cdot h^2 重新代回到方程 (2)(2) 中,去看看当前最新计算出来的 T2nT_{2n} 距离真实值 II 到底还差多少

当前实际误差=IT2n14Ch2=14[43(T2nTn)]=13T2nTn\text{当前实际误差} = |I - T_{2n}| \approx \frac{1}{4} C \cdot h^2 = \frac{1}{4} \cdot \left[ \frac{4}{3} (T_{2n} - T_n) \right] = \frac{1}{3} |T_{2n} - T_n|

证毕! 这个推导简直妙不可言:我们无法得知积分的真实值 II,但我们通过两次近似结果的差值 T2nTn|T_{2n} - T_n|,就能极其精准地估算出当前的实际截断误差恰好就是差值的 13\frac{1}{3} [11.4]

因此,只要我们在程序里监测到 T2nTn<ϵ|T_{2n} - T_n| < \epsilon(比如 3×1063 \times 10^{-6}),我们就能百分之百自信地确信:当前最新的估算值 T2nT_{2n} 的实际误差绝对不会超过 ϵ3\frac{\epsilon}{3}(即 10610^{-6})!我们可以立刻安全地终止程序,输出结果。这就是变步长数值积分的精髓所在。


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

这就是理查森一阶外推公式!

D(1)=4D(h2)D(h)3=D(h2)+D(h2)D(h)3 D^{(1)} = \frac{4 \cdot D\left(\frac{h}{2}\right) - D(h)}{3} = D\left(\frac{h}{2}\right) + \frac{D\left(\frac{h}{2}\right) - D(h)}{3}
  • 精度跃升:原来的 D(h)D(h)D(h2)D(\frac{h}{2}) 都只有二阶精度 O(h2)O(h^2)
  • 但通过这个极其简单的线性组合,我们不费吹灰之力,将最低阶误差项 h2h^2 彻底消灭,得到的 D(1)D^{(1)} 精度瞬间暴涨到了 四阶精度 O(h4)O(h^4)

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算法的直观理解:

复合梯形公式 T0(h)T_0(h) 的精度是 O(h2)O(h^2)

如果我们把 T0(h)T_0(h)T0(h2)T_0(\frac{h}{2}) 进行一次理查森外推,消去 h2h^2 项,得到的新结果其精度为 O(h4)O(h^4)。在数学上,这个结果恰好等价于复合 Simpson 公式 T1(h)T_1(h) 的值

同理,既然我们有了好几个不同步长的 Simpson 值 T1(h)T_1(h)T1(h2)T_1(\frac{h}{2})(精度均为 O(h4)O(h^4)),那我们能不能对它们再做一次外推,消去 h4h^4 项? 可以!外推后,精度再次暴涨两阶,达到 O(h6)O(h^6),这恰好等价于复合 Cotes 公式 T2(h)T_2(h)

以此类推,我们对 Cotes 的值再做外推,就能得到拥有 O(h8)O(h^8) 恐怖精度的 Romberg 值 T3(h)T_3(h)

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

核心递推公式

Tjk=4jTj1k+1Tj1k(4j1) T_{j}^{k} = \frac{4^{j} · T_{j-1}^{k+1} - T_{j-1}^{k} }{(4^{j} - 1)}

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)

现在你再去看这个外推公式: Tj(k)=4jTj1(k+1)Tj1(k)4j1T_{\color{blue}j}^{({\color{red}k})} = \frac{4^j \cdot T_{{\color{blue}j-1}}^{({\color{red}k+1})} - T_{{\color{blue}j-1}}^{({\color{red}k})}}{4^j - 1}

就会发现,要计算一个新位置 Tj(k)T_j^{(k)},它只依赖于它左边那一列($j-1$)的两个相邻数3

  • 一个是它左下方的数: Tj1(k+1)T_{j-1}^{(k+1)}
  • 一个是它正左方的数: Tj1(k)T_{j-1}^{(k)}

我们要算 Simpson 列的第一项 T1(0)T_1^{(0)} ( j=1,k=0j=1, k=0)

我们需要它左下方的 T0(1)T_0^{(1)} 和正左方的 T0(0)T_0^{(0)}T1(0)=4T0(1)T0(0)3T_1^{(0)} = \frac{4 \cdot T_0^{(1)} - T_0^{(0)}}{3}

我们要算 Cotes 列的第一项 T2(0)T_2^{(0)} ( j=2,k=0j=2, k=0) [12.5]:

我们需要它左下方的 T1(1)T_1^{(1)} 和正左方的 T1(0)T_1^{(0)}T2(0)=16T1(1)T1(0)15T_2^{(0)} = \frac{16 \cdot T_1^{(1)} - T_1^{(0)}}{15}

可以来拆解下不同列 就是 不同 j 时候的具体的代数形式:

1、j = 1 (k = 0 做一次二分)从梯形外推到 Simpson:

带入数值 可以得到

T1(k)=4T0(h/2)T0(h)3T_{1}^{(k)} = \frac{4\cdot T_0(h/2)- T_0(h)}{3}

用来消去 h2h^2 项的标准理查森外推公式

j=2j=2 时(从 Simpson 外推到 Cotes):

因为此时我们要消去的是 h4h^4 项,它的误差变化比例是 (12)4=116\left(\frac{1}{2}\right)^4 = \frac{1}{16}

所以我们要用系数 1616 来消元 [12.4]:

T2(k)=42T1(k+1)T1(k)421=16T1(h/2)T1(h)15T_2^{(k)} = \frac{4^2 \cdot T_1^{(k+1)} - T_1^{(k)}}{4^2 - 1} = \frac{16 \cdot T_1(h/2) - T_1(h)}{15}

j=3j=3 时(从 Cotes 外推到 Romberg):

消去 h6h^6 项,误差变化比例是 (12)6=164\left(\frac{1}{2}\right)^6 = \frac{1}{64}

T3(k)=43T2(k+1)T2(k)431=64T2(h/2)T2(h)63T_3^{(k)} = \frac{4^3 \cdot T_2^{(k+1)} - T_2^{(k)}}{4^3 - 1} = \frac{64 \cdot T_2(h/2) - T_2(h)}{63}

数学的和谐之美在此处展现得淋漓尽致。所有的外推步骤都被优雅地统一在了一个极其简单的公式 Tj(k)T_j^{(k)} 中。在写代码时,只需要两层循环,就能把整张 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 阶精度)

如果我们把这 n+1n+1 个节点 x0,x1,,xnx_0, x_1, \dots, x_n 的位置也当作可以自由调整的未知数,那么:

  • 我们有 n+1n+1 个可自由移动的节点位置 xix_i
  • 我们有 n+1n+1 个对应的求积权重 AiA_i

一共有 2n+2 自由度 理论上可以写出 2n+2 个代数方程 从而使得 求积公式 对所有次数 不超过 2n+1 的多项式 都达到 绝对精确

13.2 高斯点条件

定理x0,...,xnx₀,...,x_n 是高斯点的充要条件——多项式 ω(x)=(xx0)(xx1)...(xxn)ω(x) = (x-x₀)(x-x₁)...(x-x_n) 与所有不超过 n 次的多项式 P_n(x) 在 [a,b] 上正交。

为什么正交能带来高精度?

这里有一个极其优美的代数证明: 对于任意一个最高次数为 2n+12n+1 的多项式 f(x)f(x),我们都可以用 ω(x)\omega(x)(它是 n+1n+1 次多项式)去除它。根据多项式带余除法,一定可以写成: f(x)=q(x)ω(x)+r(x)f(x) = q(x)\omega(x) + r(x) 其中:

  • 商式 q(x)q(x) 的次数最高为 nn 次。
  • 余式 r(x)r(x) 的次数最高也为 nn 次。

现在,我们对 f(x)f(x) 求精确积分: abf(x)dx=abq(x)ω(x)dx+abr(x)dx\int_a^b f(x)dx = \int_a^b q(x)\omega(x)dx + \int_a^b r(x)dx 如果 ω(x)\omega(x) 正交于所有不超过 nn 次的多项式(而 q(x)q(x) 正好不大于 nn 次),那么根据正交性的定义,第一项积分直接归零 [13.2, 13.3]: abq(x)ω(x)dx=0\int_a^b q(x)\omega(x)dx = 0 因此,真实积分值完全退化为: abf(x)dx=abr(x)dx\int_a^b f(x)dx = \int_a^b r(x)dx

接下来,我们用高斯公式来计算 f(x)f(x) 的近似积分。

由于高斯节点 x0,,xnx_0, \dots, x_n 正好是 ω(x)\omega(x) 的零点(即 ω(xi)=0\omega(x_i) = 0),所以: f(xi)=q(xi)ω(xi)+r(xi)=r(xi)f(x_i) = q(x_i)\omega(x_i) + r(x_i) = r(x_i)

因此高斯积分公式给出: i=0nAif(xi)=i=0nAir(xi)\sum_{i=0}^n A_i f(x_i) = \sum_{i=0}^n A_i r(x_i)

因为 r(x)r(x) 只是一个最高 nn 次的多项式,而任何包含 n+1n+1 个节点的插值型求积公式对 nn 次多项式都是绝对精确的: i=0nAir(xi)=abr(x)dx\sum_{i=0}^n A_i r(x_i) = \int_a^b r(x)dx

把这几步串起来:

高斯近似值=i=0nAif(xi)=i=0nAir(xi)=abr(x)dx=abf(x)dx=真实值 高斯近似值 = \sum_{i=0}^n A_i f(x_i) = \sum_{i=0}^n A_i r(x_i) = \int_a^b r(x)dx = \int_a^b f(x)dx = 真实值

其中 权重 AiA_i:是这些代表所拥有的“投票权大小”(即话语权比重)

我们要算一段区间的积分(也就是求围成的图形面积),高斯积分就是只挑选 n+1n+1 个特定位置的函数值 f(xi)f(x_i) 进行加权求和: abf(x)dxA0f(x0)+A1f(x1)++Anf(xn)\int_a^b f(x) dx \approx A_0 f(x_0) + A_1 f(x_1) + \dots + A_n f(x_n)

证毕! 这个证明堪称数学史上最优雅的篇章之一。它表明:只要把节点选在正交多项式的零点上,高阶多项式中高于 nn 次的部分就会因为正交性被“自动过滤”掉,使公式精度奇迹般地翻倍!

13.3 高斯-勒让德积分

在 [-1,1] 上,取勒让德多项式 Pn+1(x)P_{n+1}(x) 的零点作为高斯点。

为什么是勒让德? 勒让德多项式天然在 [-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

求权重:解矩方程

高斯积分公式: 11f(x)dxA0f(x0)+A1f(x1)+A2f(x2)\int_{-1}^{1} f(x)dx ≈ A₀·f(x₀) + A₁·f(x₁) + A₂·f(x₂)

要求对 f(x)=1,x,x2,x3,x4,x5f(x)=1, x, x², x³, x⁴, x⁵ 都精确(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 积分区间变换

由于勒让德多项式天然正交于区间 [1,1][-1, 1] [13.3],所有标准的高斯点和权重表都是针对 [1,1][-1, 1] 设计的 [13.4]。 如果实际积分区间是 [a,b][a, b],我们必须进行一次线性自变量替换

x=αt+βx = \alpha t + \beta。我们希望当 t=1t = -1x=ax = a,当 t=1t = 1x=bx = b

代入解方程组: {α+β=aα+β=b    α=ba2,β=a+b2\begin{cases} -\alpha + \beta = a \\ \alpha + \beta = b \end{cases} \implies \alpha = \frac{b-a}{2}, \quad \beta = \frac{a+b}{2}

由此得到经典的区间映射变换式: x=ba2t+a+b2x = \frac{b-a}{2}t + \frac{a+b}{2}

同时,微分项也需要按比例缩放: dx=ba2dtdx = \frac{b-a}{2} dt 权重也需要同步缩放 !

高斯-勒让德节点在 [-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 带权高斯积分

解决数值积分中的两个超级痛点

  1. 积分区间是无穷大( \infty)怎么办?
  2. 函数在端点会爆炸(奇点, 10\frac{1}{0})怎么办?
类型 区间 权函数 ρ(x) 正交多项式 用途
Gauss-Legendre [-1,1] 1 勒让德 标准有限区间积分
Gauss-Laguerre [0,∞) e^(-x) 拉盖尔 半无限区间 + 指数衰减
Gauss-Hermite (-∞,∞) e^(-x²) 厄米 全无限区间 + 高斯衰减
Gauss-Chebyshev [-1,1] 1/√(1-x²) 切比雪夫 端点有奇性的积分

公式形式ρ(x)f(x)dxΣAkf(xk)∫ ρ(x)·f(x) dx ≈ Σ Aₖ·f(xₖ) ,节点 xₖ 是相应正交多项式的零点。

把困难的会爆炸的或者趋于无穷的部分 剥离给 ρ(x)\rho(x) 让可以进行 Guass积分处理的部分 留在f(x)!

💡 延伸思考:高斯-勒让德是"默认选项"、精度极高,但节点不在积分区间的端点(这对某些问题不方便)。高斯-拉盖尔伽利厄米积分天然处理无穷区间,在量子力学中极其重要——例如 ∫₋∞^∞ e^{-x²} f(x) dx 用 Gauss-Hermite 只需几个点就有高精度。

本质上是“正交多项式家族”针对不同物理舞台的量身定制 !!!

用最好的计算点数 避开所有数学陷阱 算出精确的积分!


14. WKB 近似

14.1 物理背景

WKB(Wentzel-Kramers-Brillouin)方法是量子力学中近似处理势垒穿透(tunneling)问题的半经典方法。一个粒子要穿过势垒的概率可以用一个积分来表示。

14.2 WKB 公式

WKB 方法的物理本质,是将量子波函数 ψ(x)\psi(x) 写成关于普朗克常数 \hbar 的渐近展开式

ψ(x)exp(iS(x)) \psi(x) \sim \exp\left( \frac{i}{\hbar} S(x) \right)

其中 S(x)S(x) 对应经典力学中的哈密顿-雅可比作用量。

  • 经典极限:当 0\hbar \to 0 时,体系的行为完全退化为牛顿经典力学。
  • 量子修正:当 \hbar 有限大时,它保留了波的相位信息,从而能够描述经典粒子绝对无法完成的“穿墙术”——量子隧穿

穿透因子(穿透几率)物理意义:代表粒子穿过势垒 [b,c][b, c] 的隧穿几率(即成功率)

W=exp(2×bc[2M(q)(V(q)E0)]dq) W = exp(-2 × ∫_b^c \frac{\sqrt{[2M(q)·(V(q)-E₀)]}}{\hbar } dq)

周期因子

T=2abdq2[(E0V(q))]M(q) T = 2 ∫_a^b \frac{dq}{\sqrt{\frac{2[(E₀-V(q))]}{M(q)}}}

寿命:τ = 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²连续 O(N) ✅ 低 一般光滑数据
Akima 分段 3 次 函数值+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

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...