功能:7输入1输出 算法:线性规划预测(MATLAB自定义函数)
电话:13483417110
输入:入炉温度、第一加热段温度、第二加热段温度、均热段温度、第一加热段停留时间、第二加热段停留时间、均热段停留时间
输出:出炉温度
数据摘自《唐钢 0 1700 加热炉模型开发与优化》
close all;clear;clc;
dALL = xlsread('tg1700.xlsx','sheet1','B4:I153')
[M,N] = size(dALL);% M = 150,N = 8
X = dALL(1:100,1:7);%输入数据 7维
Y = dALL(1:100,8);%输出数据 1维
% ----------------------------- %
switch=1;
% ----------------------------- %
[beta, r,Ypred] = xxgh_function(X, Y, switch);
if switch==1
Ypred = beta(1)+beta(2)*X(:, 1)+beta(3)*X(:, 2)+beta(4)*X(:, 3)+beta(5)*X(:, 4)+beta(6)*X(:, 5)+beta(7)*X(:, 6)+beta(8)*X(:, 7);
end
sprintf('y = %f + %fx1 + %fx2 + %fx3 + %fx4 + %fx5 + %fx6 + %fx7\n'...
,beta(1),beta(2),beta(3),beta(4),beta(5),beta(6),beta(7),beta(8))
figure(2)
plot(Ypred-Y)
title('误差')
% [b,bint,r,rint,stats]=regress(y,X);
% y——因变量数据n×1向量
% X——自变量数据n×m向量
function [beta, r,Ypred]=xxgh_function(X, Y, switch)
% switch = 1-regress
% switch = 2-nlinfit
% switch = 3-lsqcurvefit
if switch==1
X=[ones(size(Y)), X];
[beta, bint, r, rint, states]=regress(Y, X);
% 多元线性回归
% 式中:b——参数估计值
% bint——b的置信区间
% r——残差向量y-xb
% rint——r的置信区间
% stats——检验统计量,第一值是回归方程的置信度(相关系数),第二值是F统计量值,第二值是与F统计量相应的p值;
% y=beta(1)+beta(2)*x1+beta(3)*x2+beta(4)*x3+...
% Ypred = beta(1)+beta(2)*X(:, 1)+beta(3)*X(:, 2)+beta(4)*X(:, 3)+beta(5)*X(:, 4)+beta(6)*X(:, 5)+beta(7)*X(:, 6)+beta(8)*X(:, 7);
Ypred = zeros(size(Y));
% beta—系数估计
% bint—系数估计的上下置信界
% r—残差
% rint—诊断异常值的区间
% states—模型统计信息
% figure(1)
% rcoplot(r, rint)
elseif switch==2
beta0=ones(8, 1);
% 初始值的选取可能会导致结果具有较大的误差。
[beta, r, J]=nlinfit(X, Y, @math_function, beta0)
% 非线性回归
% beta—系数估计
% r—残差
% J—雅可比矩阵
[Ypred,delta]=nlpredci(@math_function, X, beta, r, 'Jacobian', J);
% 非线性回归预测置信区间
% Ypred—预测响应
% delta—置信区间半角
% figure(1)
% plot(X(:, 1), Y, 'k.', X(:, 1), Ypred, 'r');
elseif switch==3
beta0=ones(8, 1);
% 初始值的选取可能会导致结果具有较大的误差。
[beta,resnorm,r, ~, ~, ~, J]=lsqcurvefit(@math_function,beta0,X,Y)
% 在最小二乘意义上解决非线性曲线拟合(数据拟合)问题
% beta—系数估计
% resnorm—残差的平方范数 sum((fun(x,xdata)-ydata).^2)
% r—残差 r=fun(x,xdata)-ydata
% J—雅可比矩阵
[Ypred,delta]=nlpredci(@math_function, X, beta, r, 'Jacobian', J);
% figure(1)
% plot(X(:, 1), Y, 'k.', X(:, 1), Ypred, 'r');
end
beta
end
function y=math_function(beta,x)
y=beta(1)+beta(2)*x(:, 1)+beta(3)*x(:, 2)+beta(4)*x(:, 3)+beta(5)*x(:, 4)+beta(6)*x(:, 5)+beta(7)*x(:, 6)+beta(8)*x(:, 7);
end
switch=3 结果如下
y = -123.209276 + 0.817265x1 + 0.049895x2 + 0.081977x3 + 0.365690x4 + 1.069920x5 + -0.205484x6 + -0.759725x7