美文网首页
MATLAB编程与应用系列-第5章 多项式与数据分析(2)

MATLAB编程与应用系列-第5章 多项式与数据分析(2)

作者: 德特数据 | 来源:发表于2018-10-27 22:52 被阅读0次

    本系列教程来源于出版设计《基于MATLAB编程基础与典型应用书籍》,如涉及版权问题,请联系:156204968@qq.com。 出版社:人民邮电出版社, 页数:525。

    本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:156204968@qq.com

    5.2 数据插值

    插值运算是根据数据点的规律,首先找到一个多项式连接这些已知的数据点,然后根据该多项式计算出要得到的与已知数据点相邻的点对应的数值。数据的插值运算在信号和图象处理等领域使用比较广泛。MATLAB提供了专用的函数来处理数据的插值问题,下面将详细的介绍使用这些插值函数的方法。

    5.2.1 一维数据插值

    一维插值是指对一个自变量的插值,实现一维数据插值的函数是interp1,该函数的调用格式为:

    Y1=interp1(X,Y,X1,'method')
    

    interp1函数的功能是根据X,Y的值,计算出在X1处的值,并返回给Y1。其中,X和Y是两个等长的已知向量,分别描述采样点和样本值;X1是一个向量或标量,描述欲插值的点,返回值Y1是与X1等长的插值结果;method是插值函数的类型,允许的取值有“linear”(线性插值)、“nearest”(用最接近的相邻点插值)、“cubic”(三次插值)和“spline”(三次样条插值),linear为默认值。

    注意:X1的取值范围不能超出X的给定范围,否则,会给出“NaN”错误。

    除此之外,MATLAB还提供了一个专门的用于3次样条插值的函数spline,功能与函数Y1=interp1(X,Y,X1,‘spline’)完全相同,使用方法也类似。该函数的调用格式如下:

    Y1=spline(X,Y,X1)
    

    【例5.8】一维数据插值
    在命令窗口输入以下内容,生成用于一维插值运算的数据h和k。
    >> h=0:0.3:5;
    >> k=cos(h); %生成插值运算数据点
    下面分别采用不同的插值函数类型进行插值,用户可以通过该示例对比以下插值的计算结果。参数method分别取值‘linear’、‘nearest’、‘cubic’、‘spline’时的具体操作如下,读者可自行比较采用不同插值方法的计算精度:
    >> Y1=interp1(h,k,2,'linear') %采用线形函数插值
    >> Y1=interp1(h,k,2,'nearest') %采用最近邻插值
    >> Y1=interp1(h,k,2,'cubic') %采用三次多项式插值
    >> Y1=interp1(h,k,2,'spline') %采用三次样条插值
    >> Y1=spline(h,k,2) %三次样条插值

    注意:不同的插值函数具有不同的计算特性,适用的场合也不同,用户使用时一定要根据具体的应用选用不同的插值函数。linear最常用,计算的速度也较快,是插值函数的缺省设置;cubic和spline插值效果的平滑性较好,插值的精度比较高,但是计算的速度也相应的减慢;nearst的计算速度最快,但是精度比较低,平滑性较差。

    5.2.2 二维数据插值

    除前面介绍的一维数据的插值,MATLAB还提供用于解决二维插值问题的函数interp2,该函数的调用格式为:

    Z1=interp2(X,Y,Z,X1,Y1,'method')
    

    其中,X和Y是两个向量,分别描述两个参数的采样点,Z是与参数采样点对应的函数值,X1,Y1是两个向量或标量,描述欲插值的点。返回值Z1是根据相应的插值方法得到的插值结果。method的取值与一维插值函数相同。X,Y,Z也可以是矩阵形式。

    注意:X1,Y1的取值范围不能超出X,Y的给定范围,否则,会给出“NaN”错误。

    【例5.9】二维数据插值
    在命令窗口输入以下内容,生成用于二维插值运算的数据如下所示:
    >> x=0:2.5:10
    >> h=[0:30:60]'
    >> T=[95,14,0,0,0;88,48,32,12,6;67,64,54,48,41]
    >> xi=[0:10]
    >> hi=[0:20:60]'
    使用函数interp2进行插值运算,T必须为矩阵形式,即至少是2x2阶以上的矩阵。在命令窗口中输入如下内容:
    >> TI=interp2(x,h,T,xi,hi) %使用函数interp2进行插值运算

    注意:Z必须为矩阵形式,即至少是2x2阶以上的矩阵。

    5.3 曲线拟合

    多项式曲线拟合是用一个多项式来逼近一组给定的数据,拟合的准则是最小二乘法,即找出使\rm{min} \sum_{i=1}^n||f(x_i)-y_i||^2f(x).
    在MATLAB中,用polyfit函数来求得最小二乘拟合多项式的系数,计算得到多项式后可以用polyval函数计算所给出点的近似值。polyfit函数的调用格式为:

    [P,S]=polyfit(X,Y,m)
    

    polyfit函数根据采样点X和采样点函数值Y,返回一个m次多项式P及供polyval使用的结构数组S,S有三个域:S.R给出QR分解后满足Q·R=V的矩阵R,S.df给出相应χ2量的自由度,S.normr给出拟合残数的2—范数。其中X,Y是两个等长的向量,P是一个长度为m+1的向量,P的元素为多项式系数。

    【例5.10】曲线拟合
    在命令窗口输入以下内容,生成用于曲线拟合的数据如下所示:
    >> A=[1 2 3 4 5 5 3 4 8 5 6 8 7 6 9 2 6 8 2 1 2 7 9 3 9 ] %数据点X轴
    >> B=[5 3 4 8 5 6 8 7 6 9 2 6 8 2 1 2 7 9 3 9 4 5 6 7 8 ] %数据点Y轴
    >> x=1:1:10 %拟合数据点
    ①根据采样点A和采样点函数值B,产生一个2次多项式P及供polyval使用的结构数组S。在命令窗口输入:
    >> [P,S]=polyfit(A,B,2) %产生一个2次多项式P
    调用polyfit函数得到二次多项式各项系数如下:
    P =
    -0.0357 0.4527 4.4691
    用ployval函数计算拟合多项式在给定点的函数值。在命令行窗口中输入以下命令:

    >> Y=polyval(P,x) %根据多项式系数向量计算对应点x处的拟合函数值
    即可计算得到拟合多项式在给定点的函数值。

    注意:曲线拟合时正确选择所要拟合的多项式的阶是很重要的,并不是拟合多项式的阶越高精度越好,为了保证拟合的精度,一般拟合多项式的阶不超过5阶。

    作者:德特数据
    联系方式:156204968@qq.com

    相关文章

      网友评论

          本文标题:MATLAB编程与应用系列-第5章 多项式与数据分析(2)

          本文链接:https://www.haomeiwen.com/subject/izyqtqtx.html