1. 拉格朗日插值多项式
前提:
ω
n
+
1
(
x
)
=
(
x
−
x
0
)
(
x
−
x
1
)
.
.
.
(
x
−
x
n
)
\omega_{n+1}(x) = (x-x_0)(x-x_1)...(x-x_n)
ωn+1(x)=(x−x0)(x−x1)...(x−xn)
ω
n
+
1
′
(
x
k
)
=
(
x
k
−
x
0
)
.
.
.
(
x
k
−
x
k
−
1
)
(
x
k
−
x
k
+
1
)
.
.
.
(
x
k
−
x
n
)
\omega_{n+1}^{'}(x_k) = (x_k-x_0)...(x_k-x_{k-1})(x_k-x_{k+1})...(x_k-x_n)
ωn+1′(xk)=(xk−x0)...(xk−xk−1)(xk−xk+1)...(xk−xn)
l
i
(
x
)
=
(
x
−
x
0
)
.
.
.
(
x
−
x
i
−
1
)
(
x
−
x
i
+
1
)
.
.
.
(
x
−
x
n
)
(
x
i
−
x
0
)
.
.
.
(
x
i
−
x
i
−
1
)
(
x
i
−
x
i
+
1
)
.
.
.
(
x
k
−
i
n
)
l_i(x)=\frac{(x-x_0)...(x-x_{i-1})(x-x_{i+1})...(x-x_n)}{(x_i-x_0)...(x_i-x_{i-1})(x_i-x_{i+1})...(x_k-i_n)}
li(x)=(xi−x0)...(xi−xi−1)(xi−xi+1)...(xk−in)(x−x0)...(x−xi−1)(x−xi+1)...(x−xn)
=
(
x
−
x
0
)
.
.
.
(
x
−
x
i
−
1
)
(
x
−
x
i
)
(
x
−
x
i
+
1
)
.
.
.
(
x
−
x
n
)
(
x
−
x
i
)
(
x
i
−
x
0
)
.
.
.
(
x
i
−
x
i
−
1
)
(
x
i
−
x
i
+
1
)
.
.
.
(
x
k
−
i
n
)
=\frac{(x-x_0)...(x-x_{i-1})(x-x_i)(x-x_{i+1})...(x-x_n)}{(x-x_i)(x_i-x_0)...(x_i-x_{i-1})(x_i-x_{i+1})...(x_k-i_n)}
=(x−xi)(xi−x0)...(xi−xi−1)(xi−xi+1)...(xk−in)(x−x0)...(x−xi−1)(x−xi)(x−xi+1)...(x−xn)
=
ω
n
+
1
(
x
)
(
x
−
x
i
)
ω
n
+
1
′
(
x
i
)
= \frac{\omega_{n+1}(x)}{(x-x_i)\omega_{n+1}^{'}(x_i)}
=(x−xi)ωn+1′(xi)ωn+1(x)
公式:
L
n
(
x
)
=
∑
k
=
0
n
y
k
ω
n
+
1
(
x
)
(
x
−
x
i
)
ω
n
+
1
′
(
x
i
)
L_n(x) = \sum_{k=0}^ny_k \frac{\omega_{n+1}(x)}{(x-x_i)\omega_{n+1}^{'}(x_i)}
Ln(x)=k=0∑nyk(x−xi)ωn+1′(xi)ωn+1(x)
或者
L
n
(
x
)
=
∑
i
=
0
n
y
i
l
i
(
x
)
L_n(x) = \sum_{i=0}^ny_il_i(x)
Ln(x)=i=0∑nyili(x)
一般插值不用拉格朗日插值,拉格朗日插值会出现龙格现象;次数越高,误差越大。
2. 分段线性插值
一般使用分段二次插值:
选取根节点x最近的三个节点
x
i
−
1
,
x
i
,
x
i
+
1
x_{i-1},x_{i},x_{i+1}
xi−1,xi,xi+1进行二次插值,即再每一个区间
[
x
i
−
1
,
x
i
+
1
]
[x_{i-1},x_{i+1}]
[xi−1,xi+1]上,取:
f
(
x
)
≈
L
2
(
x
)
=
∑
k
=
i
−
1
i
+
1
[
y
k
∏
j
=
i
−
1
;
j
≠
k
(
x
i
−
x
j
)
(
x
k
−
x
i
)
]
f(x) \approx L_2(x)=\sum_{k=i-1}^{i+1}[y_k \prod_{j=i-1;j\neq k}\frac{(x_i-x_j)}{(x_k-x_i)}]
f(x)≈L2(x)=k=i−1∑i+1[ykj=i−1;j=k∏(xk−xi)(xi−xj)]
这中分段的低次插值称为分段二次插值,在几何上就是用分段抛物线代替y=f(x),故分段二次插值又称为分段抛物插值。
3. 牛顿插值法
f
(
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
−
2
,
x
n
−
1
]
(
x
−
x
0
)
(
x
−
x
1
)
.
.
.
(
x
−
x
n
2
)
(
x
−
x
n
−
1
)
+
f
[
x
0
,
x
1
,
.
.
.
,
x
n
−
1
,
x
n
]
(
x
−
x
0
)
(
x
−
x
1
)
.
.
.
(
x
−
x
n
1
)
(
x
−
x
n
)
f(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-2},x_{n-1}](x-x_0)(x-x_1)...(x-x_{n_2})(x-x_{n-1}) + f[x_0,x_1,...,x_{n-1},x_{n}](x-x_0)(x-x_1)...(x-x_{n_1})(x-x_{n})
f(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+...+f[x0,x1,...,xn−2,xn−1](x−x0)(x−x1)...(x−xn2)(x−xn−1)+f[x0,x1,...,xn−1,xn](x−x0)(x−x1)...(x−xn1)(x−xn)
差商定义 称
f
∣
x
0
,
x
k
∣
=
f
(
x
k
)
−
f
(
x
0
)
x
k
−
x
0
f|x_0,x_k| = \frac{f(x_k)-f(x_0)}{x_k-x_0}
f∣x0,xk∣=xk−x0f(xk)−f(x0)为函数f(x)关于点…
x
0
,
x
k
x_0,x_k
x0,xk的一阶差商(亦称均差)
二阶差商:
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| = \frac{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∣
K阶差商:
f
∣
x
0
,
x
1
,
.
.
.
,
x
k
∣
=
f
∣
x
1
,
.
.
.
,
x
k
−
1
,
x
k
∣
−
f
∣
x
0
,
x
1
,
.
.
.
,
x
k
−
1
∣
x
k
−
x
0
f|x_0,x_1,...,x_k| = \frac{f|x_1,...,x_{k-1},x_{k}|-f|x_0,x_1,...,x_{k-1}| }{x_k-x_0}
f∣x0,x1,...,xk∣=xk−x0f∣x1,...,xk−1,xk∣−f∣x0,x1,...,xk−1∣
评价: 与拉格朗日插值法相比,牛顿插值法的计算过程具有继承性。(牛顿插值法每次插值只和前n项的值有关,这样每次只要在原来的函数上添加新的项,就能够产生新的函数) 但是牛顿插值也存在龙格现象。
牛顿插值法和拉格朗日插值法的另一个缺点:
上面讲的两种插值仅仅要求多项式在插值节点处与被插函数有相等的函数值,而这种插值多项式却不能够全面反映被插值函数的形态。
然而在许许多多的实际问题中,不仅要求插值函数与被插值函数在所有节点处有相同的函数值,它也需要一个或全部节点上插值多项式与被插函数有相同的低阶甚至高阶的导数值。
上面两种插值方法都不能满足。
4. 埃尔米特(Hermite)插值
不但要求在节点上的函数值相等,而且还要求对应的导数值也相等,甚至要求高阶导数也相等,满足这种要求的插值多项式就是埃尔米特插值多项式
原理
设函数 f(x) 在区间[a,b]上有n+1个互异节点
a
=
x
o
<
x
1
<
x
2
<
.
.
.
<
x
n
=
b
a = x_o <x_1<x_2<...<x_n = b
a=xo<x1<x2<...<xn=b
定义在[a,b]上函数f(x)在节点上满足:
f
(
x
i
)
=
y
i
,
f
′
(
x
i
)
=
y
i
′
(
i
=
0
,
1
,
2
,
.
.
,
n
)
(
2
n
+
2
个
条
件
)
f(x_i) = y_i,f'(x_i) = y_i' (i=0,1,2,..,n)(2n+2个条件)
f(xi)=yi,f′(xi)=yi′(i=0,1,2,..,n)(2n+2个条件)
可唯一确定一个次数不超过2n+1的多项式
H
2
n
+
1
(
x
)
=
H
(
x
)
H_{2n+1}(x)= H(x)
H2n+1(x)=H(x)满足:
H
(
x
j
)
=
y
j
,
H
′
(
x
j
)
=
m
j
(
j
=
0
,
1
,
.
.
,
n
)
H(x_j) = y_j, H'(x_j) = m_j(j=0,1,..,n)
H(xj)=yj,H′(xj)=mj(j=0,1,..,n)
其余项为:
R
(
x
)
=
f
(
x
)
−
H
(
x
)
=
f
(
2
n
+
2
)
(
ξ
)
(
2
n
+
2
)
!
ω
2
n
+
2
(
2
)
R(x) = f(x) -H(x) = \frac{f^{(2n+2)}(\xi)}{(2n+2)!}\omega_{2n+2}(2)
R(x)=f(x)−H(x)=(2n+2)!f(2n+2)(ξ)ω2n+2(2)
常用: 分段三次埃尔米特插值
直接使用Hermite插值得到的多项式次数比较高,也存在着龙格现象,因此在实际应用中,往往使用分段三次Hermite插值多项式(PCHIP)。
Matlab 有内置函数:
p = pchip(x,y,new_x)
x是已知样本点的横坐标, y是已知样本点的纵坐标,new_x是要插入处对应的横坐标.
例如:
x = -pi:pi; y=sin(x); %等差项为1
new_x = -pi:0.1:pi; %等差项为0.1
p = pchip(x, y, new_x);
figure(1);
plot(x, y, 'o', new x, p, 'r-')
三次样条插值
设y = f(x)在点
x
0
,
x
1
,
x
2
,
.
.
,
x
n
x_0, x_1, x_2,..,x_n
x0,x1,x2,..,xn的值为
y
0
,
y
1
,
y
2
,
.
.
.
,
y
n
y_0, y_1, y_2,...,y_n
y0,y1,y2,...,yn,若函数S(x)满足下列条件:
(1)
S
(
x
i
)
=
f
(
x
i
)
=
y
i
,
i
=
0
,
1
,
2
,
.
.
,
n
S(x_i) = f(x_i) = y_i, i =0,1,2,..,n
S(xi)=f(xi)=yi,i=0,1,2,..,n
(2) 在每个子区间
[
x
i
,
x
i
+
1
]
(
i
=
0
,
1
,
2
,
.
.
.
,
n
)
[x_i,x_i+1](i=0,1,2,...,n)
[xi,xi+1](i=0,1,2,...,n)上S(X)是三次多项式
(3) S(x)在[a,b]上二阶连续可微。
则称S(x)为函数f(x)的三次样条插值函数
Matlab 有内置函数:
p = spline(x, y, new_x)
例如:
x = -pi:pi;
y = sin(x)
new_x = -pi:0.1:pi;
p1= pchip(x, y, new_x);
p2 = spline(x, y, new_x);
plot(x, y, 'o', new_x, p1, 'r-', new_x, p2, 'b-')
legend('样本点', '三次埃尔米特插值', '三次调养插值', 'Location','SouthEast') %标注在东南方向
5.n维数据的插值
p = interpn(x1, x2,…,xn,y, new_x1, new_x2,…,new_xn, method)
x1, x2,…,xn是已知样本点的横坐标
y是已知的样本点的纵坐标
new_x1,new_x2,…new_xn是要插入点的横坐标
mothod 是要插值得方法:
‘linear’ : 线性插值
‘cubic’: 三次插值
‘spline’: 三次样条插值(最为精确)
‘nearest’:最近邻插值算法
x = -pi:pi;
new_x = -pi:0.1:pi;
p = spline(x, y, new_x);
%等于 p = interpn(x, y, new_x, 'spline');
plot(x, y, 'o', new_x, p, 'r-')
也可以使用上面得插值算法进行预测。