基于MATLAB曲线拟合对离散数据的处理和研究摘要:曲线拟合是数值分析中的一种普遍且重要的方法,求解拟合曲线的方法也有很多,这里主要介绍利用MATLAB曲线拟合工具箱对离散数据点做你和处理,并与利用最小二乘法求相应的拟合曲线的方法做对比,突出MATLAB曲线拟合工具箱的优点,并阐述了其适用的范围,最后通过利用MATLAB曲线拟合工具箱对实例中离散数据点的拟合来具体说明它的使用方法和优点。
关键字:数值分析;MATLAB;曲线拟合;最小二乘法一问题探究在很多的实际情况中,两个变量之间的关系往往很难用具体的表达式把它表示出来,通常只能通过实际测量得到一些互不相同的离散数据点,需需要利用这些已知的数据点估计出两个变量的关系或工件的具体轮廓,并要得到任意未知数据点的具体数据,这个过程就需要用到拟合或差值方法来实现,这里主要讨论拟合的方法。
曲线拟合可以通过MATLAB编程来完成,通常为了达到更好的讷河效果需要做多次重复修改,对于非线性曲线拟合还需要编写复杂的M-文件,运用MATLAB曲线拟合工具箱来实现离散数据点的曲线拟合是一种直观并且简洁的方法。
二曲线拟合的最小二乘法理论假设给定了一些数据点(Xi,Yi),人们总希望找到这样的近似的函数,它既能反映所给数据的一般趋势,又不会出现较大的偏差,并且要使构造的函数与被逼近函数在一个给定区间上的偏差满足某种要求。
这种思想就是所谓的“曲线拟合”的思想。
曲线拟合和差值不同,若要求通过所有给定的数据点是差值问题,若不要求曲线通过所有给定的数据点,而只要求反映对象整体的变化趋势,拟合问题,曲线拟合问题最常用的解决方法是线性最小二乘法[1],步骤如下:第一步:先选定一组函数r1(x),r2(x),…,rm(x),m<n,令:F(x)=a1 r1(x)+a2r2(x)+…+amrm(x)其中a1,a2,…,a m为待定系数。
第二步:确定的准则(最小二乘法准则):使n个点(x i,y i)与曲线y=f(x)的距离δi 的平方和最小。
记 J(a1,a2,…,a m)==]2=2问题归结为,求a1,a2,…,a m使J(a1,a2,…,a m)最小。
最小二乘法中如何选择数学模型很重要,用MATLAB解法曲线拟合问题通常有两种方法线性最小二乘法拟合和非线性最小二乘法拟合,对于两种方法的选择,要根据离散数据点位置关系来确定即首先将数据(Xi,Yi),i=1,2,…,n作图,通过直观判断确定。
线性最小二乘法通常是做多项式f(x)=a0+a1x1+…+a m x m拟合。
可利用已有的得程序a=ployval(x,y,m),其中m代表拟合多项式的次数。
多项式在x出y的值可用命令y=ployval(a,x)计算,做非线性最小二乘拟合时,应首先选择好适当的数学模型,如y=a,其中a,b为待定系数,此时可以把它转换成线性模型来计算,两边取对数得ln y=ln a +bx ,令Y=ln y ,记A=ln a ,于是有Y=A+bx ,求这个线性模型的最小二乘法问题。
另外一种方法就是直接采用非线性拟合问题函数lsqcurvefit 和lsqnonlin来计算,两个命令都要先建立M-文件fun.m ,在其中定义函数f(x), 但两者定义M-文件的方式有所不同。
这些问题同样可以用MATLAB拟合工具箱[2]来实现,并且操作比较简单,误差等参数也能一目了然的观察到。
三 MATLAB曲线拟合工具箱MATLAB曲线拟合工具箱界面[3]是一个可视化的图形界面,具有强大的图形你和功能,其中包括:(1)可视化的展开一个或者多个数据集,并可用三点图来表示;(2)用残差和置信区间可视化的估计拟合结果的好坏;(3)通过其他界面还可以实现许多其他功能:比如输出、查看和平滑数据:拟合数据,比较拟合曲线和数据集:从拟合曲线中排除特殊的数据点:选定区间后可以显示拟合曲线和数据集。
它把计算,可视化和程序设计融合到一个交互的环境,在此环境中,利用强大的数值计算和图形功能,可高效求解一些复杂的工程问题及实现计算结果的可视化。
用MATLAB曲线拟合工具箱对离散数据进行拟合时,可使用MATLAB内部的库函数或用户自定义的方程对参数变量进行多项式、指数、有理数等形式的数据拟合。
四 MATLAB曲线拟合工具箱的应用举例在实际中,产品和工件的轮廓形状很难找到一个具体的数学表达式,通常只能通过实验或数学计算得到一些离散点及其上的数值点,此时就需要选择合适的数学模型对其进行曲线拟合,做出它的拟合曲线,从而估计出它的实际形状。
下面通过一个例子说明一下用MATLAB 曲线拟合工具箱对离散数据点进行曲线拟合,并与一般的方法作比较。
例1,已知机翼下轮廓上的数据如下表所示:表1 机翼下轮廓数据机翼长(x)0 3 5 7 9 11 12 13 14 15机翼宽(y)0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.4 1.6用这些数据拟合轮廓形状。
(1)用多项式最小二乘法编程方法:(分别用3次和4次进行拟合)。
>> x=[0,3,5,7,9,11,12,13,14,15];>> y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.4,1.6];>> A=polyfit(x,y,3)A =0.0013 -0.0523 0.5913 -0.0483>> z=polyval(A,x);>> plot(x,y,'k+',x,z,'r')同样的方法可以得到4次多项式拟合曲线,3次和4次得拟合的图像分别为:图1 三次拟合曲线图2 四次拟合曲线拟合得到的多项式分别为:f(x)=0.0013x3-0.0523x2+0.5913x-0.0483F(x)=0.0004x4-0.0099x3+0.0544x2+0.2767x+0.0214(1)用MATLAB曲线拟合工具箱计算:>> x=[0,3,5,7,9,11,12,13,14,15];>> y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.4,1.6];>>cftool进入拟合工具箱界面,然后点击Data按钮,在数据栏选择x和y界面分别为:图3 曲线拟合工具箱界面图4 “Data”对话框单击Create data set 按钮,然后单击Close 返回拟合工具箱界面,再单击Fiting 按钮,先选择3次拟合方法,即在Type of fit 中选择Ploynomial,然后在下面的选项中选择cubicploynomial(图5),单击Apply 进行拟合得到图像(图6);以及结果:Linear model。
Poly3:f(x) = p1*x^3 + p2*x^2 + p3*x + p4Coefficients (with 95% confidence boundsp1 = 0.00128 (-0.0008073, 0.003367)p2 = -0.05227 (-0.1001, -0.004396)p3 = 0.5913 (0.2892, 0.8934)p4 = -0.0483 (-0.5768, 0.4802)Goodness of fit:SSE: 0.2948R-square: 0.9143Adjusted R-square: 0.8714RMSE: 0.2217。
图5 “Fiting”对话框图6 3次拟合曲线从结果中可以看出,拟合得到的多项式:f(x)=0.0128x3-0.05227x2+0.5913x-0.0483,以及它的误差平方和SSE为0.2948,相关系数平方和R-square为0.9143,根的均方差RMSE 为0.2217。
若需要进行4次拟合,只需要Fiting中的New fit中选择4次多项式拟合就可以得到4次拟合图像和结果:所得拟合多项式为:F(x)=0.0003661x4-0.009906x3+0.05438x2+0.2767x+0.02141.误差平方和为0.1801。
用这两种方法所得的结果基本相同,显然4次比三次的拟合效果要好,并且用拟合工具箱求解更为方便直观。
图7 3次和4次多项式拟合下面在举一个非线性拟合的例子。
例2 用非线性拟合[6]的方法对下列一组数据进行拟合:快速静脉注射下的血药浓度数据t(h) 0.25 0.5 1 1.5 2 3 4 6 8c(μg/ml) 19.2118.1515.3614.112.989.327.455.243.01根据数据特点,选却数学模型:c(t)=a,其中,a、b是待定系数。
(1)编写M-文件:function f=curvefunl(x,tdata)F=x(1)*exp(-x(2))*tdata输入程序:tdata=[0.25,0.5,1,1.5,2,3,4,6,8];<<cdata=[19.21,18.15,15.36,14.10,12.89,9.32,7.45,5.24,3.01];<<x0=[20,0.1];<<x0=[0.2,0.05,0..05];X=lsqcurvefit(‘curvefunl’,x0,tdata,cdata)f=curvefunl(x,tdata)x=20.2413 0.2420f=19.0532 17.93.48 15.8911 14.0802 12.4757 9.7945 7.6894 4.7394 2.9211即c(t)=20.2413。
(2)用拟合工具箱计算:输入程序:>> tdata=[0.25,0.5,1,1.5,2,3,4,6,8];>> cdata=[19.21,18.15,15.36,14.10,12.89,9.32,7.45,5.24,3.01];>> cftool(tdata,cdata)打开拟合工具箱,在数据栏里选择数据,根据数据点的分布,选择Custom Equations ,然后在Custom Equations 中设置函数:c(t)=a后进行拟合,所得图像为:图8 非线性拟合拟合结果为:C(t)=20.24,与lsqucuevefit()函数方法结果相同。
由此看出拟合工具箱首先可以画出数据点的散点图,便于选择模型;其次操作简便,省去了复杂的编程工作,再次,结果以图像的和数据两种方式给出,直观形象,并且结果中还给出了判断拟合好坏的参数。
五结论本文给出了求离散数据点拟合曲线的MATLAB曲线拟合工具箱的方法,并与通常使用的利用拟合函数编程方法相比较,发现利用曲线拟合工具箱拟合曲线更加简捷和直观,并且可视性效果很好。