一、简介
1 名称由来
灰色模型(Gray Model),邓聚龙教授1982年提出。
常见系统分类:
白色系统是指一个系统的内部特征是完全 已知的,即系统的信息是完全充分的。
黑色系统是指一个系统的内部信息对外界来说是一无所知的,只能通过它与外界的联系来加以观测研究。
灰色系统内的一部分信息是已知的,另一部分信息是未知的,系统内各因素间有不确定的关系。
2 算法原理
二、源代码
clc; % 清屏
clear; % 清理内存
close all; % 关闭所有窗口
I_2=load('武汉地区PM2.5数据.txt'); % 航空燃油泵电流(单位:A)
% Liuliang=[0 2000 4000 6000 8000 10000 12000 14000 16000 18000];
% LL=0:600:18000;
% I1=interp1(Liuliang,I0,LL,'pchip');
% I=I1';
% I2=I1(1:14,3);
% I3=I1(1:14,4);
% I4=[I2',I3'];
% I_1=I4';
I_1=I_2+172;
[a,b]=size(I_1); % 计算I的行列大小
for i=1:b % 求取原始数据的一次累加序列
I_1_AGO(:,i)=cumsum(I_1(:,i));
end
I_1_AGO; % 累加序列,ok
[c,d]=size(I_1_AGO); % 生成序列Y
y=I_1(2:a,:);
Y=y;
beta=0.5; % 一般取为0.5
for k=1:d % 生成序列L
for j=2:c
l(j-1,k)=(beta)*I_1_AGO(j,k)+(1-beta)*I_1_AGO(j-1,k); %构建紧邻均值
end
end
l;
[e,f]=size(l);
l1=ones(e,1); % 生成e*1的全1矩阵
L=[-l,l1]; %生成矩阵B
A1=inv(L'*L)*L'*Y; % 由最小二乘法生成n元一阶微分方程的两个待定参数矩阵A和B,从而对原灰色模型进行白化
A1=A1';
[g,h]=size(A1);
A=A1(:,1:h-1); % 求发展系数(反映了预测值序列的发展态势。为负值时(当然指的是最小二乘求取法),表示指数衰减;为正值时,表示指数上升)。
B=A1(:,end); % 求灰色作用量(反映数据变化的关系且是内涵外延化的具体体现,是区别灰色建模和一般建模过程的根本途径)。
disp(['发展系数:',num2str(A)])
disp(['灰色作用量:',num2str(B)])
for k=0:a+1600 % 累加序列预测值
II(k+1)=(I_1(1)-B/A)*exp(-A*k)+B/A; % 通过时间响应序列求预测后累加序列In_1(k-1,:)=(expm(A*(k-1)))*(L'+inv(A)*B)-inv(A)*B;
end
II;
for kk=1:a+1600
yuce(kk)=II(kk+1)-II(kk); % 通过累减操作后即可得到所求预测值
end
yuce'; % 模拟结果
%wucha(:,1)=I_1'-yuce; % 误差
%Jieguo=[I_1,yuce',wucha(:,1)]; % [原始数据,模拟结果,误差]
%ave=(sum(abs(wucha))/a)*100 % 平均相对误差
x=1:a+1600;
hold on
box on
%grid on
plot(x(1:a),I_1,'k.-')
hold on
plot(x(1:a+1600),yuce,'b.-')
plot(35*ones(2500,1),'r-')
% plot(x,I_1,'k',x,yuce,'b') % 绘图
legend('原始数据','预测数据','最终年终平均浓度')
% title('基于GM(1,1)模型的复合材料结构损伤趋势分析')
xlabel('治理时长/天');
ylabel('PM2.5');
xlim([1,2000]);
ylim([0,650]);
axis fill;
hold off
yucend=[280,0,0,0,0,0]';
for i=1:1:5
yucend(i+1,1)=yuce(365*i);
data1=data(:,1)+171;
qt=230;% 控制建模数据个数
for at=qt:length(data)-1
at
I=data1(w:at);
[a,b]=size(I); % 计算I的行列大小
for i=1:b % 求取原始数据的一次累加序列
I_1_AGO=cumsum(I); %cumsum(a) 求数组的累加和
end
I_1_AGO; % 累加序列,ok
[c,d]=size(I_1_AGO); % 生成序列Y
y=I(2:a,:); % 从第2个开始取出原始数据构成Y矩阵
Y=y;
beta=0.5; % 一般取为0.5
for k=1:d % 生成序列L
for j=2:c
l(j-1,k)=(beta)*I_1_AGO(j,k)+(1-beta)*I_1_AGO(j-1,k);
end
end
l; % 计算紧邻均值矩阵 30行1列
[e,f]=size(l);
l1=ones(e,1); % 生成e*1的全1矩阵
L=[-l,l1]; % 构建 B矩阵
A1=inv(L'*L)*L'*Y; % 由最小二乘法生成n元一阶微分方程的两个待定参数矩阵A和B,从而对原灰色模型进行白化
A1=A1';
[g,h]=size(A1)
A=A1(:,1:h-1) %将a b 的值提取出来 % 求发展系数(反映了预测值序列的发展态势。为负值时(当然指的是最小二乘求取法),表示指数衰减;为正值时,表示指数上升)。
B=A1(:,end) % 求灰色作用量(反映数据变化的关系且是内涵外延化的具体体现,是区别灰色建模和一般建模过程的根本途径)。
disp(['发展系数:',num2str(A)])
%Fazhanxishu=A
disp(['灰色作用量:',num2str(B)])
Huisezuoyongliang=B
for k=0:a % 累加序列预测值
II(k+1)=(I(1)-B/A)*exp(-A*(k))+B/A; % 通过时间响应序列求预测后累加序列In_1(k-1,:)=(expm(A*(k-1)))*(L'+inv(A)*B)-inv(A)*B;
end
II; % 算出X(1)的
for kk=1:a
yuce(kk+1)=II(kk+1)-II(kk); % 通过累减操作后即可得到所求预测值
end
yuce1(w,:)=yuce;
w=w+1;
end
yuce1;
lyuce=[data1(1,1),yuce1(1,2:qt),yuce1(1:length(data)-qt,qt+1)'];
[o,p]=size(lyuce);
wucha=data1-lyuce'; % 误差
%Jieguo=[I,lyuce,wucha(:,1)]; % [原始数据,模拟结果,误差]
三、运行结果
四、备注
版本:2014a
完整代码或代写加1564658423