编程语言
首页 > 编程语言> > 【预测模型】基于matlab灰色理论GM模型地区PM2.5预测【含Matlab源码 499期】

【预测模型】基于matlab灰色理论GM模型地区PM2.5预测【含Matlab源码 499期】

作者:互联网

一、简介

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

标签:AGO,end,模型,A1,源码,499,序列,yuce,size
来源: https://www.cnblogs.com/homeofmatlab/p/14943956.html