曲线拟合工具箱具体的使用方法: 【数模国赛救急】13分钟学会matlab曲线拟合工具箱
一般在数模比赛中最常用的是:Custom Equations(用户自定义函数类型) 和 Polynomial(多项式拟合)
需注意:
其他拟合算法的介绍:
Custom Equations:用户自定义的函数类型
Polynomial:多项式逼近,其最高次数为9
Smoothing Spline:平滑逼近
Interpolant:插值逼近,有4种类型,nearest neighbor、linear、cubic、shape-perserving(PCHIP)
Fourier:傅立叶逼近,有7种类型,基础型是 a0 + a1*cos(x*w) + b1*sin(x*w)
Gaussian:高斯逼近,有8种类型,基础型是 a1*exp(-((x-b1)/c1)^2)
Exponential:指数逼近,有2种类型, a*exp(b*x) 、 a*exp(b*x) + c*exp(d*x)
Power:幂逼近,有2种类型,a*x^b 、a*x^b + c
Rational:有理数逼近
Sum of Sine:正弦曲线逼近,有8种类型,基础型是 a1*sin(b1*x + c1)
Weibull:只有一种,a*b*x^(b-1)*exp(-a*x^b)
有同学评论说能不能给一下视频中的源文件,其实代码量很少啦,基本上都是我个人的讲解:
%% matlab拟合工具箱
% 哈喽,这里是JOE,这期视频是关于matlab中的拟合工具箱的一个超详细使用介绍,帮助你快速入手
% 我们先来看一道非常经典的例题——基于数据用拟合算法预测30年后美国人口总数
% 这里我已经把数据提前保存到了".mat"文件中,直接双击点开或者load(American)
% X代表年份,Y是人口(单位:百万人)
% 首先我们对数据做一个散点图,来观察一下初步的形状,得到一条曲线
plot(X,Y,'o');
%% 用拟合工具箱进行对xm和r的参数拟合
% 可以在APP中找到curve fitting tool或者直接在命令行中输入cftool,都是可以打开的
% 拟合工具箱的左侧是让我们选择数据的窗口,可以看到有X/Y/Z三个数据选项
% 意思是说,我们的拟合工具箱最多可以用来处理一个变量或者两个变量的拟合问题
% 如果是多维的拟合,我们可以用粒子群算法
% 在数模比赛中,我们最常用的拟合算法有两种:Custom Equation和Polymial(多项式拟合)
%% Custom Equation是用户自定义函数拟合,比如这道题,题目要求我们用指定的函数拟合
% 就可以选择这种方法,x是关于t的函数,然后对应函数的形式把函数输入到框中
% 此时我们已经得到了一条拟合曲线,但是效果非常的差
% 导致这种现象发生的原因是:在拟合的时候matlab会自动为我们选择xm和r的初值
% 但如果初值的选取不合理,就会造成这种现象,方法是我们再选项中对初值进行调试
% 现在就得到了一条正常的曲线
%% 对结果参数的解释
% 由结果我们可以看到,拟合参数xm=342.4,r=0.02735
% 区间的意思是,r的值有95%的几率落在[0.0265,0.0282],xm同理
% 对于下面的参数,最重要的是SSE和R-SQUARE(即R²)
% 但是这里需要注意,如果函数是线性的,那么需要关注的有SSE和R²
% 如果函数是非线性的,那么需要关注的只有SSE
% 如何理解线性?
% 这里的线性指的是对参数的线性,如y(x)=ax+bx²,它是一个线性函数,a和b是我们要预测的参数且都为一次
% 再如y(x)=acx+bx²,此时就不再满足线性,y(x)=e^(ax+bx),同样也是线性函数哟
% 本题显然就是一个非线性的函数,所以我们关注其SSE=1225,看起来是一个非常大的数
% 但是你别忘了,Y里面的值本来就偏大,更何况平方和,所以1225是一个比较理想的数据了
% 文件选项中的Generate Code可以用于生成代码,保存后就可以使用了
createFit1(X,Y)
% 并且可以在代码对应的地方进行修改
% 如果我们要保存图像的话,直接在窗口复制图床即可,接下来Ctrl+v到word中即可
% 对2001年到2030年的美国人口数量进行预测:>
t=2001:1:2030;
xm=342.4;
r=0.02735;
predict=xm./(1+(xm/3.9-1)*exp(-r*(t-1790)));
plot(X,Y,'b-o',t,predict,'*'); %作图对比一下
% 还可以加图例对吧,用legend函数,剩下的就自由发挥啦
%% 接下来是对Polymial的讲解
% polymial是多项式拟合,我们可以选择多项式的次数
% Center and scale可以选项,表示对数据进行一个标准化
% 我们可以看到,随着次数越来越高
% SSE貌似在逐渐降低,说明次数越高,误差越小,越值得被我们选作模型吗?
% 其实不然,在选择模型的时候,并不是越复杂越好,在牺牲一部分精确度的代价下模型是越简单越好的,重要的是看你有没有在模型上进行改进和创新
% 所以这里就用二次拟合就挺好的
% f(x)=p1*x²+p2*x+p3
% p1=28.41,p2=83.88,p3=67.66
% 好了,本期的讲解到此结束,如果有帮助到你,希望你还能留下一个赞!或者投个币,谢谢~O(∩_∩)O~