1. 最近邻插值
核心思想: 寻找距离未知点 x 最近的已知数据点 x_i,并将其值 y_i 直接赋予 x。
特点与优势:
- 计算速度极快:只需比较距离,无需复杂计算。
- 保持原值:插值结果永远是原始样本值之一,不会产生新的值。
- 不连续:插值后的函数是阶跃的,不光滑。
缺点:
- 精度最低,误差较大。
- 生成图像或曲线会有明显的“块状”或“锯齿”效应。
示例:
计算距离:|2.5-2| = 0.5, |2.5-3| = 0.5
结论:x=2.5 离 x=2和x=3的距离一样,可以增加新策略,比如选小的方向,则插值结果:y = 4。
主要应用: 图像放大(当需要保持锐利边缘且不引入新颜色时,如像素艺术)、快速预览。
2. 线性插值
核心思想: 认为相邻两个已知点之间的变化是线性的,通过连接两点的线段来估计未知点的值。
特点:
- 计算简单,效率高。
- 结果连续,避免了最近邻法的跳跃感。
- 比高阶多项式插值更稳定,不会出现疯狂的振荡。
- 插值结果不平滑(在节点处不可导,一阶导数不连续)。
- 精度高于最近邻但低于高阶方法。
示例:
已知点:(1, 1), (2, 4), (3, 9),求 x=2.5的值。
插值结果:y = 6.5。
3. 多项式插值 (Polynomial)
核心思想: 寻找一个唯一的 n 阶多项式 P(x) ,使其恰好通过所有 n+1 个已知数据点。
3.1 拉格朗日插值
核心思想: 构造一组拉格朗日基多项式 Li(x)Li(x),每个 Li(x) 在 x=xi 处为 1,在其他已知点 xj(j≠i)处为 0,最终插值多项式P(x)是这些基多项式的线性组合,形式分别为:
特点:
i(xj)={1if j=i0if j
示例:
已知点:(1, 1), (2, 4), (3, 9),求 x=2.5的值。
构造基多项式:
3.2 牛顿插值
核心思想: 使用均差来逐步构造多项式,形式为:
P(x)=a0+a1(x−x0)+a2(x−x0)(x−x1)+...特点:
- 计算效率高 O(n2):增加一个新数据点时,只需在现有多项式后增加一项,无需重新计算所有项,这在动态获取数据时非常有用。
- 数值计算上通常比拉格朗日形式更稳定。
- 同样受到龙格现象的困扰。
示例
已知点:(1, 1), (2, 4), (3, 9),求 x=2.5的值。
构造均差表:
从表中得到系数:
4. 样条插值
核心思想: 为了解决高阶多项式插值的龙格现象,采用“分而治之”的策略,使用分段低阶多项式(最常用的是三次多项式)来连接所有数据点,并强制要求连接点处具有连续的一阶和二阶导数,从而保证整体曲线的光滑性,最常用三次样条插值。
特点:
- 极其光滑:整体曲线具有连续的二阶导数,视觉效果非常好。
- 非常稳定:避免了龙格现象,对于任意分布的数据点都能得到良好的结果。
- 精度高:是实践中最常用、最可靠的插值方法之一。
- 计算复杂:需要求解一个三对角线性方程组来确定所有分段多项式的系数。
示例:
已知点:(1, 1), (2, 4), (3, 9),求 x=2.5的值。
建立方程组
设三个节点为 x₀=1, x₁=2, x₂=3,对应的函数值为 y₀=1, y₁=4, y₂=9。
- 分别找到两个三次多项式:
S₀(x) = a₀ + b₀(x-1) + c₀(x-1)² + d₀(x-1)³,在区间 [1,2] 上
S₁(x) = a₁ + b₁(x-2) + c₁(x-2)² + d₁(x-2)³,在区间 [2,3] 上
- 插值条件
S₀(1) = a₀ = 1
S₀(2) = a₀ + b₀ + c₀ + d₀ = 4
S₁(2) = a₁ = 4
S₁(3) = a₁ + b₁ + c₁ + d₁ = 9
- 一阶导数连续性(在 x=2 处)
S₀’(2) = b₀ + 2c₀ + 3d₀
S₁’(2) = b₁
S₀’(2) = S₁’(2)
- 二阶导数连续性(在 x=2 处)
S₀’‘(2) = 2c₀ + 6d₀
S₁’‘(2) = 2c₁
S₀’‘(2) = S₁’'(2)
- 自然边界条件
S₀’‘(1) = 2c₀ = 0
S₁’'(3) = 2c₁ + 6d₁ = 0
- 求解方程组
根据上述条件,我们得到以下方程组:
方程1:a₀ = 1
方程2:a₀ + b₀ + c₀ + d₀ = 4
方程3:a₁ = 4
方程4:a₁ + b₁ + c₁ + d₁ = 9
方程5:b₀ + 2c₀ + 3d₀ = b₁
方程6:2c₀ + 6d₀ = 2c₁
方程7:2c₀ = 0
方程8:2c₁ + 6d₁ = 0
从方程7得:c₀ = 0
代入方程6:6d₀ = 2c₁ ⇒ c₁ = 3d₀
代入方程2:1 + b₀ + 0 + d₀ = 4 ⇒ b₀ + d₀ = 3
代入方程5:b₀ + 0 + 3d₀ = b₁ ⇒ b₁ = b₀ + 3d₀
代入方程4:4 + b₁ + c₁ + d₁ = 9 ⇒ b₁ + c₁ + d₁ = 5
代入方程8:2c₁ + 6d₁ = 0 ⇒ 6d₀ + 6d₁ = 0 ⇒ d₀ + d₁ = 0 ⇒ d₁ = -d₀
现在新增关系:
b₁ = b₀ + 3d₀
c₁ = 3d₀
d₁ = -d₀
代入 b₁ + c₁ + d₁ = 5:
(b₀ + 3d₀) + 3d₀ + (-d₀) = 5 ⇒ b₀ + 5d₀ = 5
之前有 b₀ + d₀ = 3
解这两个方程:
b₀ + d₀ = 3
b₀ + 5d₀ = 5
相减得:4d₀ = 2 ⇒ d₀ = 0.5
代入得:b₀ = 3 - 0.5 = 2.5
进一步得出:
b₁ = 2.5 + 3×0.5 = 4
c₁ = 3×0.5 = 1.5
d₁ = -0.5
- 得到样条函数
对于区间 [1,2]:S₀(x) = 1 + 2.5(x-1) + 0(x-1)² + 0.5(x-1)³
对于区间 [2,3]:S₁(x) = 4 + 4(x-2) + 1.5(x-2)² - 0.5(x-2)³
- 计算 x=2.5 的值
x=2.5 位于区间 [2,3],所以使用 S₁(x):
S₁(2.5) = 4 + 4(2.5-2) + 1.5(2.5-2)² - 0.5(2.5-2)³
= 4 + 4×0.5 + 1.5×0.25 - 0.5×0.125
= 4 + 2 + 0.375 - 0.0625
= 6.3125
5. 总结与对比
为了更直观地比较,下表总结了各方法的核心特性: