您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 求职简历 > 曲线拟合的MATLAB-实现和优化度检验
实现和优化度检验齐微辽宁工程技术大学理学院,辽宁阜新(123000)E-mail:qiwei1119@163.com摘要:本文通过一个实际的例子,介绍最小二乘曲线拟合法的基本原理,对最小二乘曲线拟合法的MATLAB实现方法进行研究,并给出曲线拟合MATLAB实现的源程序。论述了MATLAB软件在做曲线拟合时的用法,它可以很方便的进行曲线的拟合并作出相应的图像。关键词:最小二乘法;曲线拟合;直线化;MATLAB;拟合优度1.提出问题在实际的工程应用领域和经济应用领域中,人们往往只能测得一些分散的数据点,为了从这些分散的数据点中找到其内在的规律性,就需要利用这些分散的数据点,运用最小二乘法、多项式或其他的已知函数等方法来生成一个新的多项式或是新的函数来逼近这些已知点。由于Matlab语言强大的计算功能和绘图功能,使得我们可以很方便的进行曲线拟合并绘制出曲线拟合图,从而很方便的找到分散数据的内在规律性。本文介绍最小二乘曲线拟合法的基本原理,就其Matlab的实现方法进行研究,给出曲线拟合Matlab实现的源程序,对测试误差进行分析。本文试通过一个具体例子,介绍用Matlab软件进行曲线拟合的方法。某类疾病发病率为y‰和年龄段x(每五年为一段,例如0~5岁为第一段,6~10岁为第二段……)之间有如下的关系,观测得到的数据表如下:表1某类疾病发病率与年龄段的关系x123456789y0。8982。383。071。842。021。942。222。774。02x10111213141516171819y4。765。466。5310。916。522。535。750。661。681。82.分析问题先根据上述资料,建立以x为横坐标,y为纵坐标的坐标系,用Matlab软件把各x,y的值作为坐标点,画出这些点,得图1。原始数据关系图从图上可以看出,在全段19个点的始末两端各有一条渐近线,根据指数函数的性质,可知描写全段曲线的函数一定含有指数项。不妨先设指数曲线为:bxyae=(1)两边同时取对数对其进行线性化得到如下线性方程:1yAxB=+,其中1lnyy=,Ab=,lnBa=,可根据已知的,xy用最小二乘法求得,AB[1]。具体求法是,在Matlab下定义一个函数pline(x,y),其程序如下:functionyy=pline(x,y)nx=length(x);ny=length(y);%分别求向量x,y的长度n=min(nx,ny);%求出长度的最小值x=reshape(x,n,1);%生成列向量y=reshape(y,n,1);M=[xones(n,1)];%连接矩阵MB=y;N=M'*M;B=M'*B;yy=N\B;%得到拟合系数yy=yy';%变成行向量在Matlab命令窗口中输入命令:x=[12345678910111213141516171819];y=[0.8982.383.071.842.021.942.222.774.02…4.765.466.5310.916.522.535.750.661.681.8];调用函数pline(x,log(y)),求得0.2306,0.3837AB==−,从而可知0.6813Bae==,0.2306bA==,代入(1)得拟合函数0.23060.6813xye=(2)。024681012141618200102030405060708090图2拟合函数图象与原始数据比较图通过图象和原始数据进行比较,不难看出此曲线与实际数据有一定的差距,因而不能以此曲线作为19个点的数学模型,需进行曲线的分段拟合。3.解决问题3.1曲线的分段直线化对图1进一步分析可以看出,前11个点有一条渐近线,后8个点有一条渐近线,可将要拟合的曲线分为两段,前11个点为前段,后8个点为后段。我们可以分别对前11个点和后8个点进行直线化。以x为横坐标,lny为纵坐标,在Matlab中作出这些点,得图3:02468101214161820-0.500.511.522.533.544.5图3取对数后的函数关系图象从图3可以看出后8个点明显呈直线趋势,可以先对后8个点进行直线化。后段曲线的直线化拟合的方法和前面相同,设所求的曲线为:bxyae=(3)进行线性化得1yAxB=+,其中1lnyy=,Ab=,lnBa=,在Matlab命令窗口中输入:[12,13,14,15,16,17,18,19],[6.53,10.9,16.5,22.5,35.7,50.6,61.6,81.8]xy==,调用函数pline(x,log(y)),求得0.3593,2.2928AB==−,0.1010,0.3593BaebA====,代入(3)得直线回归方程:0.35930.1010xye=(4)3.12前段曲线得直线化从图3发现前11个点仍呈曲线趋势,需要进一步线性化。具体步骤如下:利用(4)求得前11点处的函数值'y,再把实际数据中的前11个值减去'y,即得'2yyy=−,然后取其对数值2ln()y,用Matlab作出这些点图象,在Matlab下不需要一个个去求,只要在命令窗口输入如下命令:x=[1234567891011];y=[0.8982.383.071.842.021.942.222.774.024.765.46];plot(x,log(y-0。1010*exp(0。3593*x)),'m*')即得如下图4:1234567891011-2-1.5-1-0.500.511.5图4进一步线性化函数图象可以发现这11个点成一定的曲线趋势,利用x和2y的值可建立起直线回归方程。只要在Matlab下再次调用函数pline(x,log(y-0。1010*exp(0。3593*x)))可求得0.1124A=−,0.7734B=,2.1671,0.1124BaebA====−,求得相应的直线回归方程为:0.11242.1671xye−=(5)个点,我们分别进行了后段和前段的直线化并建立了其直线回归方程,可以根据直线的回归方程建立曲线的回归方程。若前段各点在后段各点回归直线的上方,可得描述全段曲线的数学模型为:(4)(5)y=+,反之若前段各点在后段各点回归直线的下方,则数学模型为:(4)(5)y=−。由于本资料所给出的19个点,前段11个点都在后段回归直线的下方,因而这19个点所得的数学模型为:0.35930.11240.10102.1671xxyee−=−(6)根据原始资料,在Matlab下作出(6)的函数图象,如下图5。具体做法是在Matlab命令窗口输入如下命令:x=[12345678910111213141516171819];y=[0.8982.383.071.842.021.942.222.774.02…4.765.466.5310.916.522.535.750.661.681.8];plot(x,y,'*',x,(0.1010*exp(0.3593*x)-2.1671*exp(-0.1124*x)))图5最终的拟合函数图象图5中的曲线为拟合曲线,“*”为原始资料的点,从图5中可看出此曲线拟合较好。3.3曲线的拟合优度检验曲线拟合的优劣可以用误差的平方和来衡量。假设实际测得的值为Y,其平均值为1Y,根据拟合曲线所求得的理论值为2Y,则可得其误差平方和为22()YY−∑,均方差为21()YY−∑,若误差平方和与均方差的比值越小,则说明实际观察值与估计值越接近,曲线拟合的越好[2]。为此可定义相关指数2R,其计算公式为:22221()1()YYRYY−=−−∑∑(7)对此例根据所给的资料和前面所得的拟合曲线,可求出相应的相关指数为:=−=。说明此曲线的拟合度较佳,与Matlab所作出的图象一致。4.结语通过论文的实验可以看出,用Matlab做曲线拟合的精度较高,尤其是分段拟合曲线的方法,可以使分散的数据点得到较好的拟合曲线。参考文献[1]李庆扬,王能超,易大义编。数值分析[M]。北京:清华大学出版社,施普林格出版社,2006。[2]陈希孺,概率论与数理统计[M]。合肥:中国科技大学出版社,1993。CurveFittingMATLABImplementationandOptimizationofthetestQiWeiCollegeofScience,LiaoningTechnologyUniversity,Fuxin(123000)AbstractInthispaper,apracticalexample,least-squarescurvefittingintroductiontothebasicprinciplesoftheleast-squarescurvefittingmethodofMATLABstudy,andgivescurvefittingMATLABrealizationofthesource.DiscussedintheMATLABsoftwaretotheuseofcurvefitting,itcanbeveryconvenienttocarryouttheproposedmergerofthecorrespondingimage.Keywords:Least-squaresmethod;curvefitting;linear;MATLAB;goodness-of-fit
本文标题:曲线拟合的MATLAB-实现和优化度检验
链接地址:https://www.777doc.com/doc-4780046 .html