前言:本次使用的Matlab版本为R2016b,使用的拟合方式是cftool工具拟合插值和fittype与fit自定义函数拟合。
打开Matlab,在命令行窗口中输入cftool或者在菜单栏中的APP中点击Curve Fitting按钮都可以打开cftool工具界面,如图1所示:
这里的实验二维数据是:distance=[0.5;1;1.5;2;2.5;3;3.5;4;4.5;5;5.5;6;6.5;7;7.5]为x data中的数据,RSSI=[-51.1254;-59.0773;-61.3912;-65.7574;-66.1629;-63.9688;-68.2308;-71.4805;-73.1223;-73.9839;-72.2284;-72.672;-72.1129;-70.956;-74.7914]为y data 中的数据,导入数据后,见图2所示:
(1)数据拟合类型与方法(即图2中的圈1):改变圈1中的数据拟合类型,圈2与圈3也会做出相应的改变。
Custom Equation(自定义方程拟合): 可以在方框中输入自定义的拟合公式对数据进行拟合,见图3所示。
上图点击,Fit Options按钮,弹出如下显示框,可以通过改变每个系数的StartPoint(初始值)、Lower(下限值)和Upper(上限值)得到更好的拟合效果,见图4所示。
Exponential(指数拟合): 其中Number of terms可以设置1个或2个指数公式相加对数据进行拟合。
Fourier(傅里叶拟合): 其中Number of terms可以设置1个至8个傅里叶公式相加对数据进行拟合。
Gaussian(高斯拟合): 其中Number of terms可以设置1个至8个高斯公式相加对数据进行拟合。
Interpolant(插值): 其中 Mathod中有Nearest neighbor(最近邻点插值法)、Linear(线性插值法)、Cubic(三次样条函数插值法)和Shape-presering(PCHIP)(保形插值法)。
Linear Fitting(线性拟合): 其中可以在空白方框中自定义线性拟合公式,点击edit按钮,在弹出框中可以对系数和公式进行自定义,见图5所示。
Polynomial(多项式拟合): 其中Degree即是多项式中变量的最高次方,取值是1-9。
Power(幂函数拟合): 其中Number of terms为1时表示幂函数没有常数项,为2时表示幂函数有常数项。
Rational(有理函数拟合): 其中Numerator degree表示分子中的变量最高次方,取值是1-5,Denominator degree表示分母中变量的最高次方,取值是1-5。
Smoothing Spline(平滑样条函数拟合): 其中Smoothing Parammeter,既可以选择Default(默认)即是Matlab计算出的平滑参数,同时也可以选择Specif手动对平滑参数进行改变,拟合情况也会发生改变。
Sum of Sine(正弦函数拟合): 其中Number of terms表示有多少个正弦函数相加,取值为1-8。
Weibull(威布尔函数拟合): 其公式为固定的。
(2)Result(即图2中的圈2):数据拟合结果。
Coefficients(系数): 是拟合后公式中各个系数的值,其中还有包括百分之几的置信界。
Goodness of fit(拟合优度):
SSE(错误平方和):越接近0表示拟合的越好。
R-square(多重测定系数):越接近1表明方程的变量对y的解释能力越强。
Adjusted R-square(自由度调整R平方):越接近1表明拟合的越好。
RMSE(均方根误差):越接近0表明拟合的越好。
(3)拟合结果图形(即图2中的圈3):数据拟合后二维图形的展示,一般默认只显示拟合结果的曲线图,如果你查看拟合后的每个点的残差,可以点击图6中的圈1指示的按钮,即会出现残差图。
(4)数据模拟仿真:这里利用Custom Equation(自定义方程拟合)方法对实验数据进行拟合,公式输入-55-10nlog10(x),其中系数n为2.336,拟合曲线如图7所示。
这里的实验三维数据是:在命令行窗口中输入x1=rand(1,20)*2、x2=rand(1,20)*2、x3=rand(1,20)*2三组随机数据,其中x1输入x data中,x2输入y data中,x3输入z data中,见图8所示:
(1)数据拟合类型与方法(即图8中的圈1):使用不同的数据拟合类型,拟合结果也不一样。
Custom Equation(自定义方程拟合): 可以在方框中输入自定义的拟合公式对数据进行拟合。
Interpolant(插值): 其中 Mathod中有Nearest neighbor(最近邻点插值法)、Linear(线性插值法)、Cubic(三次样条函数插值法)、Biharmonic(v4)(双调和函数插值)和Thin-plate spline(薄板样条插值)。
Lowess(局部加权散点光滑拟合): 其中polynomical(多项式)可以选择Linear和Quadratic(二次项)。
Polynomical(多项式拟合): 其中Degree即是多项式中变量的最高次方,取值是1-5。
(2)拟合结果图形:三维数据可以查看等值线图,见图9,单击圈1所指示的图标。
在Matlab中新建一个文件RSSIFit.m,对数据进行拟合函数的解释在代码中。
%自定义拟合函数
clc,clear
distance=[0.5;1;1.5;2;2.5;3;3.5;4;4.5;5;5.5;6;6.5;7;7.5];%列向量,拟合数据
RSSI=[-51.1254;-59.0773;-61.3912;-65.7574;-66.1629;-63.9688;-68.2308;-71.4805;-73.1223;-73.9839;-72.2284;-72.672;-72.1129;-70.956;-74.7914];%列向量,拟合数据
f=fittype('-55-10*n*log10(x)','independent','x','coefficients',{'n'}); %fittype是自定义拟合函数,第一个是自定义函数公式,第三个是变量,第五个是系数(拟合函数中有几个系数就在这里填这些系数)
opt=fitoptions(f);
opt.StartPoint=1.9;%设定初始值
cfun=fit(distance,RSSI,f,opt); %根据自定义拟合函数f来拟合数据x,y
xi=0.5:0.5:7.5;
yi=cfun(xi);
plot(distance,RSSI,'k.',xi,yi,'b-','linewidth',0.5,'markersize',15);
legend('原始数据','拟合曲线','Location','northeast')
xlabel('距离/m')
ylabel('RSSI值/dBm')
在命令行窗口中输入cfun,回车后就可以得到拟合后的系数值和其他结果,见图11。
如果你了解更多关于fittype与fit函数对数据进行拟合,你可以参照这里fittype。
Matlab做数据拟合中的(Results,SSE,R-square,Adjusted R-square,RMSE)