您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 求职简历 > MATLAB曲线拟合(含实例)
[matlab曲线拟合(含实例)]matlab曲线拟合-非常好非常全面的介绍M拟合的参考资料MathworksTech-Note1508曲线拟合向导1.介绍2.Mathworks产品的曲线拟合特色a.曲线拟合工具箱(CurveFittingToolbox)b.Matlab内建函数与其他的带有曲线拟合能力的附加产品(工具箱)c.线性曲线拟合d.非线性曲线拟合3.加权曲线拟合方法a.曲线拟合工具箱b.统计工具箱c.优化工具箱4.利用曲线拟合工具箱提高曲线拟合结果5.其他的相关资料第1节:简介MATLAB即有内建的解决很多通常遇到的曲线拟合问题的能力,又具有附加这方面的产品。本技术手册描述了几种拟合给定数据集的曲线的方法,另外,本手册还解释了加权曲线拟合、针对复数集的曲线拟合以及其他一些相关问题的拟合技巧。在介绍各种曲线拟合方法中,采用了典型例子的结合介绍。第2节:MathWorks产品的曲线拟合特色MATLAB有可以用于曲线拟合的内建函数。MathWorks公式也提供了很多工具箱可以用于曲线拟合。这些方法可以用来做线性或者非线性曲线拟合。MATLAB也有一个开放的工具箱――曲线拟合工具箱(CurveFittingToolbox),她可以用于参数拟合,也可以用于非参数拟合。本节将介绍曲线拟合工具箱与其他工具箱、以及各种MATLAB可以用于曲线拟合的内建函数的详细特征。a.曲线拟合工具箱曲线拟合工具箱是专门为数据集合进行曲线拟合而设计的。这个工具箱集成了用MATLAB建立的图形用户界面(GUIs)和M文件函数。曲线拟合向导Genial@USTC2004-4-18?利用工具箱的库方程(例如线性,二次,高阶多项式等)或者是用户自定义方程(局限于用户的想象力)可以进行参数拟合。当你想找出回归系数以及他们背后的物理意义的时候就可以采用参数拟合。?通过采用平滑样条或者其他各种插值方法,你就可以进行非参数拟合。当回归系数不具有物理意义并且不在意他们的时候,就采用非参数拟合方法。曲线拟合工具箱提供了如下功能:?数据回归,譬如截面(?sectioning)与平滑;?标准线性最小二乘拟合,非线性最小二乘拟合,加权最小二乘拟合,约束二乘(constrainedleastsquares)拟合以及稳健(robust)拟合;?根据诸如R2以及误差平方和(SSE)确定的拟合性能的统计特征。请查阅曲线拟合工具箱提供的demos。b.MATLAB内建函数与具有曲线拟合能力的其他工具箱除了曲线拟合工具箱,MATALB与其他工具箱也提供了些可以用于解决线性和非线性曲线拟合的功能。本节列举并解释了其中几个。c.利用MATLAB内建函数进行线性曲线拟合函数描述polyfit用多项式进行数据拟合。polyfit(X,Y,N)对数据X,Y拟合N阶多项式系数,P(X(I))~=Y(I),在最小二乘意义上。\反斜线或者矩阵阵左除。如果A是一个方阵,A\B基本上与inv(A)*B一致的,是采用的不同计算方式而已。polyval在给定点计算多项式的值corrcoef计算两个向量的相关系数。它可以与polyfit和polyval函数一起用来在实际数据和拟合输出之间计算R2相关系数下面给出一个利用corref计算R值的例子:loadcensus[p,s]=polyfit(cdate,pop,2);Output=polyval(p,cdate);Corrolation=corroef(cate,Output);cdate与它自身很好的相关,同样的Output也与它自身很好相关。反对角线上元素是2曲线拟合向导Genial@USTC2004-4-18cdate与Output之间的相关性。这个值非常接近于1,因此实际数据与拟合结果能否较好的吻合。因此,这个拟合是“好”的拟合。(应该是这样判断的么?我怎么觉得应该通过pop与Output的相关性来判断拟合的好坏的呢?)利用反斜线操作符与polyfit函数进行回归与曲线拟合的更多的例子请参照MATLAB文档中的RegressionandCurveFitting一节。附加例子:数据集:t=[0.3.81.11.62.3]';y=[0.50.821.141.251.351.40]';plot(t,y,'o'),gridon方法1:多项式回归基于图形,数据可能通过二次多项式建模如下:y=a0+a1*t+a2*t其中未知系数a0,a1,a2可以通过最小二乘(通过最小化通过模型计算出来的数据的偏差的平方和)拟合计算。三个未知数6个方程如下:用6x3的矩阵表示:X=[ones(size(t))tt.^2];则结果通过反斜线操作符得到:a=X\ya=0.53180.9191-0.2387因此二阶多项式模型为:y=0.5318+0.9191*t-0.2387*t2曲线拟合向导Genial@USTC2004-4-18计算模型在均匀空间的值,并将原来的值画在同一个图形上:T=(0:.1:2.5)';Y=[ones(size(T)TT.^2)]*a;plot(T,Y,'-'t,y,'o'),gridon方法2:线性参数回归建立模型:X=[ones(size(t))exp(-t)t.*exp(-t)];a=X\y;T=(0:.1:2.5)';Y=[ones(size(T))exp(-T)T.exp(-T)]*a;plot(T,Y,'-',t,y,'o'),gridon曲线拟合向导Genial@USTC2004-4-18方法3:多元回归如果y是一个包含多个独立变量的函数,表示变量间的相邻关系的矩阵方程可以通过附加数据进行扩展。假设我们测量参数x1、x2的少数几个值的输出y,观测值如下:x1=[.2.5.6.81.01.1]';x2=[.1.3.4.91.11.4]';y=[.17.26.28.23.27.24]';本数据的一个多元模型是:多元回归解决的是通过最小二乘拟合求未知系数a0,a1,a2。通过构造回归矩阵X构造和解决同步方程,依然采用反斜线操作符。X=[ones(size(x1))x1x2];a=X\y;为了评价模型,求取绝对误差的最大值:Y=X*a;MaxErr=max(abs(Y-y));实例分析:曲线拟合(本节来自matlab的在线帮助文档)本节提供了以实际数据分析形式的在MATLAB中的数据分析基本能力的概貌。下面的例子是以收集的人口普查数据为基础,采用MATLAB函数对数据进行实验拟合:?多项式拟合?残差分析?指数拟合?误差界限1.导入数据loadcensus(census.mat包含了美国1790年到1990年的人口数据)其中包括两个变量:cdate与popcdate是从1790以10递增到1990的一个列向量,是年份数;pop是cdate中年份相应的人口数据向量曲线拟合向导Genial@USTC2004-4-182.多项式拟合首先我们想通过简单的多项式对普查数据进行拟合。利用MATLAB中的两个函数进行处理:polyfit与polyval。polyfit函数是在给定阶次多项式上对数据进行最小二乘意思上的最优拟合。假设采用4阶多项式,拟合过程为:p=polyfit(cdate,pop,4)Warning:Polynomialisbadlyconditioned.RemoverepeateddatapointsortrycenteringandscalingasdescribedinHELPPOLYFIT.p=1.0e+005*0.0000-0.00000.0000-0.01266.0020警告的产生是因为polyfit函数用很大的值cdate作为基本数据,用他来产生范德蒙矩阵(Vandermondematrix),具体细节的可以在polyfit的m文件中看到。cdate的展开导致尺度标准问题,一个解决办法就是标准化cdate数据。预处理:标准化数据标准化处理是为了提高后期数值计算精度而进行的尺度变化处理。一个处理办法是:sdate=(cdate-mean(cdate))./std(cdate);然后再以标准化后数据进行4阶多项式拟合:p=polyfit(sdate,pop,4)p=0.70470.921023.470673.859862.2285通过图形我们来观察其拟合的好坏:pop4=polyval(p,sdate);plot(cdate,pop4,'-',cdate,pop,'+'),gridon曲线拟合向导Genial@USTC2004-4-18另外一个规范化数据的方法就是通过结果与单位的知识进行转换。如,对于本数据集,选择1790作为0年也可以得到较为满意的解。3.残差分析一个评价拟合好坏的测度就是残差――观测值与预测值的差异。对不同的拟合,利用残差进行比较。从拟合图形和残差上,我们显而易见,采用标准化数据比简单的多项式可能对数据有更好的拟合。利用如下命令,分别对数据进行1阶,2阶,4阶的拟合,作图,并比较其残差:loadcensussdate=(cdate-mean(cdate))./std(cdate);p1=polyfit(sdate,pop,1);pop1=polyval(p1,sdate);plot(cdate,pop1,'b-',cdate,pop,'g+');res1=pop-pop1;figure,plot(cdate,res1,'g+');p=polyfit(sdate,pop,2);pop2=polyval(p,sdate);figure,plot(cdate,pop2,'b-',cdate,pop,'g+')res2=pop-pop2;figure,plot(cdate,res2,'g+');p=polyfit(sdate,pop,4);pop4=polyval(p,sdate);figure,plot(cdate,pop4,'b-',cdate,pop,'g+')res4=pop-pop4;figure,plot(cdate,res4,'g+');max(abs(res1))ans=41.3987max(abs(res2))ans=7.5361max(abs(res4))ans=6.3455曲线拟合向导Genial@USTC2004-4-184.指数拟合看前面的人口图形,发现人口数据曲线有些与指数曲线相似。利用这一点,我们试着对人口数据值的对数进行拟合,依然采用前面的标准化方法。logp1=polyfit(sdate,log10(pop),1);logpred1=10.^polyval(logp1,sdate);semilogy(cdate,logpred1,'-',cdate,pop,'+');gridonlogp2=polyfit(sdate,log10(pop),2);logpred2=10.^polyval(logp2,sdate);figure,semilogy(cdate,logpred2,'-',cdate,pop,'+');gridonlogres2=log10(pop)-polyval(logp2,sdate);figure,plot(cdate,logres2,'+');r=pop-10.^(polyval(logp2,sdate));figure,plot(cdate,r,'+')可以看出,残差更加随机性强一些。或许,残差随着人口数的增加而在数量级方面增长很快,但是总体而言,对数模型提供了更精确的拟合。曲线拟合向导Genial@USTC2004-4-185.误差界限误差界限对于判别你的拟合是否是个合理的模型很有用。你可以通过从polyfit选择任意两个输出参数作为polyfit的两个输入参数。本例子采用普查例子断乎机和前面讲的规范化方法,利用polyfit和polyval得到二阶多项式模型的误差界限。对年度值进行规范化,本例子采用+-2△间隔,相应的其置
本文标题:MATLAB曲线拟合(含实例)
链接地址:https://www.777doc.com/doc-4369323 .html