当前位置:文档之家› Matlab数据插值与拟合

Matlab数据插值与拟合


分段线性插值方法在速度和误差之间取得 了比较好的均衡,其插值函数具有连续性, 但在已知数据点处的斜率一般不会改变, 因此不是光滑的。分段线性插值方法是 MATLAB一维插值默认的方法。 MATLAB一维插值默认的方法。
2.Spline(样条插值) 2.Spline(样条插值)
样条插值是用分段低次多项式去逼近函数。样条函 样条插值是用分段低次多项式去逼近函数。样条函 数可以给出光滑 的插值曲线,只要在插值区间端 点提供某些导数信息,样条插值可以适应不同光滑 需求。三次样条是使用最为广泛的样条插值,它在 需求。三次样条是使用最为广泛的样条插值,它在 每个子区间[x 每个子区间[xi,xi+1]上都是有二阶连续导数的三次多 项式,即
4.1.1 一元插值函数
MATLAB中的一元插值函数为interp1( ),它的功能是一维 MATLAB中的一元插值函数为interp1( ),它的功能是一维 数据插值(表格查找)。该命令对数据点之间进行计算内 插值,它出一元函数f(x)在中间点的数值,其中函数f(x)由 插值,它出一元函数f(x)在中间点的数值,其中函数f(x)由 所给数据决定。 一元插值函数interp1( )的几种调用格式如表4 一元插值函数interp1( )的几种调用格式如表4-1所示。 表4-1 一维插值插值函数interp1的语法格式 一维插值插值函数interp1的语法格式
例4-1 用interp1对sin函数进行分段线性插值。 interp1对sin函数进行分段线性插值 函数进行分段线性插值。
解:在MATLAB命令窗口中输入以下命令: 解:在MATLAB命令窗口中输入以下命令: >> x=0:2*pi; >> y=sin(x); >> xx=0:0.5:2*pi >> yy=interp1(x,y,xx); >> plot(x,y,'s',xx,yy) 注:例 注:例4-1中用默认的 (分段线性插值的linear) 分段线性插值的linear) 对已知的7 sin函数的 对已知的7个sin函数的 数据点进行插值,用 plot画出插值结果。从图中可以看出分段线性就是联结两个 plot画出插值结果。从图中可以看出分段线性就是联结两个 邻近的已知点的线性函数插值计算该区间内插值点上的函数 值。
4.2 拉格朗日插值法
拉格朗日插值法是基于基函数的插值方法,插值多项 拉格朗日插值法是基于基函数的插值方法,插值多项 式可表示为
L( x) = ∑ yi li ( x)
i =0 n
其中li (x) 称为i次基函数: 称为i
( x − x0 ) L ( x − xi −1 )( x − xi +1 ) L ( x − xn ) li ( x) = ( xi − x0 ) L ( xi − xi −1 )( xi − xi +1 ) L ( xi − xn )
在MATLAB中编程实现拉格朗日插值法函数为: MATLAB中编程实现拉格朗日插值法函数为:
Language。 Language。 功能:求已知数据点的拉格朗日多项式; 调用格式:f= Language(x,y)或 Language(x,y,x0)。 调用格式:f= Language(x,y)或f= Language(x,y,x0)。 其中,x为已知数据点的x 其中,x为已知数据点的x 坐标向量; y为已知数据点的y 坐标向量; 为已知数据点的y x0为插值点的x坐标; x0为插值点的x f为求得的拉格朗日多项式或x0处的插值。 为求得的拉格朗日多项式或x0处的插值。
例4-2 用其他一维插值方法对以下7个离散数据点 用其他一维插值方法对以下7 (1,3.5)、(2,2.1)、(3,1.3)、(4.0.8)、(5,2.9)、(6,4.2)、 (1,3.5)、(2,2.1)、(3,1.3)、(4.0.8)、(5,2.9)、(6,4.2)、 (7,5.7)进行一维插值方法。 (7,5.7)进行一维插值方法。 进行一维插值方法
p1 ( x), p ( x), p ( x) = 2 L pn ( x), x1 ≤ x ≤ x2 x2 ≤ x ≤ x3 L xn ≤ x ≤ xn +1
其中 pi (x) 都是三次多项式。
对于给定的离散的测量数据经x 对于给定的离散的测量数据经x,y(称为断点), 要寻找一个三次多项式y=p(x), 要寻找一个三次多项式y=p(x), 以逼近每对数据 (xi,yi)点间曲线。过两点(xi,yi)和(xi+1,yi+1)只能确定一 点间曲线。过两点(x 条直线,而通过一点的三次多项式曲线有无穷多条。 为使通过中间断点的三次多项式曲线具有唯一性, 要增加以下的连续条件和边界条件(因为三次多项 式有4 式有4个系数): (1)三次多项式在点(xi,yi)处有: pi ( xi ) = pi +1 ( xi ) ; )三次多项式在点(x (2)三次多项式在点(xi,yi)处有:pi′( xi ) = pi′+1 ( xi ) ; )三次多项式在点(x p (3)三次多项式在点(xi,yi)处有: i′′( xi ) = pi′′+1 ( xi ) ; )三次多项式在点(x (4)边界条件:f ′′( x1 ) = f ′′( xn ) = 0 。
4.1 MATLAB中的插值函数 MATLAB中的插值函数
函数插值来源于函数的以下问题:只知道函 函数插值来源于函数的以下问题:只知道函 数在某区间有定义且已得到区间内一些离散 点的值,希望用简单的表达式近似给出函数 在此区间上的整体描述,并能与已知离散点 上的值相等。 插值法按插值函数的形式主要分为以下几种 形式: (1)代数多项式插值; (2)三角多项式插值; (3)有理分式插值。
解:在MATLAB命令窗口中输入以下命令: 解:在MATLAB命令窗口中输入以下命令:
>> x=[1 2 3 4 5 6 7]; >> y=[3.5 2.1 1.3 0.8 2.9 4.2 5.7]; >> xx=1:0.5:7; >> y1=interp1(x,y,xx,'nearest'); >> y2=interp1(x,y,xx,'spline'); >> y3=interp1(x,y,xx,'cubic'); >> plot(x,y,'o',xx,y1,'-',xx,y2,'-.',xx,y3,':') plot(x,y,'o',xx,y1,'-',xx,y2,'-
MATLAB中一维插值有多种算法,由interp1函数 MATLAB中一维插值有多种算法,由interp1函数 中的method指定。 MATLAB中一维插值的各种算 中的method指定。 MATLAB中一维插值的各种算 法如表4 法如表4-2所示。 表4-2 一维插值算法(method) 一维插值算法(method) method
‘nearest’ nearest’ ‘liner’ liner’ ‘spline’ spline’ ‘pchip’ pchip’ ‘cubic’ cubic’ 方法描述 最邻近插值:插值点处函数值取与插值点最邻近的已知点的函数值 分段线性插值:插值点处函数值由连接其最邻近的两侧点的线性函 数预测,MATLAB中interp1的默认方法 数预测,MATLAB中interp1的默认方法 样条插值:默认为三次样条插值。可用spline函数代替 样条插值:默认为三次样条插值。可用spline函数代替 三次Hermite多项式插值。可用pchip函数代替 三次Hermite多项式插值。可用pchip函数代替’,三次Hermite多项式插值
语法形式 y=interp1(x y=interp1(x,Y,xi) y=interp1(x y=interp1(x,Y,xi) y=interp1(x y=interp1(x,Y,xi,method) y=interp1(x y=interp1(x,Y,xi,method,’extrap’) ,method,’extrap’ y=interp1(x y=interp1(x,Y,xi,method,’extrap’,extrapval) ,method,’extrap’ y=interp1(x y=interp1(x,Y,xi,method,’pp’) ,method,’pp’ 说明 由已知点集( )插值计算x 由已知点集(x,Y)插值计算xi上的函数值 相当于x=1:length(Y interp(x 相当于x=1:length(Y)的interp(x,Y,xi) 用指定插值方法计算插值点x 用指定插值方法计算插值点xi上的函数值 对xi中超出已知点集的插值点用指定插值 方法计算函数值 用指定方法插值x 用指定方法插值xi上的函数值,超出已知 点集处函数值取extrapval 点集处函数值取extrapval 用指定方法插值,但返回结果为分段多 项式
表4-2中各种方法中: (1)nearest方法速度最快,占用内存最小,但一般 nearest方法速度最快,占用内存最小,但一般 来说误差最大,插值结果最不光滑; (2)spline三次样条插值是所有插值方法中运行耗 spline三次样条插值是所有插值方法中运行耗 时最长的,其插值函数以及插值函数的一阶、二阶 导函数都连续,因此是最光滑的插值方法,占用内 cubic 存上比cubic方法小,但当已知数据点不均匀分布时 存上比cubic方法小,但当已知数据点不均匀分布时 可能出现异常结果。 (3)cubic三次多项式插值法中插值函数及其一阶导 cubic三次多项式插值法中插值函数及其一阶导 数都是连续的,因此其插值结果也比较光滑,运算 速度比spline方法略快,但占用内存最多。在实际 速度比spline方法略快,但占用内存最多。在实际 的使用中,应根据实际需求和运算条件选择合适的 算法。
相关主题