GM11模型及其Matlab实现.docx
《GM11模型及其Matlab实现.docx》由会员分享,可在线阅读,更多相关《GM11模型及其Matlab实现.docx(16页珍藏版)》请在冰豆网上搜索。
GM11模型及其Matlab实现
灰色系统预测GM(1,1)模型及其Matlab实现
三天三夜72小时:
读懂题目-》查找文献资料-》选择题目-》重查找文献资料-》
精读其中几篇-》查找资料的资料。
。
。
。
在数学建模中常常会遇到数据的预测问题,有些赛题中,预测
Forpersonaluseonlyinstudyandresearch;notforcommercialuse
占主导地位,例如:
2003年A题SARS的传播问题;
2005年A题长江水质的评价和预测问题;
Forpersonaluseonlyinstudyandresearch;notforcommercialuse
2006年B题艾滋病疗法的评价及疗效的预测问题;
2007年A题中国人口增长预测问题。
有些问题则是需要在求解的过程中进行预测,如2009年D题“会议筹备”对与会人数的确定等。
参考资料:
《灰色系统理论及其应用第五版》作者:
刘思峰,党耀国等著出版时间:
2010.05校超星数字图书馆可阅读。
灰色模型(GrayModel)有严格的理论基础,最大优点是实用。
用灰色模型预测的结果比较稳定,不仅适用于大数据量的预测,在数据量较少时(>3)预测结果依然较准确。
预备知识
(1)灰色系统
白色系统是指系统内部特征是完全已知的,即人们不仅知道该系统的输入——输出关系,而且知道实现输入——输出关系的结构与过程;黑色系统是指系统内部信息完全未知的,即人们只知道该系统输入——输出关系,但不知道实现输入——输出关系的结构与过程;而灰色系统是介于白色系统和黑色系统之间的一种系统,灰色系统其内部一部分信息已知,另一部分信息未知或不确定。
例如,一个加有电压的电阻,也是一个系统,根据欧姆定律,I=U/R,当电阻的大小知道后,便可由多大电压算出能得到多大电流。
电压与电流之间有明确的关系或函数,这便是白色系统。
因此,这样的系统要求有明确的作用原理,一个有明确作用原理的系统必定是具有确定结构的,必定是有物理原型的。
然而许多社会经济系统都没有物理原型,虽然知道影响系统的某些因素,但很难明确全部因素,更不可能确定因素之间的映射关系。
这种没有确定的映射关系(函数关系)的系统是灰色系统。
(2)灰色预测
灰色预测,是指对系统行为特征值的发展变化进行的预测,对既含有已知信息又含有不确定信息的系统进行的预测,也就是对在一定范围内变化的、与时间序列有关的灰过程进行预测。
尽管灰过程中所显示的现象是随机的、杂乱无章的,但毕竟是有序的、有界的,因此得到的数据集合具备潜在的规律。
灰色预测是利用这种规律建立灰色模型对灰色系统进行预测。
目前使用最广泛的灰色预测模型就是关于数列预测的一个变量、一阶微分的GM(1,1)模型。
它是基于随机的原始时间序列,经按时间累加后所形成的新的时间序列呈现的规律可用一阶线性微分方程的解来逼近。
经证明,经一阶线性微分方程的解逼近所揭示的原始时间序列呈指数变化规律。
因此,当原始时间序列隐含着指数变化规律时,灰色模型GM(1,1)的预测是非常成功的。
目前,灰色模型GM(1,1)己广泛应用于工程技术、社会、经济、农业、生态、环境等各种系统的预测中。
1灰色预测基础知识
灰色系统理论认为:
系统的行为现象尽管是朦胧的,数据是复杂的,但它毕竟是有序的,是有整体功能的。
在建立灰色预测模型之前,需先对原始时间序列进行数据处理,经过数据预处理后的数据序列称为生成列。
对原始数据进行预处理,不是寻求它的统计规律和概率分布,而是将杂乱无章的原始数据列通过一定的方法处理,变成有规律的时间序列数据,即以数找数的规律,再建立动态模型。
灰色系统常用的数据处理方式有累加和累减两种,通常用累加方法。
灰色预测通过鉴别系统因素之间发展趋势的相异程度,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物的未来发展趋势。
灰色预测的数据是通过生成数据的模型所得到的预测值的逆处理结
果。
灰色预测是以灰色模型为基础的,在诸多的灰色模型中,以灰色系统中单序列一阶线性微分方程模型GM(1,1)模型最为常用。
下面简要地介绍GM(1,1)模型。
设有原始数据列x(0)=(x(0)
(1),x(0)
(2),…,x(0)(n)),n为数据个数。
如果根据x(0)数据列建立GM(1,1)来实现预测功能,则基本步骤如下:
(1)原始数据累加以便弱化随机序列的波动性和随机性,得到新数据序列:
x
(1)={x
(1)
(1),x
(1)
(2),…,x
(1)(n)}
其中,x
(1)(t)中各数据表示对应前几项数据的累加。
x
(1)(t)=
,t=1,2,…,n
(2)对x
(1)(t)建立下述一阶线性微分方程:
即GM(1,1)模型。
其中,a,u为待定系数,分别称为发展系数和灰色作用量,a的有效区间是(-2,2),并记a,u构成的矩阵为灰参数
=
。
只要求出参数a,u,就能求出x
(1)(t),进而求出x(0)的未来预测值。
(3)对累加生成数据做均值生成B与常数项向量Yn,即
B=
Yn=
(4)用最小二乘法求解灰参数
则
=(BTB)-1BTYn
(5)将灰参数
代入
并对
进行求解,得
(1)(t+1)=(X(0)
(1)-
)
+
由于
是通过最小二乘法求出的近似值,所以
(1)(t+1)是一个近似表达式,为了与原序列x
(1)(t+1)区分开来,故记为
(1)(t+1)。
式中t为时间序列,可取年、季或月。
(6)对函数表达式
(1)(t+1)及
(1)(t)进行离散,并将二者做差以便还原x(0)原序列,得到近似数据序列
(0)(t+1)如下:
(0)(t+1)=
(1)(t+1)-
(1)(t)
(7)对建立的灰色模型进行检验,步骤如下:
计算x(0)(t)与
(0)(t)之间的残差e(0)(t)和相对误差q(0)(t):
e(0)(t)=x(0)(t)-
(0)(t)
q(0)(t)=e(0)(t)/x(0)(t)
等等。
(8)利用模型进行预测:
(0)={
(0)
(1),
(0)
(2),…,
(0)(n),
(0)(n+1),…,
(0)(n+m)}
原数列的模拟未来数列的预测
应用举例
取某高校2000年~2005年的某专业招生数据建模,见表1。
表1某高校专业招生数据表
年
招生人数
2000
132
2001
92
2002
118
2003
130
2004
187
2005
207
以表1中的数据构造原始数据列X(0),即
X(0)={X(0)
(1),X(0)
(2),X(0)(3),X(0)(4),X(0)(5),X(0)(6)}
={132,92,118,130,187,207}
对X(0)进行一次累加(1—AGO),生成数列:
X
(1)(k)=
X(0)(i)即
X
(1)={X
(1)
(1),X
(1)
(2),X
(1)(3),X
(1)(4),X
(1)(5),X
(1)(6)}
={132,224,342,472,659,866}
和数据阵B、数据列Yn
B=
,Yn=(92,118,130,187,207)T
经计算可得
=[a,u]T
=
进一步得到灰色预测模型GM(1,1)为
(1)(k)=(X(0)
(1)-
)
+
=(132+277.0137483)
-277.0137483
=409.0137483
-277.0137483
预测值及预测精度见表2。
表2某高校专业招生预测值及预测精度表
年
GM(1,1)模型
计算值
1—AGO
还
原
值
实
际
值
误
差
拟合相对
误差(%)
2000
132
132
132
132
0
0
2001
225.0608796
224
93
92
1
-1
2002
339.2954418
342
114
118
4
3.38
2003
479.52123
472
140
130
-10
-7.69
2004
651.6519
659
172
187
15
8
2005
862.9466129
866
211
207
-4
-1.93
2006
1122.316167
259
252
-7
-2.78
由表2知预测精度较高。
2006年某专业招生人数预测值为259人。
由于人数为整数,所以结果取整数部分。
GM(1,1)也是一种长期预测模型,在没有大的市场波动及政策性变化的前提下,该预测值应是可信的。
众所周知,影响招生人数的因素很多且难以预测。
因此,在采用灰色系统理论进行定量预测时,如果存在对预测对象影响较大的因素,就要在定性分析的基础上,寻找原始数据信息的突变点的量化值,然后再对预测值进行必要的修正,使预测值更接近实际情况,提高预测值的可信度,为科学决策提供可靠的数据。
另外,若作长期预测,要考虑对上限值的约束条件。
2灰色预测的MATLAB程序
2.1典型程序结构
灰色预测中有很多关于矩阵的运算,这可是MATLAB的特长,所以用MATLAB是实现灰色预测过程的首选。
用MATLAB编写灰色预测程序时,可以完全按照预测模型的求解步骤,即
(1)对原始数据进行累加。
(2)构造累加矩阵B与常数向量Yn。
(3)求解灰参数。
(4)将参数带入预测模型进行数据预测。
下面以某公司收入预测问题为例介绍灰色预测的MATLAB实现过程。
已知某公司1999—2008年的利润为(单位:
元/年):
[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670],现在要预测该公司未来几年的利润情况。
具体的MATLAB程序如下:
clear
symsau;
c=[au]';%灰参数c
A=[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670];%原始数据
Ago=cumsum(A);%原始数据一次累加
n=length(A);%原始数据个数
fori=1:
(n-1)
C(i)=(Ago(i)+Ago(i+1))/2;%生成累加矩阵
end
%计算待定参数的值
Yn=A;Yn
(1)=[];
Yn=Yn';
E=[-C;ones(1,n-1)];
c=inv(E*E')*E*Yn;
c=c';
a=c
(1);u=c
(2);
%预测后续数据
F=[];F
(1)=A
(1);
fori=2:
(n+10)
F(i)=(A
(1)-u/a)/exp(a*(i-1))+u/a;
end
G=[];G
(1)=A
(1);
fori=2:
(n+10)
G(i)=F(i)-F(i-1);%得到预测出来的数据
end
t1=1999:
2008;
t2=1999:
2018;
G
plot(t1,A,'o',t2,G)%原始数据与预测数据的比较
运行该程序,得到的预测数据如下:
G=
1.0e+006*Columns1through14
0.08970.08930.10340.11960.13850.16020.1854
0.21460.24830.28730.33250.38470.44520.5152
Columns15through20
0.59620.68990.79840.92391.06911.2371
该程序还显示了预测数据与原始数据的比较图。
2.2灰色预测程序说明
(1)先熟悉程序中各条命令的功能,以加深对灰色预测理论的理解。
(2)在实际使用时,可以直接套用该段程序,把原数据和时间序列数据替换就可以了。
(3)模型的误差检验可以灵活处理,图中给出的是预测数据与原始数据的比较图,同样也可以对预测数据进行其他方式的精度检验。
3灰色预测应用实例
3.1实例一:
长江水质的预测(CUMCM2005A)
长江的水质问题是一个复杂的非线性系统,但是由于数据样本少,需要预测的时间长,直接应用神经网络很难取得理想的效果。
考虑到污水排放量的变化规律是一个不确定的系统,且题中给出污水排放量数据样本比较少,还要求做出长达10年的预测,因此采用灰色预测方
法来预测未来的污水排放量。
对原题附件4中的数据进行整理可以得到10年的长江污水量排放数据,如下表所列。
1995—2004年长江污水排放量
年份
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
污水量/亿吨
174
179
183
189
207
234
220.5
256
270
285
以前述的程序段为基础,将上表的数据代入,并更新时间轴数据,即得到新程序。
clear
symsau;
c=[au]';%灰参数c
A=[174179183189207234220.5256270285];%原始数据
Ago=cumsum(A);%原始数据一次累加
n=length(A);%原始数据个数
fori=1:
(n-1)
C(i)=(Ago(i)+Ago(i+1))/2;%生成累加矩阵
end
%计算待定参数的值
Yn=A;Yn
(1)=[];
Yn=Yn';
E=[-C;ones(1,n-1)];
c=inv(E*E')*E*Yn;
c=c';
a=c
(1);u=c
(2);
%预测后续数据
F=[];F
(1)=A
(1);
fori=2:
(n+10)
F(i)=(A
(1)-u/a)/exp(a*(i-1))+u/a;
end
G=[];G
(1)=A
(1);
fori=2:
(n+10)
G(i)=F(i)-F(i-1);%得到预测出来的数据
end
t1=1995:
2004;
t2=1995:
2014;
G,a,u%输出预测值、发展系数和灰色作用量
plot(t1,A,'o',t2,G)%原始数据与预测数据的比较
1995—2014预计长江排放的污水量
3.2实例二:
预测与会代表人数(CUMCM2009D)
1.问题描述
该题要求为会议筹备组制订一个预订宾馆客房、租借会议室、租用客车的合理方案。
为了解决这个问题,需要先预测与会代表的人数。
预测的依据是代表回执数量及往届的与会人员数据。
已知本届会议的回执情况表及以往几届会议代表回执和与会情况表。
要解决的问题是:
根据这些数据预测本届与会代表人数。
本届会议代表的回执中有关住房要求的信息单位:
人
要求
合住1
合住2
合住3
独住1
独住2
独住3
男
154
104
32
107
68
41
女
78
48
17
59
28
19
说明:
表头第一行中的数字1、2、3分别指每天每间120~160元、161~200元、201~300元三种不同价格的房间。
合住是指要求两人合住一间。
独住是指可安排单人间或一人单独住一个双人间。
以往几届会议代表回执和与会情况单位:
人
届次
第一届
第二届
第三届
第四届
发来回执的代表数量
315
356
408
711
发来回执但未与会的代表数量
89
115
121
213
未发回执而与会的代表数量
57
69
75
104
2.问题的求解
根据上上表的数据,可知本届发来回执的数量为755。
根据上表的数据,可以知道发来回执但未与会的代表数和未发回执但与会的代表与发来回执数量间的关系。
定义1:
未知与会率=未发回执但与会的代表的数量/发来回执的代表数量
定义2:
缺席率=发来回执但未与会的代表数/发来回执的代表数量
根据以上定义,可以得到往届的缺席率和未知与会率,如下表所列。
往届的缺席率和未知与会率
届次
第一届
第二届
第三届
第四届
缺席率
0.282540
0.323034
0.296569
0.299578
未知与会率
0.180952
0.193820
0.183824
0.146273
从表中可以看出,缺席率一直保持在0.3左右,而未知与会率却变化较快。
为此,认为第五届的缺席率仍为0.3。
这样,缺席的人数为755人×0.3=226.5人。
为了保守起见,对226.5人进行向下取整,即缺席的人数为226人。
未知与会率变化相对剧烈,不适合应用比例方法确定,同时由于数据有限,所以应用灰色预测方法比较合适。
从实际问题的角度,认为以未知与会率为研究对象较为合适。
将往届的未知与会率数据代入前述程序,并对输入数据和预测数据做相应修改,可很快得到本届的未
知与会率为0.1331,所以本届未发回执但与会的代表数量为755人×0.1331=100.4905人。
同样保守考虑,向上取整为101人。
这样就可以预测本届与会代表的数量为755人+101人-226人=630人。
仅供个人用于学习、研究;不得用于商业用途。
Forpersonaluseonlyinstudyandresearch;notforcommercialuse.
NurfürdenpersönlichenfürStudien,Forschung,zukommerziellenZweckenverwendetwerden.
Pourl'étudeetlarechercheuniquementàdesfinspersonnelles;pasàdesfinscommerciales.
толькодлялюдей,которыеиспользуютсядляобучения,исследованийинедолжныиспользоватьсявкоммерческихцелях.
以下无正文