灰色预测模型代码_预测方法合集——灰色预测

点击关注不迷路!

      灰色预测,为什么是灰色呢,灰色就是介于黑色和白色之间。所以说灰色预测是一种对含有不确定因素的系统进行预测的方法。灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。其用等时距观测到的反应预测对象特征的一系列数量值构造灰色预测模型,预测未来某一时刻的特征量,或达到某一特征量的时间。

       应用领域:气象预报、地震预报、病虫害预报等

       其核心体系是灰色模型(Grey Model,简称GM),即对原始数据作累加生成(或其它方法生成)得到近似的指数规律再进行建模的方法。

8b727ab300345ba75c9fc31bd857a60e.png

我们先来说一说GM(1,1)模型

GM(1,1)模型表示模型是1阶微分方程,且只含1个变量的灰色模型。

第一步:数据的检验与处理

首先,为了保证建模方法的可行性,需要对已知数据列作必要的检验处理。设参考数据为

e6a2e7220312d2e1047c65624a00a06b.png

计算序列的级比:

81353e17f83da49045a96c9a528bf806.png

如果所有的级比都落在可容覆盖

db30fd318fb7befa4140393f7b5bb0a1.png

则序列可以作为模型GM(1,1)的数据进行灰色预测。否则,需要对序列做必要的变换处理,使其落入可容覆盖内。即取适当的常数,作平移变换

26b28300dbb8d1d6c1a1116255b1a24e.png

使序列

222376282978ebf8d0bbc248fd2b1d91.png

的级比达到要求:

aad58aea5b0f6ee8aa7981175bb555ff.png

第二步:建立模型

生成X(0)的累加数列:

b4e6fed3325fb1eade6f047e4af3879b.png

X(1)的均值生成数列Z(1):

79fa44f5fdcf22039cc2774994018827.png

先建立白化方程(影子方程):

955c559b71229e56073287999f078eeb.png

将上式离散化,微分变差分,得到灰微分方程如下:

051561e305820700e61009afa2ca2a10.png

求解参数a,u 用最小二乘法,可以解得上式中的参数,其中a称为发展系数,其大小反映了序列X(0)的增长速度,u称为灰作用量(内生变量)

最终我们就可以得到X(1)的预测公式:

a945af9228598a787d63f7a1020be659.png

上面讲到的仅是一种最简单最基础的GM(1,1)模型,其适用于具有较强指数规律的序列,只能描述单调的变化过程,对于非单调的摆动发展序列或有饱和的S形序列,可以考虑建立GM(2,1),DGM和Verhulst模型。

   总体来说,灰色预测的优点是不需要很多的数据,一般只需要4个数据就够,能解决历史数据少、序列的完整性及可靠性低的问题;能利用微分方程来充分挖掘系统的本质,精度高;能将无规律的原始数据进行生成得到规律性较强的生成序列,运算简便,易于检验,具有不考虑分布规律,不考虑变化趋势。缺点是只适用于中短期的预测,只适合指数增长的预测。

话不多说,上GM(1,1)代码:

%建立符号变量a(发展系数)和b(灰作用量)syms a b;c = [a b]';%原始数列 AA = [0.025, 0.023, 0.029, 0.044, 0.084, 0.164, 0.332, 0.521, 0.97, 1.6, 2.45, 3.11, 3.57, 3.76, 3.96, 4, 4.46, 4.4, 4.49, 4.76, 5.01];n = length(A);%对原始数列 A 做累减得到数列 Bfor i = 2:n    H(i) = A(i) - A(i - 1);endH(1) = [];%对原始数列 A 做紧邻均值生成for i = 2:n    C(i) = (A(i) + A(i-1))/2;endC(1) = [];%构造数据矩阵 D = [-C; C.^2];Y = H; Y = Y';%使用最小二乘法计算参数 a(发展系数)和b(灰作用量)c = inv(D*D')*D*Y;c = c';a = c(1); b = c(2);%得到预测出的数据F = []; F(1) = A(1);for i = 2:(n+n)    F(i) = (a*A(1))/(b*A(1)+(a - b*A(1))*exp(a*(i-1)));enddisp('预测数据为:');F%绘制曲线图t1 = 0:n-1; t2 = 0:2*n-1;plot(t1, A, 'ro'); hold on;plot(t2, F);xlabel('时间点均匀采样/5h'); ylabel('细菌培养液吸光度/OD600');legend('实际数量','预测数量');title('大肠杆菌培养S形增长曲线');grid on;

然后就可轻松得到:

9b98d531dc52a9ac8255303fd3d85fd8.png

如果有小伙伴需要利用,仅需改变其中数据,和表格的设置,就可以使用啦!

你学会了嘛?

本期内容就到此结束啦,感谢您的阅读,快快关注公众号“树仁阅读”

创作属实不易,点个关注,点亮在看,帮忙转发一下增长人气也是非常感谢!树仁巧说与您下期再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值