Matlab数据插值与拟合.ppt
《Matlab数据插值与拟合.ppt》由会员分享,可在线阅读,更多相关《Matlab数据插值与拟合.ppt(49页珍藏版)》请在三一办公上搜索。
1、数据插值与拟合,在工程实践与科学实验中,常常需要从一组试验数据之中找到自变量与因变量之间的关系,一般可用一个近似函数表示。函数产生的办法因观测数据的要求不同而异,数据插值与拟合是两种常用的方法。4.1 MATLAB中的插值函数4.2 拉格朗日插值法4.3 利用均差的牛顿插值法4.4 利用差分的牛顿插值法4.5 Hermite插值4.6 spline三次样条插值4.7 多项式曲线拟合4.8 最小二乘拟合,4.1 MATLAB中的插值函数,函数插值来源于函数的以下问题:只知道函数在某区间有定义且已得到区间内一些离散点的值,希望用简单的表达式近似给出函数在此区间上的整体描述,并能与已知离散点上的值相
2、等。插值法按插值函数的形式主要分为以下几种形式:(1)代数多项式插值;(2)三角多项式插值;(3)有理分式插值。,代数多项式插值是最常用的插值方式,其内容也是最丰富的,它又可分为以下几种插值方式:(1)非等距节点插值,包括拉格朗日插值、利用均差的牛顿插值和埃特金插值;(2)非等距节点插值,包括利用差分的牛顿插值和高斯插值等;(3)在插值中增加了导数的Hermite(埃尔米特)插值;(4)分段插值,包括分段线性插值、分段Hermite(埃尔米特)插值和样条函数插值;(5)反插值。按被插值函数的变量个数还可把插值法分为一元插值和多元插值。,4.1.1 一元插值函数,MATLAB中的一元插值函数为i
3、nterp1(),它的功能是一维数据插值(表格查找)。该命令对数据点之间进行计算内插值,它出一元函数f(x)在中间点的数值,其中函数f(x)由所给数据决定。一元插值函数interp1()的几种调用格式如表4-1所示。表4-1 一维插值插值函数interp1的语法格式,MATLAB中一维插值有多种算法,由interp1函数中的method指定。MATLAB中一维插值的各种算法如表4-2所示。表4-2 一维插值算法(method),1.Linear(分段线性插值),它的算法是在每个小区间xi,xi+1上采用简单的线性插值。在区间xi,xi+1上的子插值多项式为:由此整个区间xi,xi+1上的插值函
4、数为:其中 定义如下:,分段线性插值方法在速度和误差之间取得了比较好的均衡,其插值函数具有连续性,但在已知数据点处的斜率一般不会改变,因此不是光滑的。分段线性插值方法是MATLAB一维插值默认的方法。,2.Spline(样条插值),样条插值是用分段低次多项式去逼近函数。样条函数可以给出光滑 的插值曲线,只要在插值区间端点提供某些导数信息,样条插值可以适应不同光滑需求。三次样条是使用最为广泛的样条插值,它在每个子区间xi,xi+1上都是有二阶连续导数的三次多项式,即 其中 都是三次多项式。,对于给定的离散的测量数据经x,y(称为断点),要寻找一个三次多项式y=p(x),以逼近每对数据(xi,yi
5、)点间曲线。过两点(xi,yi)和(xi+1,yi+1)只能确定一条直线,而通过一点的三次多项式曲线有无穷多条。为使通过中间断点的三次多项式曲线具有唯一性,要增加以下的连续条件和边界条件(因为三次多项式有4个系数):(1)三次多项式在点(xi,yi)处有:;(2)三次多项式在点(xi,yi)处有:;(3)三次多项式在点(xi,yi)处有:;(4)边界条件:。,表4-2中各种方法中:(1)nearest方法速度最快,占用内存最小,但一般来说误差最大,插值结果最不光滑;(2)spline三次样条插值是所有插值方法中运行耗时最长的,其插值函数以及插值函数的一阶、二阶导函数都连续,因此是最光滑的插值方
6、法,占用内存上比cubic方法小,但当已知数据点不均匀分布时可能出现异常结果。(3)cubic三次多项式插值法中插值函数及其一阶导数都是连续的,因此其插值结果也比较光滑,运算速度比spline方法略快,但占用内存最多。在实际的使用中,应根据实际需求和运算条件选择合适的算法。,例4-1 用interp1对sin函数进行分段线性插值。,解:在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)对已知的7个sin函数的数据点进行插
7、值,用plot画出插值结果。从图中可以看出分段线性就是联结两个邻近的已知点的线性函数插值计算该区间内插值点上的函数值。,例4-2 用其他一维插值方法对以下7个离散数据点(1,3.5)、(2,2.1)、(3,1.3)、(4.0.8)、(5,2.9)、(6,4.2)、(7,5.7)进行一维插值方法。,解:在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,cu
8、bic);plot(x,y,o,xx,y1,-,xx,y2,-.,xx,y3,:),4.2 拉格朗日插值法,拉格朗日插值法是基于基函数的插值方法,插值多项式可表示为 其中 称为i次基函数:,在MATLAB中编程实现拉格朗日插值法函数为:Language。功能:求已知数据点的拉格朗日多项式;调用格式:f=Language(x,y)或f=Language(x,y,x0)。其中,x为已知数据点的x 坐标向量;y为已知数据点的y 坐标向量;x0为插值点的x坐标;f为求得的拉格朗日多项式或x0处的插值。,function f=Language(x,y,x0)%求已知数据点的拉格朗日多项式%已知数据点的x
9、 坐标向量:x%已知数据点的y 坐标向量:y%为插值点的x坐标:x0%求得的拉格朗日多项式或x0处的插值:fsyms t;if(length(x)=length(y)n=length(x);else disp(x和y的维数不相等!);return;end%检错f=0.0;for(i=1:n)l=y(i);for(j=1:i-1)l=l*(t-x(j)/(x(i)-x(j);end;for(j=i+1:n)l=l*(t-x(j)/(x(i)-x(j);%计算拉格朗日基函数 end;f=f+l;%计算拉格朗日插值函数 simplify(f);%化简 if(i=n)if(nargin=3)f=sub
10、s(f,t,x0);%计算插值点的函数值 else f=collect(f);%将插值多项式展开 f=vpa(f,6);%将插值多项式的系数化成6位精度的小数 end endend,例4-3 根据下表的数据点求出其拉格朗日插值多项式,并计算当x=1.6时y的值。,解:x=1 1.2 1.8 2.5 4;y=0.8415 0.9320 0.9738 0.5985-0.7568;f=language(x,y)f=1.05427*t-.145485e-1*t2-.204917*t3+.328112e-1*t4-.261189e-1 f=language(x,y,1.6)f=0.9992,4.3 利用
11、均差的牛顿插值法,函数 f的零阶均差定义为,一阶定义均差为 一般地,函数f的k阶均差定义为:利用均差的牛顿插值法多项式为,系数的计算过程如表4-3所示,表4-3 均差计算表格,在MATLAB中编程实现利用均差牛顿插值法函数为:Newton。功能:求已知数据点的均差形式的牛顿插值多项式;调用格式:f=Newton(x,y)或f=Newton(x,y,x0)。其中,x为已知数据点的x 坐标向量;y为已知数据点的y 坐标向量;x0为插值点的x坐标;f为求得的牛顿插值法多项式或x0处的插值。,function f=Newton(x,y,x0)%求已知数据点的均差形式牛顿插值多项式%已知数据点的x 坐标
12、向量:x%已知数据点的y 坐标向量:y%为插值点的x坐标:x0%求得的均差形式牛顿插值多项式或x0处的插值:fsyms t;if(length(x)=length(y)n=length(x);c(1:n)=0.0;else disp(x和y的维数不相等!);return;end,f=y(1);y1=0;l=1;for(i=1:n-1)for(j=i+1:n)y1(j)=(y(j)-y(i)/(x(j)-x(i);end c(i)=y1(i+1);l=l*(t-x(i);f=f+c(i)*l;simplify(f);y=y1;if(i=n-1)if(nargin=3)f=subs(f,t,x0)
13、;else f=collect(f);%将插值多项式展开 f=vpa(f,6);end endend,例4-4 根据下表的数据点求出其均差形式牛顿插值多项式,并计算当x=2.0时y的值。,解:x=1 1.2 1.8 2.5 4;y=1 1.44 3.24 6.25 16;f=Newton(x,y)f=.182711e-14-.482154e-14*t+1.00000*t2-.169177e-14*t3+.211471e-15*t4 f=Newton(x,y,2.0)f=4,4.4 利用差分的牛顿插值法,差分分为向前差分、后向差分和中心差分三种,它们的记法及定义如下为:其中:代表向前差分;代表向
14、后差分;代表向后差分。,假设。为了方便,可构造如表4-4所示的差分表()。表4-4 差分计算表格,向前牛顿插值,向前牛顿插值多项式可表示如下:其中 叫做步长,且 的取值范围为。,在MATLAB中编程实现向前牛顿插值法函数为:Newtonforward。功能:求已知数据点的向前牛顿插值法多项式;调用格式:f=Newtonforward(x,y)或 f=Newtonforward(x,y,x0)。其中,x为已知数据点的x 坐标向量;y为已知数据点的y 坐标向量;x0为插值点的x坐标;f为求得的向前牛顿插值法多项式或x0处的插值。,function f=Newtonforward(x,y,x0)%求
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 数据 拟合

链接地址:https://www.31ppt.com/p-6511939.html