MATLAB中如何直接曲线拟合,而不使用cftool的GUI界面
(这里使用的版本是MATLAB2009a)
我们知道在MATLAB中有个很方便的曲线拟合工具:cftool
最基本的使用方法如下,假设我们需要拟合的点集存放在两个向量X
和Y中,分别储存着各离散点的横坐标和纵坐标,则在MATLAB中
直接键入命令cftool(X,Y)就会弹出CurveFittingTool的GUI界面,
点击界面上的fitting即可开始曲线拟合。
MATLAB提供了各种曲线拟合方法,例如:Exponential,Fourier,
Gaussing,Interpolant,Polynomial,Power,Rational,SmoothingSpline,
SumofFunctions,Weibull等,当然,也可以使用CustomEquations.
cftool不仅可以绘制拟合后的曲线、给出拟合参数,还能给出拟合好
坏的评价参数(Goodnessoffit)如SSE,R-square,RMSE等数据,非常
好用。但是如果我们已经确定了拟合的方法,只需要对数据进行计算,
那么这种GUI的操作方式就不太适合了,比如在m文件中就不方便
直接调用cftool。
MATLAB已经给出了解决办法,可以在cftool中根据情况生成特定
的m文件,让我们直接进行特定的曲线拟合并给出参数。具体方法
在帮助文件的如下文档中\CurveFittingToolbox\GeneratingM-files
FromCurveFittingTool,以下简单举例说明:
以双色球从第125期到第145期蓝球为Y值:
Y=[1215417115716161114212913101211];
X=1:1:21;
cftool(X,Y);
点击Fitting选择最常用的多项式拟合(Polynomial),选择3次多项式拟
合(cubic),然后就会出现如下拟合图形:
然后在CurveFittingTool窗口中点击\File\GenerateM-file即可
生成能直接曲线拟合的函数文件,其中使用的拟合方法就是刚才
使用的三次多项式拟合,文件中这条语句证明了这一点:
ft_=fittype(poly3);
保存该文件(默认叫做createFit.),调用方法和通常的文件一
样,使用不同的X和Y值就能拟合出不同的曲线。但是,这种调用
方法只能看到一个拟合出的图形窗口,拟合参数以及Goodnessoffit
参数都看不到了,因此需要在刚才的文件中稍作修改。
找到这句话:
cf_=fit(X(ok_),Y(ok_),ft_);
修改为:
[cf_,gof]=fit(X(ok_),Y(ok_),ft_);
然后将函数声明functioncreateFit(X,Y)修改为function[cf_,gof=
createFit(X,Y),这样我们再调用试试看:
Y=[1215417115716161114212913101211];
X=1:1:21;
[c,g]=createFit(X,Y);
这样就会弹出拟合图形的窗口,然后再键入c和g,就能查看多项式
拟合参数及拟合评价参数啦。
c和g分别是1×1cfit数据类型和1×1struct数据类型。本例中c包括
p1,p2,p3,p4四个成员,即三次曲线拟合的参数;g包括rmse等成员,
即拟合评价参数。如果要在程序中引用这些数据,用法和C/C++一
样:
a=c.p1;
b=g.rmse;
MATLAB中直接曲线拟合就讲到这里,相信大家用过一两次后就能
熟练使用了。