第三章 数据拟合_第1页
第三章 数据拟合_第2页
第三章 数据拟合_第3页
第三章 数据拟合_第4页
第三章 数据拟合_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章数据拟合本章讨论在MatLab软件包中,如何进行数据拟合。§3.1多项式曲线拟合Matlab中的多项式曲线拟合使用命令如下:p=polyfit(x,y,n)解释:p=polyfit(x,y,n)表示在误差平方极小的意义下,通过数据拟合运算,寻找n次多项式p(x)的系数,p是一个n+1次的行向量:p=(p,p,…,p,p),其中nn-1 10p(x)=pXn+pXn-1H Fpx+pn n-1 1 0另外,输入时,x的数据要使用列向量。例3.1在区间[0,2.5]中,用多项式函数拟合误差函数。2x误差函数erf(x):erf(x)二 Ie-t2dt,它在区间卜10,10]中的图像如下:兀0在区间[0,2.5]中,每隔0.1取一个误差函数的数据,然后用一个6次多项式去拟合误差函数。程序如下:x=(0:0.1:2.5)';y=erf(x);p=polyfit(x,y,6)执行后得到结果:p=Columns1through50.0084-0.09830.4217-0.74350.1471Columns6through71.10640.0004即,p=(0.0084,-0.0983,0.4217,-0.7435,0.1471,1.1064,0.0004),也就是得到6次多项式为:p(x)=0.0084x6-0.0983x5+0.4217x4-0.7435x3+0.1471x2+1.1064x+0.0004计算一下误差函数的数据y与6次多项式p(x)的值之间的误差。程序如下:f=polyval(p,x);table=[xyfy-f]执行后得到结果:table=000.0004-0.00040.10000.11250.11190.00060.20000.22270.22230.00040.30000.32860.3287-0.00010.40000.42840.4288-0.00040.50000.52050.5209-0.00040.60000.60390.6041-0.00020.70000.67780.67780.00000.80000.74210.74180.00030.90000.79690.79650.00041.00000.84270.84240.00031.10000.88020.88000.00021.20000.91030.9104-0.00001.30000.93400.9342-0.00021.40000.95230.9526-0.00031.50000.96610.9664-0.00031.60000.97630.9765-0.00021.70000.98380.98380.00001.80000.98910.98890.00021.90000.99280.99250.00032.00000.99530.99510.00022.10000.99700.99690.00012.20000.99810.9982-0.00012.30000.99890.9991-0.00032.40000.99930.9995-0.00022.50000.99960.99940.0002面在区间[0,5]之间作图比较两个函数的图像的区别。程序如下:x=(0:0.1:5)';y=erf(x);f=polyval(p,x);plot(x,y,'o',x,f,'-')axis([0502])执行后得到结果:其中,用“0”画的曲线是误差函数的图像。例3.2一个[x,y,z,v]=fl0w;xmin=min(x(:));ymin=min(y(:));zmin=min(z(:));xmax=max(x(:));ymax=max(y(:));zmax=max(z(:));hslice=surf(linspace(xmin,xmax,100),...linspace(ymin,ymax,100),...zer0s(100));r0tate(hslice,[-1,0,0],-45)xd=get(hslice,'XData');yd=get(hslice,'YData');zd=get(hslice,'ZData');delete(hslice)h=slice(x,y,z,v,xd,yd,zd);set(h,'FaceC0l0r','interp',...'EdgeC0l0r','n0ne',...'DiffuseStrength',.8)h0ld0nhx=slice(x,y,z,v,xmax,[],[]);set(hx,'FaceC0l0r','interp','EdgeC0l0r','n0ne')hy=slice(x,y,z,v,[],ymax,[]);set(hy,'FaceColor','interp','EdgeColor','none')hz=slice(x,y,z,v,[],[],zmin);set(hz,'FaceColor','interp','EdgeColor','none')daspect([1,1,1])axistightboxonview(-38.5,16)camzoom(1.4)camprojperspectivelightangle(-45,45)colormap(jet(24))set(gcf,'Renderer','zbuffer')执行后得到图像:§3.2样条拟合在MatLab软件包中有内部样条函数spline,它是通过三次样条数据插值进行计算。它的格式是:yy=spline(x,y,xx)pp=spline(x,y)其中:(1)yy=spline(x,y,xx)是通过三次样条分析,对数据x和y插值寻找向量XX的函数yy。如果y是一个矩阵,则对y的每一行进行插值运算,此时向量x的长度length(x)必须等于y的列数size(y,2),并且所得结果矩阵yy的阶是y的行数X向量xx的长度,即,等于size(y,l)xlength(xx)。另外,如果想对矩阵y的列进行插值分析与计算,可以使用MatLab内部函数interp1(x,y,xx,'spline'),此时要求向量x的长度length(x)必须等于y的行数size(y,1),并且所得结果矩阵yy的阶是向量xx的长度Xy的列数,即,等于length(xx)xsize(y,2)。(2)pp=spline(x,y)返回三次多项式的分段函数形式。例3-2-1首先x从0到10每隔0.25取值,生成数据y=sin(x),然后进行拟合。写一个名称为opt_spline_l的M一文件:x=0:10;y=sin(x);xx=0:.25:10;yy=spline(x,y,xx);plot(x,y,'o',xx,yy)pp=spline(x,y)[breaks,coefs,l,k,d]=unmkpp(pp)v=ppval(pp,0.85)存盘并且执行,得到下列结果与拟合函数的图形:pp=form:'pp'breaks:[012345678910]coefs:[10x4double]pieces:10order:4dim:1breaks=0 1 2 3 4 5 6 7 8 9 10coefs=-0.0419-0.26121.14460-0.0419-0.38680.49650.84150.1469-0.5124-0.40270.90930.1603-0.0716-0.98670.14110.03720.4095-0.6488-0.7568-0.12340.52110.2818-0.9589-0.16840.15090.9538-0.2794-0.0640-0.35420.75060.65700.1190-0.5463-0.14990.98940.1190-0.1894-0.88560.4121l=10k=4d=1v=0.7584程序中,[breaks,coefs,l,k,d]=unmkpp(pp)表示返回被拟合的样条函数;v=ppval(pp,0.85)表示求x=0.85时的函数值,得到v=0.7584。返回的结果中,breaks表示拟合的样条函数共分10段,每一段中都是一个三次多项式函数,并且在ceofs中给出这10段三次多项式的系数,coefs:[10x4double]表示coefs是一个10X4的矩阵,double的意思是矩阵coefs中的元素都是双精度数值。例如,第一段中的系数是:-0.0419 -.26121.14460它表示在0<x<1中,拟合得到的三次多项式函数是:-0.0419x3-0.2612x2+1.1446x+0其余类推。l=10表示分10段拟合样条函数;k=4表示每一段返回的系数是4个;d=1表示在每一段中都是一元函数。例3-2-2在指定的x区间[-4,4]上做样条分析,并且满足在区间的端点上函数y取0值。写一个名称为opt_spline_2的M一文件:x=-4:4;y=[0.151.122.362.361.46.49.060];cs=spline(x,[0y0]);xx=linspace(-4,4,101);plot(x,y,'o',xx,ppval(cs,xx),'-');程序中的语句cs=spline(x,[0y0])含有[0y0]表示在区间的端点上函数y取0值。存盘并且执行,得到下列样条拟合的图形:例3-2-3从公元1900年〜1990年每隔10年计算一次美国的人口数据(单位:百万),得到数据列p=[75.99591.972105.711123.203131.669...150.697179.323203.212226.505249.633],以此为基础做样条分析,预测美国2000年的人口数据。写一个名称为opt_spline_3的M—文件:t=1900:10:1990;p=[75.99591.972105.711123.203131.669150.697179.323203.212226.505249.633];spline(t,p,2000)存盘并且执行,得到下列预测结果:ans=270.6060即,预测美国2000年人口为270.6060(百万),也就是大约2亿7千万。例3-2-4对(x,y)取样本点(0,0)、(0.5pi,1)、(pi,0)、(1.5pi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论