插值与曲线拟合方法
工程上常遇到的问题:y=f(x)在某处复杂或者未知时,欲求其中某处的函数值:用附近的其他值来推断f(x)。
测x0,x1,…,xn处函数值
f
(
x
0
)
,
f
(
x
1
)
,
.
.
.
,
f
(
x
n
)
f(x_0),f(x_1),...,f(x_n)
f(x0),f(x1),...,f(xn),构造g(x)≈f(x)。同时g’(x)≈f’(x),∫g(x)dx≈∫f(x)dx。
xi为插值节点,
(
x
i
,
y
i
)
{(x_i,y_i)}
(xi,yi)为插值点,f(x)为被插值函数,g(x)为插值函数,最简单的形式为多项式。本章采用多项式插值。
对于g(x):存在否?唯一否?如何表示?准确否?
存在与唯一:给定区间[a,b]上互异的n+1点
{
(
x
j
,
f
(
x
j
)
}
j
=
0
n
\left\{(x_j,f(x_j)\right\}_{j=0}^n
{(xj,f(xj)}j=0n,求
P
n
(
x
)
∈
P
n
P_n(x)\in P_n
Pn(x)∈Pn使得
P
n
(
x
j
)
=
f
(
x
j
)
,
j
=
0
,
1
,
.
.
.
,
n
.
P_n(x_j)=f(x_j),\,j=0,1,...,n.
Pn(xj)=f(xj),j=0,1,...,n.
其中
P
n
P_n
Pn表示次数不高于n的多项式:
P
n
(
x
j
)
=
∑
i
=
0
n
a
i
x
j
i
=
f
(
x
j
)
⇒
n
阶
线
性
方
程
组
⇒
解
有
且
唯
一
P_n(x_j)=\sum_{i=0}^na_ix_j^i=f(x_j)\,\Rightarrow\,n阶线性方程组\,\Rightarrow\,解有且唯一\\\,\\
Pn(xj)=i=0∑naixji=f(xj)⇒n阶线性方程组⇒解有且唯一
可插值条件:无重合节点,即当 i ≠ j i \neq j i=j时 x i ≠ x j x_i \neq x_j xi=xj。
Lagrange插值多项式
插值项要求
P
n
(
x
i
)
=
f
(
x
i
)
,
i
=
0
,
1
,
.
.
.
,
n
P_n(x_i)=f(x_i),\,i=0,1,...,n
Pn(xi)=f(xi),i=0,1,...,n
故选取基本项lj使之对于节点xj结果为1,对于其他节点xi结果都为0。然后进行系数为yi的线性组合即可。
使x为xi时多项式为0,即含有项
(
x
−
x
i
)
(x-x_i)
(x−xi),即令
l
j
=
A
∏
j
=
0
,
j
≠
i
n
(
x
−
x
i
)
l_j=A\prod_{j=0,j\neq i}^n(x-x_i)
lj=A∏j=0,j=in(x−xi)
又因为x为
x
j
x_j
xj时多项式不为0,故分母含有项
(
x
j
−
x
i
)
(x_j-x_i)
(xj−xi)。也可由
l
j
(
x
i
)
=
1
l_j(x_i)=1
lj(xi)=1,得插值基函数为:
l
j
(
x
)
=
∏
i
=
0
,
i
≠
j
n
x
−
x
i
x
j
−
x
i
l_j(x)=\prod_{i=0,i\neq j}^n \frac{x-x_i}{x_j-x_i}
lj(x)=i=0,i=j∏nxj−xix−xi
即满足
l
j
(
x
i
)
=
δ
i
j
≜
{
1
,
i
=
j
,
0
,
i
≠
j
.
i
,
j
=
0
,
1
,
2
,
.
.
,
n
.
l_j(x_i)=\delta _{ij}\triangleq \left\{\begin{array} {lr}1,&i=j,\\0,&i\neq j.\end{array}\right. \,i,j=0,1,2,..,n.
lj(xi)=δij≜{1,0,i=j,i=j.i,j=0,1,2,..,n.
插值多项式即为
P
n
(
x
)
=
∑
j
=
0
n
y
j
l
j
(
x
)
,
n
>
0
P_n(x)=\sum_{j=0}^ny_jl_j(x),\,n>0
Pn(x)=∑j=0nyjlj(x),n>0
基:
Pn为lj(x)以yj作线性组合。lj(x)相互线性无关,作基函数,构成函数空间。
类似:
空间基向量
{
i
⃗
,
j
⃗
,
k
⃗
,
.
.
.
}
\{\vec i,\vec j,\vec k,... \}
{i,j,k,...}
多项式基项
{
1
,
x
,
x
2
,
.
.
.
}
\{1,x,x^2,...\}
{1,x,x2,...}
微分方程
{
1
,
y
,
y
′
,
y
′
′
,
.
.
.
}
\{1,y,y',y'',...\}
{1,y,y′,y′′,...}
插值余项
R
n
(
x
)
=
f
(
x
)
−
P
n
(
x
)
=
f
(
n
+
1
)
(
ξ
)
(
n
+
1
)
!
ω
n
+
1
(
x
)
,
x
∈
[
a
,
b
]
其
中
:
ω
n
+
1
(
x
)
=
∏
i
=
0
n
(
x
−
x
i
)
,
ξ
∈
(
a
,
b
)
R_n(x)=f(x)-P_n(x)=\frac{f^{(n+1)(\xi)}}{(n+1)!}\omega _{n+1}(x),\,x\in [a,b]\\\,\\ 其中:\omega _{n+1}(x)=\prod_{i=0}^n(x-x_i),\, \xi \in (a,b)
Rn(x)=f(x)−Pn(x)=(n+1)!f(n+1)(ξ)ωn+1(x),x∈[a,b]其中:ωn+1(x)=i=0∏n(x−xi),ξ∈(a,b)
当f(x)次数≤n时
f
(
n
+
1
)
(
x
)
=
0
∴
R
n
(
x
)
=
0
f^{(n+1)}(x)=0\,\,\therefore R_n(x)=0
f(n+1)(x)=0∴Rn(x)=0
所以对于n次函数,至少有n+1个点时即可精确确定f(x)
内插与外推:
内插:插值区间中部使用插值(求新点)
外推:插值区间两端或之外使用插值
一般内插优于外推。
分段线性插值
Lagrange插值高于七阶时会产生Runge现象,即边缘震荡导致误差过大。
优化:分段低次插值。
注意:分段函数不是初等函数。
折线法:简单但不光滑,只用于简单计算。
三次样条插值,每段都是三次函数插值,且段间相接处斜率相等/连续。
每次都要解四元线性方程组,计算量太大,不考。
Newton插值法
实际应用中为提高插值精度或有参数更改,一般需要增减节点。而对于lagrange插值法若变更一个节点,则所有基函数必须重算,无承袭性,不方便。
重新选择基函数。
Newton经过计算后选择的基函数为
{
1
,
ω
1
(
x
)
,
ω
2
(
x
)
,
.
.
.
,
ω
n
(
x
)
}
\{1,\omega _1(x),\omega _2(x),...,\omega _n(x)\}
{1,ω1(x),ω2(x),...,ωn(x)}对应系数为
A
0
=
1
,
A
i
=
f
[
x
0
,
x
1
,
.
.
.
,
x
i
]
,
i
=
1
,
2
,
.
.
.
,
n
A_0=1,\,A_i=f[x_0,x_1,...,x_i],\,i=1,2,...,n
A0=1,Ai=f[x0,x1,...,xi],i=1,2,...,n
差商
定义:
0
阶
差
商
:
f
[
x
i
]
=
f
(
x
i
)
1
阶
差
商
:
f
[
x
i
,
x
j
]
=
f
[
x
i
]
−
f
[
x
j
]
x
i
−
x
j
n
阶
差
商
:
f
[
x
0
,
x
1
,
.
.
.
,
x
n
]
=
f
[
x
0
,
x
1
,
.
.
.
,
x
n
−
1
]
−
f
[
x
1
,
x
2
,
.
.
.
,
x
n
]
x
0
−
x
n
=
∑
j
=
0
n
f
(
x
j
)
ω
n
+
1
′
(
x
j
)
0阶差商:f[x_i]=f(x_i)\\\,\\ 1阶差商:f[x_i,x_j]=\frac{f[x_i]-f[x_j]}{x_i-x_j}\\\,\\ n阶差商:f[x_0,x_1,...,x_n]=\frac{f[x_0,x_1,...,x_{n-1}]-f[x_1,x_2,...,x_n]}{x_0-x_n}\\\,\\ =\sum _{j=0}^n \frac{f(x_j)}{\omega _{n+1}'(x_j)}
0阶差商:f[xi]=f(xi)1阶差商:f[xi,xj]=xi−xjf[xi]−f[xj]n阶差商:f[x0,x1,...,xn]=x0−xnf[x0,x1,...,xn−1]−f[x1,x2,...,xn]=j=0∑nωn+1′(xj)f(xj)
差商定义中分母为分子中不重叠的数值。
最后n阶差商的数值可知差商值与节点排序无关,有对称性。
n+1点算出的n阶差商唯一,这个了解即可。
差商反推f(x)
列写0至n阶差商,其中将i+1阶差商中的xi替换为x。
f
[
x
0
,
x
1
,
.
.
.
,
x
i
,
x
]
=
f
[
x
0
,
x
1
,
.
.
.
,
x
i
−
2
,
x
i
−
1
]
−
f
[
x
0
,
x
1
,
.
.
.
,
x
i
−
1
,
x
]
x
i
−
x
∴
f
[
x
0
,
x
1
,
.
.
.
,
x
i
−
1
,
x
]
=
f
[
x
0
,
x
1
,
.
.
.
,
x
i
]
+
f
[
x
0
,
x
1
,
.
.
.
,
x
i
,
x
]
(
x
−
x
i
)
f[x_0,x_1,...,x_i,x]=\frac{f[x_0,x_1,...,x_{i-2},x_{i-1}]-f[x_0,x_1,...,x_{i-1},x]}{x_i-x}\\\,\\ \therefore f[x_0,x_1,...,x_{i-1},x]=f[x_0,x_1,...,x_i]+f[x_0,x_1,...,x_i,x](x-x_i)
f[x0,x1,...,xi,x]=xi−xf[x0,x1,...,xi−2,xi−1]−f[x0,x1,...,xi−1,x]∴f[x0,x1,...,xi−1,x]=f[x0,x1,...,xi]+f[x0,x1,...,xi,x](x−xi)
高阶向低阶迭代,得:
f
(
x
)
=
N
n
(
x
)
+
R
n
(
x
)
=
f
(
x
0
)
+
∑
i
=
1
n
f
[
x
0
,
.
.
.
,
x
i
]
ω
i
(
x
)
+
f
[
x
0
,
x
1
,
.
.
.
,
x
n
,
x
]
ω
n
+
1
(
x
)
f(x)=N_n(x)+R_n(x) =f(x_0)+\sum _{i=1}^nf[x_0,...,x_i]\omega_i(x)+f[x_0,x_1,...,x_n,x]\omega_{n+1}(x)
f(x)=Nn(x)+Rn(x)=f(x0)+i=1∑nf[x0,...,xi]ωi(x)+f[x0,x1,...,xn,x]ωn+1(x)
对于
i
=
0
,
1
,
2
,
.
.
.
,
n
,
有
R
n
(
x
i
)
=
0
=
f
(
x
1
)
−
N
n
(
x
i
)
i=0,1,2,...,n,\,有R_n(x_i)=0=f(x_1)-N_n(x_i)
i=0,1,2,...,n,有Rn(xi)=0=f(x1)−Nn(xi),由多项式插值唯一性得
P
n
(
x
)
≡
N
n
(
x
i
)
P_n(x)\equiv N_n(x_i)
Pn(x)≡Nn(xi)。
说明二者等价,只是形式不同。
由余项相等得:
R
n
(
x
)
=
f
(
n
+
1
)
(
ξ
)
(
n
+
1
)
!
ω
n
+
1
(
x
)
=
f
[
x
0
,
x
1
,
.
.
.
,
x
n
,
x
]
ω
n
+
1
(
x
)
∴
f
[
x
0
,
.
.
.
,
x
n
]
=
f
(
n
)
(
ξ
)
n
!
,
ξ
∈
{
x
i
}
R_n(x)=\frac{f^{(n+1)(\xi)}}{(n+1)!}\omega _{n+1}(x)=f[x_0,x_1,...,x_n,x]\omega_{n+1}(x)\\\,\\ \therefore f[x_0,...,x_n]=\frac{f^{(n)}(\xi)}{n!},\xi\in\{ x_i\}
Rn(x)=(n+1)!f(n+1)(ξ)ωn+1(x)=f[x0,x1,...,xn,x]ωn+1(x)∴f[x0,...,xn]=n!f(n)(ξ),ξ∈{xi}
在 f ( n ) ( x ) f^{(n)}(x) f(n)(x)为定值时可用此式求n阶差商。
计算
承袭性:
N
n
(
x
)
=
N
n
−
1
(
x
)
+
f
[
x
0
,
x
1
,
.
.
.
,
x
n
]
∏
i
=
0
n
−
1
(
x
−
x
i
)
,
x
∈
[
a
,
b
]
N_n(x)=N_{n-1}(x)+f[x_0,x_1,...,x_n]\prod _{i=0}^{n-1} (x-x_i),\,x\in [a,b]
Nn(x)=Nn−1(x)+f[x0,x1,...,xn]i=0∏n−1(x−xi),x∈[a,b]
N n ( x ) = f ( x 0 ) + ∑ i = 1 n f [ x 0 , x 1 , . . . , x i ] ω i ( 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 2 , x 3 ] ( x − x 0 ) ( x − x 1 ) ( x − x 2 ) + . . . + f [ x 0 , x 1 , . . . , x n ] ( x − x 0 ) ( x − x 1 ) . . . ( x − x n ) N_n(x)=f(x_0)+\sum _{i=1}^nf[x_0,x_1,...,x_i]\omega _i(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_2,x_3](x-x_0)(x-x_1)(x-x_2)+...\\ +f[x_0,x_1,...,x_n](x-x_0)(x-x_1)...(x-x_n) Nn(x)=f(x0)+i=1∑nf[x0,x1,...,xi]ωi(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+f[x0,x1,x2,x3](x−x0)(x−x1)(x−x2)+...+f[x0,x1,...,xn](x−x0)(x−x1)...(x−xn)
每列第一个为系数。多算一行相当于对上一次的结果进行修正,使之更加精确。
若加一个点,则只需多计算一行。
应试
Lagrange插值
插值基函数的图像(幂次/零点)。
求出基函数和系数带入后不必合并,没时间也没必要,得分点在于带入的式子对不对和估计值对不对。
插值余项(我觉得这东西没什么考头,也就背个公式估计个误差范围。但这个公式里面有f,就要求估计误差得知道f的精确值,那还估计个什么呢。硬出出题的话套公式就没什么了。)
R
n
(
x
)
=
f
(
x
)
−
P
n
(
x
)
=
f
(
n
+
1
)
(
ξ
)
(
n
+
1
)
!
ω
n
+
1
(
x
)
,
x
∈
[
a
,
b
]
其
中
:
ω
n
+
1
(
x
)
=
∏
i
=
0
n
(
x
−
x
i
)
,
ξ
∈
(
a
,
b
)
R_n(x)=f(x)-P_n(x)=\frac{f^{(n+1)(\xi)}}{(n+1)!}\omega _{n+1}(x),\,x\in [a,b]\\\,\\ 其中:\omega _{n+1}(x)=\prod_{i=0}^n(x-x_i),\, \xi \in (a,b)
Rn(x)=f(x)−Pn(x)=(n+1)!f(n+1)(ξ)ωn+1(x),x∈[a,b]其中:ωn+1(x)=i=0∏n(x−xi),ξ∈(a,b)
Newton插值
差商的定义。高阶差商写法很多结果相同。
Newton插值计算步骤,曲线拟合和数值估计(就是把自变量值带入拟合的曲线)。
n阶差商的简便计算(
f
f
f为n次函数时)(可能考选择题)。