1.5 数据拟合
为了较好地逼近离散的数据点,寻找数据的分布规律,多采用数据拟合操作方法,数据拟合方法采用数学方程表征数据点规律。常用的数据拟合方法包括最小二乘拟合、多项式拟合以及非线性拟合等方法。
1.5.1 最小二乘拟合工具箱
工程上常常寻求已知函数的一个逼近函数,使得逼近函数从总体上与已知函数的偏差按逼近误差最小,而又不一定过全部的点,则需要最小二乘曲线拟合法。
数据拟合的具体做法是:对给定的数据,在取定的函数类φ中,求,使误差的平方和最小,即:
其中,p(x)为拟合函数或最小二乘解,求拟合函数p(x)的方法称为最小二乘拟合。
表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 非线性拟合回归方程