《实验四 数据插值与拟合》由会员分享,可在线阅读,更多相关《实验四 数据插值与拟合(49页珍藏版)》请在金锄头文库上搜索。
1、实验四实验四 数据插值与拟合数据插值与拟合n n在工程实践与科学实验中在工程实践与科学实验中, ,常常需要从一组试验数常常需要从一组试验数 据之中找到自变量与因变量之间的关系,一般可据之中找到自变量与因变量之间的关系,一般可 用一个近似函数表示。函数产生的办法因观测数用一个近似函数表示。函数产生的办法因观测数 据的要求不同而异,数据据的要求不同而异,数据插值插值与与拟合拟合是两种常用是两种常用 的方法。的方法。n n4.1 MATLAB4.1 MATLAB中的插值函数中的插值函数n n4.2 4.2 拉格朗日插值法拉格朗日插值法n n4.3 4.3 利用均差的牛顿插值法利用均差的牛顿插值法n
2、n4.4 4.4 利用差分的牛顿插值法利用差分的牛顿插值法n n4.5 Hermite4.5 Hermite插值插值n n4.6 spline4.6 spline三次样条插值三次样条插值n n4.7 4.7 多项式曲线拟合多项式曲线拟合n n4.8 4.8 最小二乘拟合最小二乘拟合4.1 MATLAB4.1 MATLAB中的插值函数中的插值函数n n函数插值函数插值来源于函数的以下问题:只知道函来源于函数的以下问题:只知道函 数在某区间有定义且已得到区间内一些离散数在某区间有定义且已得到区间内一些离散 点的值,希望用简单的表达式近似给出函数点的值,希望用简单的表达式近似给出函数 在此区间上的整
3、体描述,并能与已知离散点在此区间上的整体描述,并能与已知离散点 上的值相等。上的值相等。n n插值法按插值函数的形式主要分为以下几种插值法按插值函数的形式主要分为以下几种 形式:形式:(1 1)代数多项式插值;)代数多项式插值;(2 2)三角多项式插值;)三角多项式插值;(3 3)有理分式插值。)有理分式插值。 n n代数多项式插值是最常用的插值方式,其内容也代数多项式插值是最常用的插值方式,其内容也 是最丰富的,它又可分为以下几种插值方式:是最丰富的,它又可分为以下几种插值方式:(1 1)非等距节点插值非等距节点插值,包括拉格朗日插值、利用,包括拉格朗日插值、利用 均差的牛顿插值和埃特金插值
4、;均差的牛顿插值和埃特金插值;(2 2)非等距节点插值非等距节点插值,包括利用差分的牛顿插值,包括利用差分的牛顿插值 和高斯插值等;和高斯插值等;(3 3)在插值中增加了导数的)在插值中增加了导数的HermiteHermite(埃尔米特)(埃尔米特) 插值插值;(4 4)分段插值分段插值,包括分段线性插值、分段,包括分段线性插值、分段HermiteHermite (埃尔米特)插值和样条函数插值;(埃尔米特)插值和样条函数插值; (5 5)反插值反插值。n n按被插值函数的变量个数还可把插值法分为按被插值函数的变量个数还可把插值法分为一元一元 插值插值和和多元插值多元插值。4.1.1 4.1.1
5、 一元插值函数一元插值函数n nMATLABMATLAB中的一元插值函数为中的一元插值函数为interp1( )interp1( ),它的功能是一维,它的功能是一维 数据插值(表格查找)。该命令对数据点之间进行计算内数据插值(表格查找)。该命令对数据点之间进行计算内 插值,它出一元函数插值,它出一元函数f(x)f(x)在中间点的数值,其中函数在中间点的数值,其中函数f(x)f(x)由由 所给数据决定。所给数据决定。n n一元插值函数一元插值函数interp1( )interp1( )的几种调用格式如表的几种调用格式如表4-14-1所示。所示。 表表4-1 4-1 一维插值插值函数一维插值插值函
6、数interp1interp1的语法格式的语法格式语法形式语法形式说明说明y=interp1( y=interp1(x x, ,Y Y,x ,xi i) )由已知点集由已知点集( (x x, ,Y Y)插值计算)插值计算x xi i上的函数值上的函数值y=interp1(y=interp1(x x, ,Y Y,x ,xi i) )相当于相当于x x=1:length(=1:length(Y Y) )的的interp(interp(x x, ,Y Y,x ,xi i) )y=interp1(y=interp1(x x, ,Y Y,x ,xi i,method),method)用指定插值方法计算插
7、值点用指定插值方法计算插值点x xi i上的函数值上的函数值y=interp1(y=interp1(x x, ,Y Y,x ,xi i,method,method, extrapextrap ) )对对x xi i中超出已知点集的插值点用指定插值中超出已知点集的插值点用指定插值 方法计算函数值方法计算函数值 y=interp1(y=interp1(x x, ,Y Y,x ,xi i,method,method, extrapextrap ,extrapval,extrapval) )用指定方法插值用指定方法插值x xi i上的函数值,超出已知上的函数值,超出已知 点集处函数值取点集处函数值取e
8、xtrapvalextrapval y=interp1(y=interp1(x x, ,Y Y,x ,xi i,method,method, pppp ) )用指定方法插值,但返回结果为分段多用指定方法插值,但返回结果为分段多 项式项式methodmethod方法描述方法描述 nearestnearest 最邻近插值:插值点处函数值取与插值点最邻近的已知点的函数值最邻近插值:插值点处函数值取与插值点最邻近的已知点的函数值 linerliner 分段线性插值:插值点处函数值由连接其最邻近的两侧点的线性函分段线性插值:插值点处函数值由连接其最邻近的两侧点的线性函 数预测,数预测,MATLABMAT
9、LAB中中interp1interp1的默认方法的默认方法 splinespline 样条插值:默认为三次样条插值。可用样条插值:默认为三次样条插值。可用splinespline函数代替函数代替 pchippchip 三次三次HermiteHermite多项式插值。可用多项式插值。可用pchippchip函数代替函数代替 cubiccubic 同同 pchippchip ,三次,三次HermiteHermite多项式插值多项式插值n nMATLABMATLAB中一维插值有多种算法,由中一维插值有多种算法,由interp1interp1函数函数 中的中的methodmethod指定。指定。 MA
10、TLABMATLAB中一维插值的各种算中一维插值的各种算 法如表法如表4-24-2所示。所示。 表表4-2 4-2 一维插值算法一维插值算法(method)(method)1.Linear1.Linear(分段线性插值)(分段线性插值)n n它的算法是在每个小区间它的算法是在每个小区间x xi i,x ,xi+1i+1 上采用简单的线性插上采用简单的线性插 值。在区间值。在区间x xi i,x ,xi+1i+1 上的子插值多项式为:上的子插值多项式为:由此整个区间由此整个区间x xi i,x ,xi+1i+1 上的插值函数为:上的插值函数为:其中其中 定义如下:定义如下:n n分段线性插值方法
11、在速度和误差之间取得分段线性插值方法在速度和误差之间取得 了比较好的均衡,其插值函数具有连续性了比较好的均衡,其插值函数具有连续性 ,但在已知数据点处的斜率一般不会改变,但在已知数据点处的斜率一般不会改变 ,因此不是光滑的。分段线性插值方法是,因此不是光滑的。分段线性插值方法是 MATLABMATLAB一维插值默认的方法。一维插值默认的方法。2.Spline2.Spline(样条插值)(样条插值)n n样条插值样条插值是用分段低次多项式去逼近函数。样条函是用分段低次多项式去逼近函数。样条函 数可以给出光滑数可以给出光滑 的插值曲线,只要在插值区间端的插值曲线,只要在插值区间端 点提供某些导数信
12、息,样条插值可以适应不同光滑点提供某些导数信息,样条插值可以适应不同光滑 需求。需求。三次样条三次样条是使用最为广泛的样条插值,它在是使用最为广泛的样条插值,它在 每个子区间每个子区间x xi i,x ,xi+1i+1 上都是有二阶连续导数的三次多上都是有二阶连续导数的三次多 项式,即项式,即其中其中 都是三次多项式。都是三次多项式。 n n对于给定的离散的测量数据经对于给定的离散的测量数据经x x,y y(称为断点),(称为断点), 要寻找一个三次多项式要寻找一个三次多项式y=p(x)y=p(x), 以逼近每对数据以逼近每对数据(x (xi i,y ,yi i) )点间曲线。过两点点间曲线。
13、过两点(x (xi i,y ,yi i) )和和(x (xi+1i+1,y ,yi+1i+1) )只能确定一只能确定一 条直线,而通过一点的三次多项式曲线有无穷多条条直线,而通过一点的三次多项式曲线有无穷多条 。为使通过中间断点的三次多项式曲线具有唯一性。为使通过中间断点的三次多项式曲线具有唯一性 ,要增加以下的连续条件和边界条件(因为三次多,要增加以下的连续条件和边界条件(因为三次多 项式有项式有4 4个系数):个系数):(1 1)三次多项式在点)三次多项式在点(x (xi i,y ,yi i) )处有:处有: ;(2 2)三次多项式在点)三次多项式在点(x (xi i,y ,yi i) )
14、处有:处有: ;(3 3)三次多项式在点)三次多项式在点(x (xi i,y ,yi i) )处有:处有: ;(4 4)边界条件:)边界条件: 。n n表表4-24-2中各种方法中:中各种方法中:(1 1)nearestnearest方法速度最快,占用内存最小,但一般方法速度最快,占用内存最小,但一般 来说误差最大,插值结果最不光滑;来说误差最大,插值结果最不光滑;(2 2)splinespline三次样条插值是所有插值方法中运行耗三次样条插值是所有插值方法中运行耗 时最长的,其插值函数以及插值函数的一阶、二阶时最长的,其插值函数以及插值函数的一阶、二阶 导函数都连续,因此是最光滑的插值方法,
15、占用内导函数都连续,因此是最光滑的插值方法,占用内 存上比存上比cubiccubic方法小,但当已知数据点不均匀分布时方法小,但当已知数据点不均匀分布时 可能出现异常结果。可能出现异常结果。(3 3)cubiccubic三次多项式插值法中插值函数及其一阶导三次多项式插值法中插值函数及其一阶导 数都是连续的,因此其插值结果也比较光滑,运算数都是连续的,因此其插值结果也比较光滑,运算 速度比速度比splinespline方法略快,但占用内存最多。在实际方法略快,但占用内存最多。在实际 的使用中,应根据实际需求和运算条件选择合适的的使用中,应根据实际需求和运算条件选择合适的 算法。算法。例例4-1 4-1 用用interp1interp1对对sinsin函数进行分段线性插值。函数进行分段线性插值。解:解:在在MATLABMATLAB命令窗口中输入以下命令:命令窗口中输入以下命令: x=0:2*pi; x=0:2*pi; y=sin(x); y=sin(x); xx=0:0.5:2*pi xx=0:0.5:2*pi yy=interp1(x,y,xx); yy=interp1(