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