第九章 插值与拟合综述.docx
《第九章 插值与拟合综述.docx》由会员分享,可在线阅读,更多相关《第九章 插值与拟合综述.docx(36页珍藏版)》请在冰豆网上搜索。
第九章插值与拟合综述
第九章插值与拟合
插值:
求过已知有限个数据点的近似函数。
拟合:
已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义下它在这些点上的总偏差最小。
插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者的数学方法上是完全不同的。
而面对一个实际问题,究竟应该用插值还是拟合,有时容易确定,有时则并不明显。
§1插值方法
下面介绍几种基本的、常用的插值:
拉格朗日多项式插值、牛顿插值、分段线性插值、Hermite插值和三次样条插值。
1.1拉格朗日多项式插值
1.1.1插值多项式
用多项式作为研究插值的工具,称为代数插值。
其基本问题是:
已知函数
在区间
上
个不同点
处的函数值
,求一个至多
次多项式
(1)
使其在给定点处与
同值,即满足插值条件
(2)
称为插值多项式,
称为插值节点,简称节点,
称为插值区间。
从几何上看,
次多项式插值就是过
个点
,作一条多项式曲线
近似曲线
。
次多项式
(1)有
个待定系数,由插值条件
(2)恰好给出
个方程
(3)
记此方程组的系数矩阵为
,则
是范德蒙特(Vandermonde)行列式。
当
互不相同时,此行列式值不为零。
因此方程组(3)有唯一解。
这表明,只要
个节点互不相同,满足插值要求
(2)的插值多项式
(1)是唯一的。
插值多项式与被插函数之间的差
称为截断误差,又称为插值余项。
当
充分光滑时,
其中
。
1.1.2拉格朗日插值多项式
实际上比较方便的作法不是解方程(3)求待定系数,而是先构造一组基函数
是
次多项式,满足
令
(4)
上式称为
次Lagrange插值多项式,由方程(3)解的唯一性,
个节点的
次Lagrange插值多项式存在唯一。
1.1.3用Matlab作Lagrange插值
Matlab中没有现成的Lagrange插值函数,必须编写一个M文件实现Lagrange插值。
设
个节点数据以数组
输入(注意Matlat的数组下标从1开始),
个插值点以数组
输入,输出数组
为
个插值。
编写一个名为lagrange.m的M文件:
functiony=lagrange(x0,y0,x);
n=length(x0);m=length(x);
fori=1:
m
z=x(i);
s=0.0;
fork=1:
n
p=1.0;
forj=1:
n
ifj~=k
p=p*(z-x0(j))/(x0(k)-x0(j));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end
1.2牛顿(Newton)插值
在导出Newton公式前,先介绍公式表示中所需要用到的差商、差分的概念及性质。
1.2.1差商
定义设有函数
为一系列互不相等的点,称
为
关于点
一阶差商(也称均差)记为
,即
称一阶差商的差商
为
关于点
的二阶差商,记为
。
一般地,称
为
关于点
的
阶差商,记为
容易证明,差商具有下述性质:
1.2.2Newton插值公式
线性插值公式可表成
称为一次Newton插值多项式。
一般地,由各阶差商的定义,依次可得
将以上各式分别乘以
,然后相加并消去两边相等的部分,即得
记
显然,
是至多
次的多项式,且满足插值条件,因而它是
的
次插值多项式。
这种形式的插值多项式称为Newton插值多项式。
称为Newton插值余项。
Newton插值的优点是:
每增加一个节点,插值多项式只增加一项,即
因而便于递推运算。
而且Newton插值的计算量小于Lagrange插值。
由插值多项式的唯一性可知,Newton插值余项与Lagrange余项也是相等的,即
由此可得差商与导数的关系
其中
。
1.2.3差分
当节点等距时,即相邻两个节点之差(称为步长)为常数,Newton插值公式的形式会更简单。
此时关于节点间函数的平均变化率(差商)可用函数值之差(差分)来表示。
定义设有等距节点
,步长
为常数,
。
称相邻两个节点
处的函数值的增量
为函数
在点
处以
为步长的一阶差分,记为
,即
类似地,定义差分的差分为高阶差分。
如二阶差分为
一般地,
阶差分为
,
上面定义的各阶差分又称为向前差分。
常用的差分还有两种:
称为
在
处以
为步长的向后差分;
称为
在
处以
为步长的中心差分。
一般地,
阶向后差分与
阶中心差分公式为
差分具有以下性质:
(
)各阶差分均可表成函数值的线性组合,例如
(
)各种差分之间可以互化。
向后差分与中心差分化成向前差分的公式如下:
1.2.4等距节点插值公式
如果插值节点是等距的,则插值公式可用差分表示。
设已知节点
,则有
若令
,则上式又可变形为
上式称为Newton向前插值公式。
1.3分段线性插值
1.3.1插值多项式的振荡
用Lagrange插值多项式
近似
,虽然随着节点个数的增加,
的次数
变大,多数情况下误差
会变小。
但是
增大时,
的光滑性变坏,有时会出现很大的振荡。
理论上,当
,在
内并不能保证
处处收敛于
。
Runge给出了一个有名的例子:
对于较大的
,随着
的增大,
振荡越来越大,事实上可以证明,仅当
时,才有
,而在此区间外,
是发散的。
高次插值多项式的这些缺陷,促使人们转而寻求简单的低次多项式插值。
1.3.2分段线性插值
简单地说,将每两个相邻的节点用直线连起来,如此形成的一条折线就是分段线性插值函数,记作
,它满足
,且
在每个小区间
上是线性函数
。
可以表示为
有良好的收敛性,即对于
有,
。
用
计算
点的插值时,只用到
左右的两个节点,计算量与节点个数
无关。
但
越大,分段越多,插值误差越小。
实际上用函数表作插值计算时,分段线性插值就足够了,如数学、物理中用的特殊函数表,数理统计中用的概率分布表等。
1.3.3用Matlab实现分段线性插值
用Matlab实现分段线性插值不需要编制函数程序,Matlab中有现成的一维插值函数interp1。
y=interp1(x0,y0,x,'method')
method指定插值的方法,默认为线性插值。
其值可为:
'nearest'最近项插值
'linear'线性插值
'spline'立方样条插值
'cubic'立方插值。
所有的插值方法要求x0是单调的。
当x0为等距时可以用快速插值法,使用快速插值法的格式为'*nearest'、'*linear'、'*spline'、'*cubic'。
1.4埃尔米特(Hermite)插值
1.4.1Hermite插值多项式
如果对插值函数,不仅要求它在节点处与函数同值,而且要求它与函数有相同的一阶、二阶甚至更高阶的导数值,这就是Hermite插值问题。
本节主要讨论在节点处插值函数与函数的值及一阶导数值均相等的Hermite插值。
设已知函数
在
个互异节点
上的函数值
和导数值
,要求一个至多
次的多项式
,使得
满足上述条件的多项式
称为Hermite插值多项式。
Hermite插值多项式为
其中
,
。
1.4.2用Matlab实现Hermite插值
Matlab中没有现成的Hermite插值函数,必须编写一个M文件实现插值。
设
个节点的数据以数组
(已知点的横坐标),
(函数值),
(导数值)输入(注意Matlat的数组下标从1开始),
个插值点以数组
输入,输出数组
为
个插值。
编写一个名为hermite.m的M文件:
functiony=hermite(x0,y0,y1,x);
n=length(x0);m=length(x);
fork=1:
m
yy=0.0;
fori=1:
n
h=1.0;
a=0.0;
forj=1:
n
ifj~=i
h=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2;
a=1/(x0(i)-x0(j))+a;
end
end
yy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i));
end
y(k)=yy;
end
1.5样条插值
许多工程技术中提出的计算问题对插值函数的光滑性有较高要求,如飞机的机翼外形,内燃机的进、排气门的凸轮曲线,都要求曲线具有较高的光滑程度,不仅要连续,而且要有连续的曲率,这就导致了样条插值的产生。
1.5.1样条函数的概念
所谓样条(Spline)本来是工程设计中使用的一种绘图工具,它是富有弹性的细木条或细金属条。
绘图员利用它把一些已知点连接成一条光滑曲线(称为样条曲线),并使连接点处有连续的曲率。
三次样条插值就是由此抽象出来的。
数学上将具有一定光滑性的分段多项式称为样条函数。
具体地说,给定区间
的一个分划
如果函数
满足:
(
)在每个小区间
上
是
次多项式;
(
)
在
上具有
阶连续导数。
则称
为关于分划
的
次样条函数,其图形为
次样条曲线。
显然,折线是一次样条曲线。
1.5.2三次样条插值
利用样条函数进行插值,即取插值函数为样条函数,称为样条插值。
例如分段线性插值是一次样条插值。
我们只介绍三次样条插值,即已知函数
在区间
上的
个节点
上的值
,求插值函数
,使得
(
)
;(5)
(
)在每个小区间
上
是三次多项式,记为
;
(
)
在
上二阶连续可微。
函数
称为
的三次样条插值函数。
由条件(
),不妨将
记为
其中
为待定系数,共
个。
由条件(
)
(6)
容易看出,(5)、(6)式共含有
个方程,为确定
的
个待定参数,尚需再给出2个条件。
常用的三次样条函数的边界条件有3种类型:
(
)
。
由这种边界条件建立的样条插值函数称为
的完备三次样条插值函数。
特别地,
时,样条曲线在端点处呈水平状态。
如果
不知道,我们可以要求
与
在端点处近似相等。
这时以
为节点作一个三次Newton插值多项式
,以
作一个三次Newton插值多项式
,要求
由这种边界条件建立的三次样条称为
的Lagrange三次样条插值函数。
(
)
。
特别地
时,称为自然边界条件。
(
)
,此条件称为周期条件。
1.5.3三次样条插值在Matlab中的实现
在Matlab中数据点称之为断点。
如果三次样条插值没有边界条件,最常用的方法,就是采用非扭结(not-a-knot)条件。
这个条件强迫第1个和第2个三次多项式的三阶导数相等。
对最后一个和倒数第2个三次多项式也做同样地处理。
Matlab中三次样条插值也有现成的函数:
y=interp1(x0,y0,x,'spline');
y=spline(x0,y0,x);
pp=csape(x0,y0,conds),
pp=csape(x0,y0,conds,valconds),y=ppval(pp,x)。
其中x0,y0是已知数据点,x是插值点,y是插值点的函数值。
对