灰色预测模型GM(1,1)

转载文章哦,原文在这里哦Click Here
预备知识
(1)灰色系统
白色系统是指系统内部特征是完全已知的;黑色系统是指系统内部信息完全未知的;而灰色系统是介于白色系统和黑色系统之间的一种系统,灰色系统其内部一部分信息已知,另一部分信息未知或不确定。
(2)灰色预测
灰色预测,是指对系统行为特征值的发展变化进行的预测,对既含有已知信息又含有不确定信息的系统进行的预测,也就是对在一定范围内变化的、与时间序列有关的灰过程进行预测。尽管灰过程中所显示的现象是随机的、杂乱无章的,但毕竟是有序的、有界的,因此得到的数据集合具备潜在的规律。灰色预测是利用这种规律建立灰色模型对灰色系统进行预测。
目前使用最广泛的灰色预测模型就是关于数列预测的一个变量、一阶微分的GM(1,1)模型。它是基于随机的原始时间序列,经按时间累加后所形成的新的时间序列呈现的规律可用一阶线性微分方程的解来逼近。经证明,经一阶线性微分方程的解逼近所揭示的原始时间序列呈指数变化规律。因此,当原始时间序列隐含着指数变化规律时,灰色模型GM(1,1)的预测是非常成功的。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

上面是转载博客的的解释,由于原文给出的是Python代码,但是不会Python,就自己敲一下MATLAB的代码啦。
最近在做数学建模,关于人口预测的一个问题,用到了灰色预测模型。找出了2000-2016年的人口数据,预测未来50年的数据。

clear
clc
syms a b;
c=[a b]';
A=[126743,127627,128453,129227,129988,130756,131448,132129,132802,133450,134091,134735,135404,136072,136782,137462,138271];%原始数据序列
len=length(A);
B=cumsum(A)                           %对A进行累加生成
for i=1:len-1                            %B的紧邻均值序列
    C(i)=-0.5*(B(i)+B(i+1));
end
one=ones(1,len-1);
D=[C;one];                           %构造数据矩阵
for i=2:len                           %原始数据进行平移得到数据列
    y(i-1)=A(i);
end
ans=inv(D*D')*D*y';
a=ans(1);                                 %发展系数
b=ans(2);                                  %灰作用量
F=[];
F(1)=A(1);
for i=2:(len+50)                %得到模型计算值(仍是累加的结果)
    F(i)=(A(1)-b/a)/exp(a*(i-1))+(b/a);
end
G=[];
G(1)=F(1);
for i=2:(len+50)        %累减还原得到还原值即预测的数据
    G(i)=F(i)-F(i-1);
end
disp('预测数据为: ')
G(18:67)
%模型检验
H=G(1:17);
resi=A-H;       %残差序列
delta=abs(resi./A);     %相对误差序列
Q=mean(delta);       %相对误差Q
t1=2000:2016;
t2=2017:5:2067;
%已知总人口
plot(t1,A,'ro')         %这一部分绘出2000-2016年的实际值和预测值
hold on
plot(t1,G(1:17),'b-*')
legend('实际值','预测值')
title('2000-2016年全国总人口实际值及预测值')
ylabel('总人口/万人')
%预测未来50年总人口,由于刻度的原因,不能绘制在一个图形中
% plot(G(17:67),'g-')
% set(gca,'xlim',[0 50],'xTick',0:5:50,'xTickLabel',t2)
% title('未来50年全国总人口走势图')
% ylabel('总人口/万人')

%得到相对误差Q为11.2646
  • 12
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值