1 插值方法
在工程和数学应用中,经常有这样一类数据处理问题,在平面上给定一组离散点列,要求一条直线,把这些点按次序连接起来称之为插值。已知n+1个点,下面求各种插值函数。
1.1 分段性插值
简单地说,将每两个相邻的节点用直线连起来,如此形成的一条折线九十分段线性插值函数,记做,它满足,且在每个小区间上是线性函数。
可以表示为,其中
有良好的收敛性,即对于,有
用计算x点的插值时,只用到x左右的两个节点,计算量与节点个数n无关。但n越大,分段越多,插值误差越小。实际上用函数表做差值计算时,分段线性插值就足够了,如数学、物理中用到的特殊函数表,数理统计中用的概率分布表等。
1.2 拉格朗日插值多项式
拉格朗日插值的基函数为
是n次多项式,满足
拉格朗日插值函数
1.3 样条插值
许多工程技术中提出的计算问题对插值函数的光滑性有较高要求,如飞机的机翼外形,内燃机的进、排气门的凸轮曲线,都要求曲线具有较高的光滑程度,不仅要连续,而且要有连续的曲率,这就导致了样条插值的产生。
1.3.1 样条函数的概念
所谓样条(Spline)本来是工程设计中使用的一种绘图工具,它是富有弹性的细木条或金属条。绘图员利用它把一些已知点连接成一条光滑的曲线(称为样条曲线),并使连接点处有连续的曲率。三次样条插值就是由此抽象出来的。
数学上将具有一定光滑性的分段多项式称为样条函数。具体的说,给定区间的一个分划
如果函数满足
(1)在每个小区间上是m次多项式;
(2)在上具有m-1阶连续导数。则称为关于分划的m次样条函数,其图形为m次样条曲线。
显然,折现是一次样条曲线。
1.3.2 三次样条插值
利用样条函数进行插值,即取插值函数为样条函数,称为样条插值。例如分段线性插值是一次样条插值。这里只介绍三次样条插值,即已知函数在区间的n+1个节点
上的值 ,求插值函数,使得
(1);
(2)在每个小区间上是三次多项式,记为;
(3)在上二阶连续可微。
函数称为的三次样条插值函
在数学建模中,常用的是第一种。
1.4 Matlab插值工具箱
1.4.1 一维插值函数
Matlab中有现成的一维插值函数 interp1,语法为
其中,metho指定插值的方法,默认为线性插值。其值可为
所有的插值方法要求x0是单调的。
当x0为等距时可使用快速插值法,使用快速插值法的格式为‘*nearest’、'*linear'、
‘*spline’、‘*cubic’。
1.4.2 三次样条插值
Matlab 中三次样条插值有如下函数
y=interp(x0,y0,x,‘spline’);
y=spline(x0,y0,x);
pp=csape(x0,y0,conds);
pp=csape(x0,y0,conds,valconds); y=fnval(pp,x);
其中x0,y0是已知数据点,x是插值点,y是插值点的函数值。
对于三次样条插值,提倡使用函数csape,csape的返回值是pp形式,要求插值点的函数值,必须调用函数fnval。
pp=csape(x0,y0)使用默认的边界条件,即Lagrange边界条件。
pp=csape(x0,y0,conds,valconds)中的conds指定插值的边界条件,其值可为
complete‘ 边界为一阶导数,一阶导数的值在valconds参数中给出,若忽略valconds参数,则按缺省情况处理。
对于三次样条插值,提倡使用函数csape,csape的返回值是pp形式,要求插值点的函数值,必须调用函数fnval。
pp=csape(x0,y0)使用默认的边界条件,即Lagrange边界条件。
pp=csape(x0,y0,conds,valconds)中的conds指定插值的边界条件,其值可为
complete‘ 边界为一阶导数,一阶导数的值在valconds参数中给出,若忽略valconds参数,则按缺省情况处理。
conds(i)=j的含义是给定端点i的j阶导数,即conds的第一个元素表示左边界的条件,第二个元素表示右边界的条件,conds=[2,1]表示左边界是二阶导数,右边界是一阶导数,对应的值由valconds给出。
1.4.3 二维插值
前面讲述的都是一维插值,即节点为一维变量,插值函数时一元函数(曲线)。若节点是二维的,插值函数就是二元函数,即曲面。如果在某区域测量了若干点(节点)的高程(节点值),为了画出较为精确的等高线图,就要先插入更多的点(插值点),计算这些点的高程(插值)。
(1)插值节点为网格节点
已知个节点,且。求点处的插值。
Matlab中有一些计算二维插值的命令。如,其中x0,y0分别为m维和n维向量,表示节点,z0为维矩阵,表示节点值,x,y,为一维数组,表示插值点,x和y应该是方向不同的向量,即一个是行向量,另一个是列向量,z为矩阵,它的行数为y的维数,列数为x的维数,表示得到的插值,‘method’的用法同上面的一维插值。
如果是三次样条插值,可以使用命令 ,其中x0,y0分别为m维和n维向量,z0为维矩阵,z为矩阵,它的行数为x的维数,列数为y的维数,表示的到的插值,具体使用同一维插值。
(2)插值点为散乱节点
已知n个节点,求该点处的插值z。
对于上述问题,Matlab中提供了插值函数griddata,其格式为
其中x,y,z均为n维向量,指明所给数据点的横坐标、纵坐标和数座标。向量XI,YI是给定的网格点的横坐标和纵坐标,返回值ZI为网格(XI,YI)处的函数值。XI与YI应该是方向不同的向量,即一个是行向量,另一个是列向量。