一、基本概念
插值是指通过对数据进行线性、非线性或其他类型的逼近,将一组离散数据映射到连续的函数值。在数学中,插值通常用于将数据点连接起来,以形成连续的函数图像,特别是在数值计算和图像处理中。插值可以用于在空间中预测对象的位置、速度和加速度,以及在其他领域中实现其他类型的预测和模拟。
φ
(
x
i
)
=
y
i
\varphi (x_{i})=y_{i}
φ(xi)=yi(1-1)
f
(
x
i
)
=
y
i
f(x_{i})=y_{i}
f(xi)=yi (1-2)
其中,f(x) 称为被插函数; φ ( x ) \varphi (x) φ(x) 称为插值函数; x i x_{i} xi称为插值节点;包含插值节点的区域[a,b]称为插值区间; ( x i , y i ) (x_{i},y_{i}) (xi,yi)称为插值点;公式(1-1)称为插值条件
二、拉格朗日插值
n次多项式插值:
φ
n
(
x
)
=
a
0
+
a
1
x
+
a
2
x
2
+
⋯
+
a
n
x
n
\varphi_{n}(x)=a_{0}+a_{1}x+a_{2}x^{2}+\dots+a_{n}x^{n}
φn(x)=a0+a1x+a2x2+⋯+anxn (2-1)
1.线性插值
基函数:
l
0
(
x
)
=
x
−
x
1
x
0
−
x
1
,
l
1
(
x
)
=
x
−
x
0
x
1
−
x
0
l_0(x)=\dfrac{x-x_1}{x_0-x_1},\:\:l_1(x)=\dfrac{x-x_0}{x_1-x_0}
l0(x)=x0−x1x−x1,l1(x)=x1−x0x−x0 (2-2)
插值函数:
φ
1
(
x
)
=
L
1
(
x
)
=
y
0
l
0
(
x
)
+
y
1
l
1
(
x
)
\varphi_{1}(x)=L_{1}(x)=y_{0}l_0(x)+y_{1}l_1(x)
φ1(x)=L1(x)=y0l0(x)+y1l1(x) (2-3)
误差分析:
R
(
x
)
=
f
(
x
)
−
φ
1
(
x
)
=
f
′
′
(
ξ
)
2
!
(
x
−
x
0
)
(
x
−
x
1
)
R(x)=f(x)-\varphi_1(x)=\dfrac{f''(\xi)}{2!}(x-x_0)(x-x_1)
R(x)=f(x)−φ1(x)=2!f′′(ξ)(x−x0)(x−x1) (2-4)
公式(2-4)称为截断误差公式
2.二次插值
基函数:
l
0
(
x
)
=
(
x
−
x
1
)
(
x
−
x
2
)
(
x
0
−
x
1
)
(
x
0
−
x
2
)
\quad l_0(x)=\dfrac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}
l0(x)=(x0−x1)(x0−x2)(x−x1)(x−x2)
l
1
(
x
)
=
(
x
−
x
0
)
(
x
−
x
2
)
(
x
1
−
x
0
)
(
x
1
−
x
2
)
\quad l_1(x)=\dfrac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}
l1(x)=(x1−x0)(x1−x2)(x−x0)(x−x2)
l
2
(
x
)
=
(
x
−
x
0
)
(
x
−
x
1
)
(
x
2
−
x
0
)
(
x
2
−
x
1
)
\quad l_2(x)=\dfrac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}
l2(x)=(x2−x0)(x2−x1)(x−x0)(x−x1)
插值函数:
φ
2
(
x
)
=
L
2
(
x
)
=
l
0
(
x
)
y
0
+
l
1
(
x
)
y
1
+
l
2
(
x
)
y
2
\varphi_2(x)=L_2(x)=l_0(x)y_0+l_1(x)y_1+l_2(x)y_2
φ2(x)=L2(x)=l0(x)y0+l1(x)y1+l2(x)y2
误差分析:
R
(
x
)
=
f
(
x
)
−
φ
2
(
x
)
=
f
′
′
(
ξ
)
3
!
(
x
−
x
0
)
(
x
−
x
1
)
(
x
−
x
2
)
R(x)=f(x)-\varphi_2(x)=\dfrac{f''(\xi)}{3!}(x-x_0)(x-x_1)(x-x_2)
R(x)=f(x)−φ2(x)=3!f′′(ξ)(x−x0)(x−x1)(x−x2)
3.n次拉格朗日插值多项式
基函数:
A
=
1
(
x
i
−
x
0
)
⋯
(
x
i
−
x
i
−
1
)
(
x
i
−
x
i
+
1
)
⋯
(
x
i
−
x
n
)
A=\dfrac{1}{(x_i-x_0)\cdots(x_i-x_{i-1})(x_i-x_{i+1})\cdots(x_i-x_n)}
A=(xi−x0)⋯(xi−xi−1)(xi−xi+1)⋯(xi−xn)1
l
i
(
x
)
=
A
(
x
−
x
0
)
⋯
(
x
−
x
i
−
1
)
(
x
−
x
i
+
1
)
⋯
(
x
−
x
n
)
l_i(x)=A(x-x_0)\cdots(x-x_{i-1})(x-x_{i+1})\cdots(x-x_n)
li(x)=A(x−x0)⋯(x−xi−1)(x−xi+1)⋯(x−xn)
插值函数:
L
n
(
x
)
=
∑
i
=
0
n
y
i
l
i
(
x
)
L_n(x)=\sum\limits_{i=0}^n y_i l_i(x)
Ln(x)=i=0∑nyili(x)
误差分析:
R
(
x
)
=
f
(
x
)
−
φ
n
(
x
)
=
f
(
n
+
1
)
(
ξ
)
(
n
+
1
)
!
(
x
−
x
0
)
(
x
−
x
1
)
⋯
(
x
−
x
n
)
R(x)=f(x)-\varphi_n(x)=\dfrac{f^{(n+1)}(\xi)}{(n+1)!}(x-x_0)(x-x_1)\cdots(x-x_n)
R(x)=f(x)−φn(x)=(n+1)!f(n+1)(ξ)(x−x0)(x−x1)⋯(x−xn)
另一种误差分析:
推导过程:
f
(
x
)
−
L
n
(
1
)
(
x
)
=
f
(
n
+
1
)
(
ξ
1
)
(
n
+
1
)
!
(
x
−
x
0
)
⋯
(
x
−
x
n
)
f
(
x
)
−
L
n
(
2
)
(
x
)
=
f
(
n
+
1
)
(
ξ
n
)
(
n
+
1
)
!
(
x
−
x
1
)
⋯
(
x
−
x
n
+
1
)
\begin{array}{c}f(x)-L_n^{(1)}(x)=\dfrac{f^{(n+1)}\big(\xi_1\big)}{(n+1)!}\big(x-x_0\big)\cdots\big(x-x_n\big)\\ \\ f(x)-L_n^{(2)}(x)=\dfrac{f^{(n+1)}\big(\xi_n\big)}{(n+1)!}\big(x-x_1\big)\cdots\big(x-x_{n+1}\big)\end{array}
f(x)−Ln(1)(x)=(n+1)!f(n+1)(ξ1)(x−x0)⋯(x−xn)f(x)−Ln(2)(x)=(n+1)!f(n+1)(ξn)(x−x1)⋯(x−xn+1)
得到:
f
(
x
)
−
L
n
(
1
)
(
x
)
≈
x
−
x
0
x
0
−
x
n
+
1
(
L
n
(
1
)
(
x
)
−
L
n
(
2
)
(
x
)
)
f(x)-L^{(1)}_n(x)\approx\dfrac{x-x_0}{x_0-x_{n+1}}\left(L^{(1)}_n(x)-L^{(2)}_n(x)\right)
f(x)−Ln(1)(x)≈x0−xn+1x−x0(Ln(1)(x)−Ln(2)(x))
通过两个插值函数之差来估计误差,这种叫事后估计
缺点:基函数依赖全部节点,增加节点时,需要计算全部基函数
三、牛顿插值法
1.差商
一阶差商:
f
[
x
0
,
x
1
]
=
f
(
x
0
)
−
f
(
x
1
)
x
0
−
x
1
f[x_0,x_1]=\dfrac{f(x_0)-f(x_1)}{x_0-x_1}
f[x0,x1]=x0−x1f(x0)−f(x1)
二阶差商:
f
[
x
0
,
x
1
,
x
2
]
=
f
[
x
0
,
x
2
]
−
f
[
x
0
,
x
1
]
x
2
−
x
1
f[x_0,x_1,x_2]=\dfrac{f[x_0,x_2]-f[x_0,x_1]}{x_2-x_1}
f[x0,x1,x2]=x2−x1f[x0,x2]−f[x0,x1]
n阶差商:
f
[
x
0
,
x
1
,
⋯
,
x
n
]
=
f
[
x
0
,
x
1
,
⋯
,
x
n
−
2
,
x
n
]
−
f
[
x
0
,
x
1
,
⋯
,
x
n
−
2
,
x
n
−
1
]
x
n
−
x
n
−
1
f[x_0,x_1,\cdots,x_n]=\frac{f[x_0,x_1,\cdots,x_{n-2},x_n]-f[x_0,x_1,\cdots,x_{n-2},x_{n-1}]}{x_n-x_{n-1}}
f[x0,x1,⋯,xn]=xn−xn−1f[x0,x1,⋯,xn−2,xn]−f[x0,x1,⋯,xn−2,xn−1]
差商表:
x i x_{i} xi | f ( x i ) f(x_{i}) f(xi) | 一阶差商 | 二阶差商 | 三阶差商 | … |
---|---|---|---|---|---|
x 0 x_{0} x0 | f ( x 0 ) f(x_{0}) f(x0) | ||||
x 1 x_{1} x1 | f ( x 1 ) f(x_{1}) f(x1) | f [ x 0 , x 1 ] f[x_{0},x_{1}] f[x0,x1] | |||
x 2 x_{2} x2 | f ( x 2 ) f(x_{2}) f(x2) | f [ x 1 , x 2 ] f[x_{1},x_{2}] f[x1,x2] | f [ x 0 , x 1 , x 2 ] f[x_{0},x_{1},x_{2}] f[x0,x1,x2] | ||
x 3 x_{3} x3 | f ( x 3 ) f(x_{3}) f(x3) | f [ x 2 , x 3 ] f[x_{2},x_{3}] f[x2,x3] | f [ x 1 , x 2 , x 3 ] f[x_{1},x_{2},x_{3}] f[x1,x2,x3] | f [ x 0 , x 1 , x 2 , x 3 ] f[x_{0},x_{1},x_{2},x_{3}] f[x0,x1,x2,x3] | |
… | … | … | … | … |
2.牛顿插值多项式
牛顿线性插值多项式:
N
1
(
x
)
=
f
[
x
0
]
+
f
[
x
0
,
x
1
]
(
x
−
x
0
)
N_1(x)=f[x_0]+f[x_0,x_1](x-x_0)
N1(x)=f[x0]+f[x0,x1](x−x0)
牛顿二次插值多项式:
N
2
(
x
)
=
f
[
x
0
]
+
f
[
x
0
,
x
1
]
(
x
−
x
0
)
+
f
[
x
0
,
x
1
,
x
2
]
(
x
−
x
0
)
(
x
−
x
1
)
N_{2}(x)=f[x_{0}]+f[x_{0},x_{1}](x-x_{0})+f[x_{0},x_{1},x_{2}](x-x_{0})(x-x_{1})
N2(x)=f[x0]+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)
牛顿插值多项式:
N
n
(
x
)
=
f
[
x
0
]
+
f
[
x
0
,
x
1
]
(
x
−
x
0
)
+
f
[
x
0
,
x
1
,
x
2
]
(
x
−
x
0
)
(
x
−
x
1
)
+
⋯
+
f
[
x
0
,
x
1
,
⋯
,
x
n
]
(
x
−
x
0
)
(
x
−
x
1
)
⋯
(
x
−
x
n
−
1
)
\begin{array}{c}N_n(x)=f[x_0]+f[x_0,x_1](x-x_0)+f[x_0,x_1,x_2](x-x_0)(x-x_1)+\\ \cdots+f[x_0,x_1,\cdots,x_n](x-x_0)(x-x_1)\cdots(x-x_{n-1})\end{array}
Nn(x)=f[x0]+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+⋯+f[x0,x1,⋯,xn](x−x0)(x−x1)⋯(x−xn−1)
特别地:
N
n
(
x
)
=
N
n
−
1
(
x
)
+
f
[
x
0
,
x
1
,
⋯
,
x
n
]
(
x
−
x
0
)
(
x
−
x
1
)
⋯
(
x
−
x
n
−
1
)
\text{}N_n(x)=N_{n-1}(x)+f[x_0,x_1,\cdots,x_n](x-x_0)(x-x_1)\cdots(x-x_{n-1})
Nn(x)=Nn−1(x)+f[x0,x1,⋯,xn](x−x0)(x−x1)⋯(x−xn−1)
它跟拉格朗日插值法是等价的,只是表现形式不一样。
3.差分与等距节点的牛顿插值公式
一阶差分:
一阶前向差分:
Δ
f
(
x
i
)
=
f
(
x
i
+
h
)
−
f
(
x
i
)
\Delta f(x_i)=f(x_i+h)-f(x_i)
Δf(xi)=f(xi+h)−f(xi)
一阶后向差分:
∇
f
(
x
i
)
=
f
(
x
i
)
−
f
(
x
i
−
h
)
\nabla f(x_i)=f(x_i)-f(x_i-h)
∇f(xi)=f(xi)−f(xi−h)
一阶中心差分:
δ
f
(
x
i
)
=
f
(
x
i
+
h
2
)
−
f
(
x
i
−
h
2
)
\delta f(x_i)=f(x_i+\dfrac{h}{2})-f(x_i-\dfrac{h}{2})
δf(xi)=f(xi+2h)−f(xi−2h)
二阶差分
二阶前向差分:
Δ
2
f
(
x
i
)
=
Δ
f
(
x
i
+
h
)
−
Δ
f
(
x
i
)
\Delta^2f(x_i)=\Delta f(x_i+h)-\Delta f(x_i)
Δ2f(xi)=Δf(xi+h)−Δf(xi)
二阶后向差分:
∇
2
f
(
x
i
)
=
∇
f
(
x
i
)
−
∇
f
(
x
i
−
h
)
\nabla^2f(x_i)\:=\:\nabla f(x_i)\:-\:\nabla f(x_i\:-\:h)
∇2f(xi)=∇f(xi)−∇f(xi−h)
n阶差分
n阶前向差分:
Δ
n
f
(
x
i
)
=
Δ
n
−
1
f
(
x
i
+
h
)
−
Δ
n
−
1
f
(
x
i
)
\Delta^n f(x_i)=\Delta^{n-1}f(x_i+h)-\Delta^{n-1}f(x_i)
Δnf(xi)=Δn−1f(xi+h)−Δn−1f(xi)
n阶后向差分:
∇
n
f
(
x
i
)
=
∇
n
−
1
f
(
x
i
)
−
∇
f
n
−
1
(
x
i
−
h
)
\nabla^n f(x_i)=\nabla^{n-1}f(x_i)-\nabla f^{n-1}(x_i-h)
∇nf(xi)=∇n−1f(xi)−∇fn−1(xi−h)
差分表,类似于差商表
差分的性质
- 等距节点下
f [ x 0 , x 1 , ⋯ , x n ] = Δ n f ( x 0 ) n ! h n f[x_0,x_1,\cdots,x_n]=\dfrac{\Delta^n f(x_0)}{n!h^n} f[x0,x1,⋯,xn]=n!hnΔnf(x0) - 表示函数值的线性组合
Δ n f ( x i ) = ∑ j = 0 n ( − 1 ) j C n j f ( x n + i − j ) \Delta^n f(x_i)=\sum_{j=0}^n(-1)^j C_n^j f(x_{n+i-j}) Δnf(xi)=∑j=0n(−1)jCnjf(xn+i−j)
等距节点的牛顿插值公式
等距节点的牛顿前插公式:
φ
n
(
x
)
=
f
(
x
0
)
+
x
−
x
0
h
Δ
f
(
x
0
)
+
(
x
−
x
0
)
(
x
−
x
1
)
2
h
2
Δ
2
f
(
x
0
)
+
⋯
+
(
x
−
x
0
)
(
x
−
x
1
)
⋯
(
x
−
x
n
−
1
)
n
!
h
n
Δ
n
f
(
x
0
)
\begin{array}{c}\varphi_n(x)=f(x_0)+\dfrac{x-x_0}{h}\Delta f(x_0)+\dfrac{(x-x_0)(x-x_1)}{2h^2}\Delta^2f(x_0)+\cdots\\ +\dfrac{(x-x_0)(x-x_1)\cdots(x-x_{n-1})}{n!h^n}\Delta^n f(x_0)\end{array}
φn(x)=f(x0)+hx−x0Δf(x0)+2h2(x−x0)(x−x1)Δ2f(x0)+⋯+n!hn(x−x0)(x−x1)⋯(x−xn−1)Δnf(x0)
设
x
=
x
0
+
t
h
,
(
0
≤
t
≤
n
)
x=x_{0}+t h,\ (0\:\leq\:t\:\leq\:n)
x=x0+th, (0≤t≤n)
可以得到:
φ
x
(
x
)
=
φ
x
(
x
0
+
t
h
)
=
f
(
x
0
)
+
t
1
!
!
Δ
f
(
x
0
)
+
t
(
t
−
1
)
2
!
Δ
2
f
(
x
0
)
+
⋯
+
t
(
t
−
1
)
⋯
(
t
−
n
+
1
)
n
!
Δ
∗
f
(
x
0
)
\begin{aligned}\varphi_x(x)&=\varphi_x(x_0+th)\\ &=f(x_0)+\dfrac{t}{1!!}\Delta f(x_0)+\dfrac{t(t-1)}{2!}\Delta^2f(x_0)+\cdots+\dfrac{t(t-1)\cdots(t-n+1)}{n!}\Delta^*f(x_0)\end{aligned}
φx(x)=φx(x0+th)=f(x0)+1!!tΔf(x0)+2!t(t−1)Δ2f(x0)+⋯+n!t(t−1)⋯(t−n+1)Δ∗f(x0)
对应的截断误差:
R
n
(
x
)
=
t
(
t
−
1
)
⋯
(
t
−
n
)
(
n
+
1
)
!
h
n
+
1
f
(
n
+
1
)
(
ξ
)
,
ξ
∈
(
x
0
,
x
0
+
n
h
)
R_{n}(x)=\frac{t(t-1)\cdots(t-n)}{(n+1)!}h^{n+1}f^{(n+1)}(\xi),\quad\xi\in(x_{0,}x_{0}+n h)
Rn(x)=(n+1)!t(t−1)⋯(t−n)hn+1f(n+1)(ξ),ξ∈(x0,x0+nh)
注意:若
x
0
<
x
1
<
⋯
<
x
n
x_0<x_1<\cdots<x_n
x0<x1<⋯<xn ,当x靠近x0时,一般采用前插公式来求f(x)
的值,当 x 靠近 xn 时,一般采用后插公式来求 f(x) 的值