Matlab——数据拟合与插值

  前言:本次使用的Matlab版本为R2016b,使用的拟合方式是cftool工具拟合插值和fittype与fit自定义函数拟合。

文章目录

    •   一、cftool工具
      •   1.二维数据
      •   2.三维数据
    •   二、fittype与fit自定义函数拟合
    •   三、参考文献

  一、cftool工具

  打开Matlab,在命令行窗口中输入cftool或者在菜单栏中的APP中点击Curve Fitting按钮都可以打开cftool工具界面,如图1所示:
Matlab——数据拟合与插值_第1张图片

图1

  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所示:
Matlab——数据拟合与插值_第2张图片

图2

  (1)数据拟合类型与方法(即图2中的圈1):改变圈1中的数据拟合类型,圈2与圈3也会做出相应的改变。
  Custom Equation(自定义方程拟合): 可以在方框中输入自定义的拟合公式对数据进行拟合,见图3所示。
Matlab——数据拟合与插值_第3张图片

图3

上图点击,Fit Options按钮,弹出如下显示框,可以通过改变每个系数的StartPoint(初始值)、Lower(下限值)和Upper(上限值)得到更好的拟合效果,见图4所示。
Matlab——数据拟合与插值_第4张图片

图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所示。
Matlab——数据拟合与插值_第5张图片

图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指示的按钮,即会出现残差图。
Matlab——数据拟合与插值_第6张图片

图6

  (4)数据模拟仿真:这里利用Custom Equation(自定义方程拟合)方法对实验数据进行拟合,公式输入-55-10nlog10(x),其中系数n为2.336,拟合曲线如图7所示。
Matlab——数据拟合与插值_第7张图片

图7

  2.三维数据

  这里的实验三维数据是:在命令行窗口中输入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所示:
Matlab——数据拟合与插值_第8张图片

图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——数据拟合与插值_第9张图片

图9

  二、fittype与fit自定义函数拟合

  在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')

点击运行就得到图10的拟合曲线。
Matlab——数据拟合与插值_第10张图片

图10

在命令行窗口中输入cfun,回车后就可以得到拟合后的系数值和其他结果,见图11。
Matlab——数据拟合与插值_第11张图片

图11

如果你了解更多关于fittype与fit函数对数据进行拟合,你可以参照这里fittype。

  三、参考文献

  Matlab做数据拟合中的(Results,SSE,R-square,Adjusted R-square,RMSE)

你可能感兴趣的:(Matlab,matlab)