MATLAB中如何直接曲线拟合,而不使用cftool的GUI界面
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB中如何直接曲线拟合,而不使用cftool的GUI界面(这里使用的版本是MATLAB 2009a)
我们知道在MATLAB中有个很方便的曲线拟合工具:cftool
最基本的使用方法如下,假设我们需要拟合的点集存放在两个向量X 和Y中,分别储存着各离散点的横坐标和纵坐标,则在MATLAB中直接键入命令cftool(X,Y) 就会弹出Curve Fitting Tool的GUI界面,点击界面上的fitting即可开始曲线拟合。
MATLAB提供了各种曲线拟合方法,例如:Exponential, Fourier, Gaussing, Interpolant, Polynomial, Power, Rational, Smoothing Spline, Sum of Functions, Weibull等,当然,也可以使用Custom Equations. cftool不仅可以绘制拟合后的曲线、给出拟合参数,还能给出拟合好坏的评价参数(Goodness of fit)如SSE, R-square, RMSE等数据,非常好用。但是如果我们已经确定了拟合的方法,只需要对数据进行计算,那么这种GUI的操作方式就不太适合了,比如在m文件中就不方便直接调用cftool。
MATLAB已经给出了解决办法,可以在cftool中根据情况生成特定的m文件,让我们直接进行特定的曲线拟合并给出参数。具体方法在帮助文件的如下文档中" \ Curve Fitting Toolbox \ Generating M-files From Curve Fitting Tool " ,以下简单举例说明:
以双色球从第125期到第145期蓝球为Y值:
Y=[12 15 4 1 7 11 5 7 1 6 16 1 1 14 2 12 9 13 10 12 11];
X=1:1:21;
cftool(X,Y);
点击Fitting选择最常用的多项式拟合(Polynomial),选择3次多项式拟合(cubic),然后就会出现如下拟合图形:
然后在Curve Fitting Tool窗口中点击" \ File \ Generate M-file " 即可生成能直接曲线拟合的m函数文件,其中使用的拟合方法就是刚才使用的三次多项式拟合,文件中这条语句证明了这一点:
ft_ = fittype('poly3');
保存该m文件(默认叫做createFit.m),调用方法和通常的m文件一样,使用不同的X和Y值就能拟合出不同的曲线。但是,这种调用方法只能看到一个拟合出的图形窗口,拟合参数以及Goodness of fit 参数都看不到了,因此需要在刚才的m文件中稍作修改。
找到这句话:
cf_ = fit(X(ok_),Y(ok_),ft_);
修改为:
[cf_,gof] = fit(X(ok_),Y(ok_),ft_);
然后将函数声明function createFit(X,Y) 修改为function [cf_,gof] = createFit(X,Y) ,这样我们再调用试试看:
Y=[12 15 4 1 7 11 5 7 1 6 16 1 1 14 2 12 9 13 10 12 11];
X=1:1:21;
[c,g]=createFit(X,Y);
这样就会弹出拟合图形的窗口,然后再键入c和g,就能查看多项式拟合参数及拟合评价参数啦。
c和g分别是1×1 cfit 数据类型和1×1 struct 数据类型。本例中c包括p1, p2, p3, p4四个成员,即三次曲线拟合的参数;g包括rmse等成员,即拟合评价参数。如果要在程序中引用这些数据,用法和C/C++ 一样:
a=c.p1;
b=g.rmse;
MATLAB中直接曲线拟合就讲到这里,相信大家用过一两次后就能熟练使用了。