Skip to main content

灰色预测原理及MATLAB实现

[原]灰色预测原理及MATLAB实现:

作者:金良(golden1314521@gmail.com) csdn博客:http://blog.csdn.net/u012176591

灰色模型预测的结果比较稳定,不仅适用于大数据量的预测,在数据量较少时(大于3个即可)预测结果依然较准确。

  灰色系统理论是中国著名学者邓聚龙教授在1982年创立的一门新兴横断学科,它以“部分信息已知,部分信息未知”的“小样本”、“贫信息”不确定性系统为研究对象,主要通过对部分已知信息的生成、开发,提取有价值的信息,实现对系统运行规律的正确认识和确切描述,并据以进行科学预测。

  所谓灰色系统是介于白色系统和黑箱系统之间的过渡系统,其具体的含义是:如果某一系统的全部信息已知为白色系统,全部信息未知为黑箱系统,部分信息已知,部分信息未知,那么这一系统就是灰箱系统。一般地说,社会系统、经济系统、生态系统都是灰色系统。

  灰色预测Grey Prediction是以灰色模型Grey Model 为基础的,在诸多的灰色模型中,以灰色系统中单序列一阶线性微分方程模型GM(1,1)模型最为常用。下面简要介绍GM(1,1)模型。

  设有原始数据,n为数据个数。

例子中的原始数据为:

A=[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670];
如果根据数据列建立GM(1,1)来实现预测功能,则基本步骤如下:

(1)原始数据累加以便弱化随机序列的波动性和随机性,得到新数据序列:

   

例子中的相应数据为:



B=[89677,188892,298547,418880,554703,714581,896902,1106309,1352928,1653598]


(2)对建立一阶线性微分方程:


    

其中,a,u为待定系数,分别称为发展系数和灰色作用量,a的有效区间是(-2,2),并记a,u构成的矩阵为

。只要求出a,u,就能求出,进而求出的未来预测值。

第(3)步和第(4)步为求a,u的过程。

(3)对累加生成数据做均值得到列项量并加上一列全1列向量,生成矩阵,对原始序列进行截取获得列向量,即






例子中的相应数据依次是:



E=-139284.5,-243719.5,-358713.5,-486791.5,-634642,-805741.5,-1001605.5,-1229618.5,-1503263
1,   1,     1,        1,        1, 1,   1,         1,         1
D=99215
109655
120333
135823
159878
 182321
209407
246619
300670


(4)用最小二乘法求解灰参数

,则


    




例子中得到a= -0.146 u=69891

(5)将

带入,并求解得

    

为了与原序列区分开来,故记为

(6)对函数表达式进行离散,并将二者做差以便还原原序列,得到近似数据序列如下:

    



clear
syms a b;
c=[a b]';
A=[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670];
B=cumsum(A);  % 原始数据累加
n=length(A);
for i=1:(n-1)
    C(i)=(B(i)+B(i+1))/2;  % 生成累加矩阵
end
% 计算待定参数的值
D=A;D(1)=[];
D=D';
E=[-C;ones(1,n-1)];
c=inv(E*E')*E*D;
c=c';
a=c(1);b=c(2);
% 预测后续数据
F=[];F(1)=A(1);
for i=2:(n+10)
    F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a ;
end
G=[];G(1)=A(1);
for i=2:(n+10)
    G(i)=F(i)-F(i-1); %得到预测出来的数据
end 
t1=1999:2008;
t2=1999:2018;
plot(t1,A,'o',t2,G,'.r')  %原始数据与预测数据的比较
xlabel('年份')
ylabel('利润')






(7)对建立的灰色模型进行检验,步骤如下:

1.计算之间的残差和相对误差








2.求原始数据的均值以及方差

3.求的平均值以及残差的方差

4.计算方差比

5.求小误差概率

6.灰色模型精度检验如表所列:














作者:u012176591 发表于2014-7-12 22:47:19 原文链接
阅读:57 评论:0 查看评论

Comments

Popular posts from this blog

使用PHP Webhook方式打造Telegram Bot

一、找BotFather拿到bot token     在telegram中私聊BotFather建立自己的bot,给bot取名,名字必须要以bot结尾。建好后自己的bot就有一个唯一的token,类似下面的一串字符 164354723:AAEjT6-IyNoXjt7miD0dwa-P5VmDTtHQC8 二、确认bot响应文件的位置     在写好bot响应文件后,要把bot放在网络上的一个位置,并且这个位置必须要加密的,即以https开头的一串网址。比如响应文件的名称为telbot.php,把它放在下面这个网址的位置: https://my.webhost.com/ 164354723:AAEjT6-IyNoXjt7miD0dwa-P5VmDTtHQC8 /telbot.php 上面网址中的红色设置和bot的token一样是为了确定这个唯一的位置,当然也可以任意设置。 三、告诉Telegram响应文件的位置 Telegram用下面网址的形式来设定webhook响应方式 https://api.telegram.org/bot [myauthorization-token] /setwebhook?url= [myboturl] 按照上面的网址形式,把自己创建的bot的token以及响应文件的位置填入,然后在浏览器中运行一下即可设置成功。比如: https://api.telegram.org/bot164354723:AAEjT6-IyNoXjt7miD0dwa-P5VmDTtHQC8/setwebhook?url=https://my.webhost.com/164354723:AAEjT6-IyNoXjt7miD0dwa-P5VmDTtHQC8/telbot.php 设置成功后,页面会显示下面的内容: {"ok":true,"result":true,"description":"Webhook is already set"} 四、在Telegram中给自己的bot发消息进行验证 php响应文件例子 <?php  define('BOT_TOKEN', 'YOURBOT:TOK...

telegram中的Sci-Hub机器人,又一文献下载利器

或许你看到标题会问什么是telegram,什么是Sci-Hub?请听我一一道来。 什么是Sci-Hub Sci-Hub是一个线上 数据库 ,其上提供48,000,000篇科学学术论文和文章。网站透过“.edu”代理服务器访问相关页面,每天会上传新的论文文章。2011年,哈萨克研究生亚历珊卓·艾尔巴金(Alexandra  Elbakyan)因为研究论文成本过高,每篇论文在付费墙机制下通常需要花费30美元,而决定成立Sci-Hub。2014年,学术界开始预测网站将会发展为类似Napster的服务。不过到了2015年,学术出版社爱思唯尔向纽约地方法院提交诉讼,指控Sci-Hub已经侵犯版权。纽约地方法院在2015年10月28日仍下令Sci-Hub原本使用的网域名称“Sci-Hub.org”必须终止。爱思唯尔在法院上获得胜诉后,一群研究人员、作家和艺术家则连署一封表态支持Sci-Hub和创世纪图书馆的公开信,声称这次诉讼对于世界各地的研究人员是“重大打击”,并指出:“它同样贬低我们、作者、编辑和读者。它寄生于我们的劳动,它阻挠我们为大众服务,它阻拦我们进入。”而该计划于11月因法院命令中止后,在同一个月内便改用网域名称“.io”重新上线,并开放使用Tor浏览。2016年1月时,Sci-Hub平均每天约有200,000人访问,Sci-Hub则声称网站服务每天平均有数十万次档案请求。  Sci-Hub是目前已知第一个提供大量自动且免费的付费学术论文的网站,使用者不需要事前订阅或付款,就能够使用原本存放在付费数据库的论文文章,并提供搜寻原先出版社网站内的文件档案服务。 以上介绍来源于维基百科词条 Sci-Hub Sci-Hub网站被屡次下线,但是又通过更换域名重新上线。以下三个网址经测试可以使用:  http://www.sci-hub.bz/   http://www.sci-hub.ac/   http://www.sci-hub.cc/   广大学者将自己的文章发表至学术期刊(免费或者支付版面费),然而当需要查看其他学者的文章时还需要向出版商付费,你是不是也觉得这完全阻碍了科学文化的传播。艾尔巴金在为自己辩护时援引联合国《世界人权宣言》第二十七条所提的:“人人有权自由参加社会之文化生活,欣赏艺...

Fortran77到Fortran90的注意之处

1. Fortran 77是固定格式,每行前六个字符不写代码。Fortran 90是自由格式,每行前没有限制。 2. Fortran 77每行以C,c或*开始则为注释行。Fortran 90以!引导注释。 3. Fortran 77每行第6列若不是空格和0,则该行为上一行的续行。Fortran 90以&符号作为续行符,标识在上一行的末尾或者待续行的开始。 4. Fortran 77每行第7-72列为代码区。Fortran 90的前132列为代码区。 5. Fortran 77对应的文件扩展名为.for或.f。Fortran 90对应的文件扩展名为.f90。 6. Fortran 77的变量名或程序名最多为6个字符。Fortran 90的变量名或程序名最多为31个字符。 7. 字符串表示中Fortran 77用''表示,Fortran 90既可以用'',也可以用""。 8. 逻辑运算符表示不一样:        ==      /=       >     <     >=     <=         !Fortran 90用法       .EQ.    .NE.     .GT.  .LT.  .GE.   .LE.       !Fortran 77用法 已经有一些开源的程序可以将Fortran 77程序自动转换为Fortran 90,转换程度已相当好。 (1) https://bitbucket.org/lemonlab/f2f/      f2f is a Perl script which does much of the tedious work of converting Fortran 77 source code into Fortran 90/95 form. There seems ...