先说一下插值的定义,本文主要讨论拉格朗日(lagrange)插值法和牛顿(newton)两种方法。
插值: 在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。
已知平面上n+1 个点
{
x
i
,
y
i
}
\{x_i,y_i\}
{xi,yi} 其中 i=0,1,2,3…n ;
求解析函数f(x) ,恰好经过这n+1 个点。
多项式插值: 在给给定的平面上有n+1 个点,
{
x
i
,
y
i
}
\{x_i,y_i\}
{xi,yi},求一个多项式
P
n
(
x
)
=
a
n
x
n
+
a
n
−
1
x
n
−
1
+
a
n
−
2
x
n
−
2
+
.
.
.
+
a
0
P_n(x)=a_nx^n+a_{n-1}x^{n-1}+a_{n-2}x^{n-2}+...+a_0
Pn(x)=anxn+an−1xn−1+an−2xn−2+...+a0
使
得
y
=
P
n
(
x
)
使得y=P_n(x)
使得y=Pn(x),刚好经过这n+1 个点。
lagrange 插值法
首先构造一个基函数,每个点都会对应一个基函数。
x
i
→
l
i
(
x
)
x_i \rightarrow l_i(x)
xi→li(x)
其中,基函数满足以下两个条件:
条件一
{
l
i
(
x
i
)
=
1
l
i
(
x
j
)
=
0
x
i
≠
x
j
\begin{cases} l_i(x_i)=1 \\ l_i(x_j)=0 &x_i \not = x_j \end{cases}
{li(xi)=1li(xj)=0xi=xj
条件二
l
i
(
x
)
是
多
项
式
l_i(x) 是多项式
li(x)是多项式
基函数的定义如下:
l
o
(
x
)
=
(
x
−
x
1
)
(
x
−
x
2
)
(
x
−
x
3
)
.
.
.
.
.
.
.
.
(
x
−
x
n
)
(
x
0
−
x
1
)
(
x
0
−
x
2
)
(
x
0
−
x
3
)
.
.
.
.
.
(
x
0
−
x
n
)
l
1
(
x
)
=
(
x
−
x
0
)
(
x
−
x
2
)
(
x
−
x
3
)
.
.
.
.
.
.
.
.
(
x
−
x
n
)
(
x
1
−
x
0
)
(
x
1
−
x
2
)
(
x
1
−
x
3
)
.
.
.
.
.
(
x
1
−
x
n
)
l_o(x)=\frac{(x-x_1)(x-x_2)(x-x_3)........(x-x_n)}{(x_0-x_1)(x_0-x_2)(x_0-x_3).....(x_0-x_n)} \\ l_1(x)=\frac{(x-x_0)(x-x_2)(x-x_3)........(x-x_n)}{(x_1-x_0)(x_1-x_2)(x_1-x_3).....(x_1-x_n)}
lo(x)=(x0−x1)(x0−x2)(x0−x3).....(x0−xn)(x−x1)(x−x2)(x−x3)........(x−xn)l1(x)=(x1−x0)(x1−x2)(x1−x3).....(x1−xn)(x−x0)(x−x2)(x−x3)........(x−xn)
有了这个基函数,我们就可以继续求插值的多项式;
P
n
(
x
)
=
∑
i
=
0
n
l
i
(
x
)
y
i
P_n(x)=\sum_{i=0}^nl_i(x)y_i
Pn(x)=i=0∑nli(x)yi
例题时刻
例1. 设有两个点(2,3),(1,2),求这两个点的插值多项式。
先求
l
i
l_i
li
l
0
=
(
x
−
1
)
(
2
−
1
)
=
x
−
1
l
1
=
(
x
−
2
)
(
1
−
2
)
=
2
−
x
l_0=\frac{(x-1)}{(2-1)}=x-1\\l_1=\frac{(x-2)}{(1-2)}=2-x
l0=(2−1)(x−1)=x−1l1=(1−2)(x−2)=2−x
所以有
P
n
(
x
)
=
(
x
−
1
)
∗
3
+
(
2
−
x
)
∗
2
P_n(x)=(x-1)*3+(2-x)*2
Pn(x)=(x−1)∗3+(2−x)∗2
例2. 设有三个点 (2,3),(1,2),(3,1),求这三个带你的多项式插值多项式。
先求
l
i
l_i
li
l
0
=
(
x
−
1
)
(
x
−
3
)
(
2
−
1
)
(
2
−
3
)
=
(
1
−
x
)
(
x
−
3
)
l
1
=
(
x
−
2
)
(
x
−
3
)
(
1
−
2
)
(
1
−
3
)
=
1
2
(
x
−
2
)
(
x
−
3
)
l
2
=
(
x
−
2
)
(
x
−
1
)
(
3
−
2
)
(
3
−
1
)
=
1
2
(
x
−
2
)
(
x
−
1
)
l_0=\frac{(x-1)(x-3)}{(2-1)(2-3)}=(1-x)(x-3)\\ l_1=\frac{(x-2)(x-3)}{(1-2)(1-3)}=\frac{1}{2}(x-2)(x-3)\\ l_2=\frac{(x-2)(x-1)}{(3-2)(3-1)}=\frac{1}{2}(x-2)(x-1)
l0=(2−1)(2−3)(x−1)(x−3)=(1−x)(x−3)l1=(1−2)(1−3)(x−2)(x−3)=21(x−2)(x−3)l2=(3−2)(3−1)(x−2)(x−1)=21(x−2)(x−1)
所以有
P
n
(
x
)
=
(
1
−
x
)
(
x
−
3
)
∗
3
+
(
x
−
2
)
(
x
−
3
)
+
1
2
(
x
−
2
)
(
x
−
1
)
P_n(x)=(1-x)(x-3)*3+(x-2)(x-3)+\frac{1}{2}(x-2)(x-1)
Pn(x)=(1−x)(x−3)∗3+(x−2)(x−3)+21(x−2)(x−1)
newton插值法
学习这个问题之前,先介绍差商的概念,废话少说,上才艺。
差商即均差,一阶差商是一阶导数的近似值。对等步长(h)的离散函数f(x),其n阶差商就是它的n阶差分与其步长的n次幂的比值。例如n=1时,若差分取向前的或向后的,所得一阶差商就是函数的导数的一阶近似;若差分取中心的,则所得一阶差商是导数的二阶近似。
然后来一波形式化定义:
f
[
x
0
,
x
1
]
f[x_0,x_1]
f[x0,x1]表示两个点
(
x
0
,
y
0
)
,
(
x
1
,
y
1
)
(x_0,y_0),(x_1,y_1)
(x0,y0),(x1,y1)的一阶差商;
f
[
x
0
,
x
1
,
x
2
]
f[x_0,x_1,x_2]
f[x0,x1,x2]表示三个点
(
x
0
,
y
0
)
,
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
(x_0,y_0),(x_1,y_1),(x_2,y_2)
(x0,y0),(x1,y1),(x2,y2)的二阶差商;
f
[
x
0
,
x
1
,
x
2
,
x
3
]
f[x_0,x_1,x_2,x_3]
f[x0,x1,x2,x3]表示四个点
(
x
0
,
y
0
)
,
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
(
x
3
,
y
3
)
(x_0,y_0),(x_1,y_1),(x_2,y_2),(x_3,y_3)
(x0,y0),(x1,y1),(x2,y2),(x3,y3)的三阶差商;
…
下面介绍下差商的计算方法:
对于一阶差商 ,就是一阶导数的近似
f
[
x
0
,
x
1
]
=
y
1
−
y
0
x
1
−
x
0
f
[
x
1
,
x
2
]
=
y
2
−
y
1
x
2
−
x
1
f[x_0,x_1]=\frac{y_1-y_0}{x_1-x_0}\\ f[x_1,x_2]=\frac{y_2-y_1}{x_2-x_1}
f[x0,x1]=x1−x0y1−y0f[x1,x2]=x2−x1y2−y1对于二阶差商,就是一阶差商的差商
f
[
x
0
,
x
1
,
x
2
]
=
f
[
x
1
,
x
2
]
−
f
[
x
0
,
x
1
]
x
2
−
x
0
f[x_0,x_1,x_2]=\frac{f[x_1,x_2]-f[x_0,x_1]}{x_2-x_0}
f[x0,x1,x2]=x2−x0f[x1,x2]−f[x0,x1]就是一个迭代的过程。或者使用下图可以更加生动的表示。
有了这个差商的定义,我们就可以继续求插值多项式了。
y
(
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
)
+
.
.
.
.
y(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)+....
y(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+....
【注】相比拉格朗日法,牛顿法的好处在于,当有一个新的点加入时,前面的计算可以继续使用,只需要计算新加入的点就行了。
例题时刻
例3. 设有两个点(2,3),(1,2),求这两个点的插值多项式。
有差商公式可得
f
[
x
0
,
x
1
]
=
2
−
3
1
−
2
=
1
f[x_0,x_1]=\frac{2-3}{1-2}=1
f[x0,x1]=1−22−3=1
所以
y
(
x
)
=
3
+
1
∗
(
x
−
2
)
y(x)=3+1*(x-2)
y(x)=3+1∗(x−2)
例4. 设有三个点 (2,3),(1,2),(3,1),求这三个带你的多项式插值多项式。
有差商公式可得
f
[
x
0
,
x
1
]
=
2
−
3
1
−
2
=
1
f[x_0,x_1]=\frac{2-3}{1-2}=1
f[x0,x1]=1−22−3=1
f
[
x
1
,
x
2
]
=
1
−
2
3
−
1
=
−
1
2
f[x_1,x_2]=\frac{1-2}{3-1}=-\frac{1}{2}
f[x1,x2]=3−11−2=−21
f
[
x
0
,
x
1
,
x
2
]
=
−
1
/
2
−
1
3
−
2
=
−
3
2
f[x_0,x_1,x_2]=\frac{-1/2-1}{3-2}=-\frac{3}{2}
f[x0,x1,x2]=3−2−1/2−1=−23
所以
y
(
x
)
=
3
+
1
∗
(
x
−
2
)
−
3
2
∗
(
x
−
2
)
(
x
−
1
)
y(x)=3+1*(x-2)-\frac{3}{2}*(x-2)(x-1)
y(x)=3+1∗(x−2)−23∗(x−2)(x−1)
也可以如下图分析。只要取红绿任意一条路就行了。