MATLAB GUI设计入门与实战
上QQ阅读APP看书,第一时间看更新

1.5 数据拟合

为了较好地逼近离散的数据点,寻找数据的分布规律,多采用数据拟合操作方法,数据拟合方法采用数学方程表征数据点规律。常用的数据拟合方法包括最小二乘拟合、多项式拟合以及非线性拟合等方法。

1.5.1 最小二乘拟合工具箱

工程上常常寻求已知函数的一个逼近函数,使得逼近函数从总体上与已知函数的偏差按逼近误差最小,而又不一定过全部的点,则需要最小二乘曲线拟合法。

数据拟合的具体做法是:对给定的数据,在取定的函数类φ中,求,使误差的平方和最小,即:

其中,px)为拟合函数或最小二乘解,求拟合函数px)的方法称为最小二乘拟合。

表1-8所示为待拟合数据。

表1-8 源数据

采用MATALB图形拟合工具箱进行曲线最小二乘拟合,如图1-35和图1-36所示。

图1-35 激活拟合工具箱

图1-36 最小二乘拟合

MATLAB工具箱自动生成拟合曲线,如图1-37所示。

图1-37 最小二乘拟合曲线

MATLAB拟合工具箱提供了12种数据拟合功能,能够快速为用户实现最佳逼近方法。

1.5.2 多项式拟合

假设给定数据点为所有次数不超过的多项式构成的函数类,现求,使得:

上式称为多项式拟合。特别地,当n=1时,上式称为线性拟合或直线拟合。

关于的线性方程组,用矩阵表示为:

MATALB工具箱中提供了最小二乘拟合函数polyfit(),具体调用格式如下。

(1)P = polyfit(X, Y, N)

其中,X为输入的向量,Y为X对应的函数值,N表示拟合的最高次数,返回的P值为拟合的多项式P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X + P(N+1)。

(2)[P, S] = polyfit(X,Y,N)

其中,X为输入的向量,Y为X对应的函数值,N表示拟合的最高次数,返回的P值为拟合的多项式P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X + P(N+1),S为由范德蒙矩阵的QR分解的R分量。

(3)[P, S, MU] = polyfit(X,Y,N)

其中,X为输入的向量,Y为得到的函数值,N表示拟合的最高次数,返回的P值为拟合的多项式P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X + P(N+1),S为由范德蒙矩阵的QR分解的R分量,MU包含输入变量的均值和方差。

以表1-8所示数据作为研究数据,编写多项式最小二乘拟合程序如下:

    % Designed by Yu Shengwei From SWJTU University
    % 2014年12月29日
    clc,clear,close all  % 清理命令区、清理工作区、关闭显示图形
    warning off       % 消除警告
    feature jit off      % 加速代码运行
    tic  % 运算计时
    x = [1:10];
    y = [8, 2, 8, 0, 3, 7, 8, 2, 4, 1];
    figure('color',[1,1,1])  % 先建一个图形窗口画图
    plot(x,y,'bo-')        % 原始数据
    hold on
    p = polyfit(x,y,7); % 7次多项式
    yc = p(1)*x.^7+p(2)*x.^6+ p(3)*x.^5 + p(4)*x.^4 + p(5)*x.^3 + p(6)*x.^2 +...
         p(7)*x.^1 + p(8)*x.^0;
    plot(x,yc,'r*-')   % 原始数据
    legend('原始数据','拟合数据')
    xlabel('x');ylabel('y')

运行程序得到如图1-38所示图形。

图1-38 多项式拟合

1.5.3 非线性拟合

设SS的浓度削减率即植被过滤带净化效果,与植被因子、入流流量、土壤初始含水量因素、SS入流浓度、带宽因素及坡度因素存在非线性关系,其经验模型应为:

其中,P:SS的浓度削减率;V:植被因子C;Q:入流流量Q;θ:土壤初始含水量因素;C:SS入流浓度;WB:带宽因素m;S:坡度因素。

具体的过滤带数据如表1-9所示。

表1-9 过滤带数据采样表

由MATALB软件求解各过滤带非线性回归方程,程序如下:

    % 非线性拟合
    clc,clear,close all                        % 清屏、清工作区、关闭窗口
    warning off                                 % 消除警告
    feature jit off                               % 加速代码执行
    format long
    % global X0 X1 X2 X3 X4 X5 X6
    X0 = xlsread('数据','1#','B3:B30');      % EXCEL数据
    X1 = xlsread('数据','1#','E3:E30');      % EXCEL数据
    X2 = xlsread('数据','1#','G3:G30');      % EXCEL数据
    X3 = xlsread('数据','1#','I3:I30');      % EXCEL数据
    X4 = xlsread('数据','1#','K3:K30');      % EXCEL数据
    X5 = xlsread('数据','1#','M3:M30');      % EXCEL数据
    X6 = xlsread('数据','1#','O3:O30');      % EXCEL数据
    % initial value
    a1 = 1;                                     % 植被因子C系数
    a2 = 1;                                 % 入流流量Q系数
    b = 1;                                      % 入流流量Q指数
    a3 = 1;                                 % 土壤初始含水量因素系数
    a4 = 1;                                 % SS入流浓度系数
    a5 = 1;                                 % 带宽因素m系数
    a6 = 1;                                 % 坡度因素系数
    a7 = 1;                                 % 常数项系数
    xs = [a1;a2;b;a3;a4;a5;a6;a7];           % 初始值
    xdata = [X1,X2,X3,X4,X5,X6];
    [x,resnorm] = lsqcurvefit(@myfun1,xs,xdata,X0)
    % 计算后的系数
    a1 = x(1);                                 % 植被因子C系数
    a2 = x(2);                                 % 入流流量Q系数
    b = x(3);                                  % 入流流量Q指数
    a3 = x(4);                                 % 土壤初始含水量因素系数
    a4 = x(5);                                 % SS入流浓度系数
    a5 = x(6);                             % 带宽因素m系数
    a6 = x(7);                             % 坡度因素系数
    a7 = x(8);                             % 常数项系数
    for i = 1:length(X0)
        X0_fit(i) = a1*X1(i)+a2*(X2(i))^(b)+a3*X3(i)+a4*X4(i)+a5*log(X5(i))+a6*X6(i)+a7;
        err(i) = X0_fit(i)-X0(i);          % 拟合误差
    end
    figure('color',[1,1,1])
    subplot(121),plot(X0_fit,'r','linewidth',2);hold on
    plot(X0,'b','linewidth',2);hold off;axis tight
    legend('拟合值','实际值');title('SS的浓度削减率%')
    subplot(122),plot(err,'g','linewidth',2);hold off;
    axis tight;legend('误差');title('SS的浓度削减率% -- 误差')

其中,待寻优参数的函数程序如下:

    function f = myfun1(xs,xdata)
    % global X0 X1 X2 X3 X4 X5 X6
    a1 = xs(1); % 植被因子C 系数
    a2 = xs(2); % 入流流量Q 系数
    b = xs(3);  % 入流流量Q 指数
    a3 = xs(4); % 土壤初始含水量因素 系数
    a4 = xs(5); % SS入流浓度 系数
    a5 = xs(6); % 带宽因素m  系数
    a6 = xs(7); % 坡度因素%  系数
    a7 = xs(8); % 常数项     系数
    X1 = xdata(:,1);  X2 = xdata(:,2);  X3 = xdata(:,3);
    X4 = xdata(:,4);  X5 = xdata(:,5);  X6 = xdata(:,6);
    f = a1*X1+a2*(X2).^(b)+a3*X3+a4*X4+a5*log(X5)+a6*X6+a7;

输出结果如下:

    x =
       1.0e+02 *
       1.007165434022676
      -0.040456241588939
       0.185977104531790
       0.008560952618974
       0.000124899448938
       0.154749375981494
       0.101746255701932
      -0.378264567655201
    resnorm =
         8.715616935003856e+03

由MATALB软件求解各过滤带非线性回归方程列表如表1-10所示。

表1-10 非线性拟合回归方程