matlab学习--插值和拟合

在平面上给定一组离散点列,要求一条曲线,把这些点按次序连接起来,称为插值。
分段线性插值是指将每两个相邻的节点用直线连起来,如此形成一条折线就是分段线性插值函数,记作 In(x)
样条插值的概念:数学上将具有一定光滑性的分段多项式称为样条函数。利用样条函数进行插值,取插值函数为样条函数,称为样条插值。
1.一维插值函数:Matlab中现成的一维插值函数interp1,语法为y=interp1(x0,y0,x,'method')。method为插值的方法,默认为线性插值,其值可以是:
- nearest 最近项插值
- linear 线性插值
- spline 立方样条插值
- cubic 立方插值
所有的插值方法要求x0单调,当x0为等距时可以用快速插值法,使用快速插值法的格式为‘*nearest”*linear”*spline”*cubic’
2.三次样条插值:在matlb中数据点称为断点。如果三次样条插值没有边界条件,最常采用的方法为非扭结(not-a-knot)条件。该条件强迫第一个和第二个三次多项式的三阶导数相等。对最后一个和倒数第二个三次多项式也做同样的处理。
Matlab中三次样条插值有如下函数:

y=interp1(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是插值点
cspae返回值是pp形式,要求插值的函数值必须调用函数fnval.
pp=caspe(x0,y0)使用默认的边界条件,即Lagrange边界条件
pp=csape(x0,y0.conds,valconds)中的conds指定插值的边界条件,其值可以是:
- ’complete’边界为一阶导数,导数的值在valconds参数中给出若忽略valconds则按默认情况处理。
- ‘not-a-knot’
- ’periodic‘周期条件
- ’second‘边界为二阶导数二阶导数的值在valconds中的给出,忽略则二阶导数值为[0,0]
- ‘variational’设置二阶导数值为[0,0]
对于一些特殊的边界条件可以通过conds的一个1*2的矩阵来表示,conds元素的取值为0、1、2。
conds(i)=j的含义是给定端点i的j阶导数,即conds的第一个元素表示左边界的条件,第二个元素表示有边界的条件,conds=[2,1]表示左边界为二阶导数,右边界为一阶导数,对应的值由valconds给出。
3.二维插值:若点是二维的,插值函数就是二元函数,即曲面如在某区域测量了若干点的高程,为了画出较精确的等高线图,就要先插入更多的点,计算这些点的高程。
(1)插值结点为网格节点
已知m*n个节点,求(x,y)的插值z。

z=interp2(x0,y0,z0,x,y,'method')

如果是三次样条插值,可以使用命令:pp=csape({x0,y0},z0,conds,valconds),z=fnval(pp,{x,y})
(2)插值结点为散乱节点

ZI=griddata(x,y,z,XI,YI)

拟合问题的提法是:已知一组(二维)数据,即平面上的 n个点,寻求一个函数曲线,使函数在某种准则下与其他所欲数据最为接近,即曲线拟合最好。
最小二乘法的Matlab实现: J(a1,a2,...,am)=||RAY||22
如果取{ r1(x),r2(x),rm+1(x) }={ 1,x,...,xm }.即用m次多项式拟合给定数据,Matlab中有现成的函数a=polyfit(x0,y0,m)
目标函数由若干个函数的平方和构成,这类函数一般可以写成 F(x)=mi=1f2i(x),xRn 。把极小化这类问题称为最小化二乘法优化问题。
用于求解最小二乘法的优化问题的函数用lsqlin、lsqcurvefit、lsqnonlin、lsqnonneg函数。
已知一组离散数据,选择一个较简单的函数f(x),在一定准则下,最接近这些数据。
如果已知一个较复杂的连续函数y(x),要求选择一个较简单的函数f(x),在一定准则下最接近y(x),就是所谓函数逼近。

猜你喜欢

转载自blog.csdn.net/Han_L/article/details/77945592