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/   广大学者将自己的文章发表至学术期刊(免费或者支付版面费),然而当需要查看其他学者的文章时还需要向出版商付费,你是不是也觉得这完全阻碍了科学文化的传播。艾尔巴金在为自己辩护时援引联合国《世界人权宣言》第二十七条所提的:“人人有权自由参加社会之文化生活,欣赏艺...

CMG操作简介

前处理 数据文件的建立 查看数据文件实例 CMG通过读取一个数据文件,利用数据文件中的关键字指示进行相应的数据计算。CMG数据文件主要包括以下几个部分: 输入、输出控制段 这部分内容包括:确定输入、输出文件名;单位标准(国际标准单位、矿场单位、实验室单位);输入、输出内容等等。 油藏描述段 这部分内容主要是把建模输出的静态参数包含进来(include),定义你所应用的坐标系。如果是多个压力系统还要用关键字sector定义每个压力系统 包括的部分。 流体组分性质部分 流体组分模型;高压物性(PVT);油藏温度;岩石压缩系数;原油压缩系数;原始饱和压力;底层原油体积系数等。 岩石—流体性质部分 相对渗透率的定义等。 初始条件数据段 主要包括压力和饱和度的定义。 数值计算方法数据控制段 设置运算限制条件,如最大时间步长、最大时间步数等等,建议用缺省值。 井数据段 井位置的定义(网格定义),井类型的定义,井生产或注入的限制条件,射孔,动态数据等等。 历史拟合 为了取得跟油藏实际动态相一致的一组油藏参数,可以把模拟计算的动态跟实际动态相比较,这种方法叫历史拟合。 历史拟合过程实际是参数校正的过程,在储量拟合的基础上进行单井和井组拟合。根据实测的动态数据,主要拟合以下参数,油藏地层压力及综合含水,单井井底压力的变化,单井见水时间及含水率变化,单井生产指数变化等。 历史拟合的步骤如下: (一)、对数模参数全面检查使模型数据体通过运算 (二)、确定参数的可调范围 首先清楚哪些参数是确定的,哪些是不确定的。然后根据情况确定可调范围。 孔隙度 :此参数由测井解释和岩心分析得出,视为确定参数,允许改动范围在3%,一般不做修改。 渗透率 :渗透率在任何油、气、田都是不定参数。这不仅是由于测井解释的渗透率值和岩心分析值误差大,而且根据渗透率的特点,井间的渗透率分布也是不确定的。因此对渗透率的修...