简介
灰色系统理论是由华中理工大学邓聚龙教授于1982年提出并加以发展的。二十几年来,引起了不少国内外学者的关注,得到了长足的发展。目前,在我国已经成为社会、经济、科学技术在等诸多领域进行预测、决策、评估、规划控制、系统分析与建模的重要方法之一。特别是它对时间序列短、统计数据少、信息不完全系统的分析与建模,具有独特的功效,因此得到了广泛的应用.
适用范围
该模型使用的不是原始数据的序列,而是生成的数据序列。核心体系是Grey Model,即对原始数据作累加生成(或其他处理生成)得到近似的指数规律再进行建模的方法。
优点
在处理较少的特征值数据,不需要数据的样本空间足够大,就能解决历史数据少、序列的完整性以及可靠性低的问题,能将无规律的原始数据进行生成得到规律较强的生成序列。
缺点
只适用于中短期的预测,只适合近似于指数增长的预测。
灰色系统
灰色系统是黑箱概念的一种推广。
我们把既含有已知信息又含有未知信息的系统称为灰色系统,作为两个极端,我们将称信息完全未确定的系统为黑色系统;称信息完全确定的系统为白色系统。区别白色系统与黑色系统的重标志是系统各因素之间是否具有确定的关系。
特点
-
- 用灰色数学处理不确定量,使之量化.
-
- 充分利用已知信息寻求系统的运动规律.
-
- 灰色系统理论能处理贫信息系统.
灰色生成
将原始数据列中的数据,按某种要求作数据处理称为生成。客观世界尽管复杂,表述其行为的数据可能是杂乱无章的,然而它必然是有序的,都存在着某种内在规律,不过这些规律被纷繁复杂的现象所掩盖,人们很难直接从原始数据中找到某种内在的规律。对原始数据的生成就是企图从杂乱无章的现象中去发现内在规律。
常用灰色系统生成方式
-
- 累加生成
-
- 累减生成
-
- 均值生成
-
- 级比生成
- ……
累加生成
累加生成,**即通过数列间各时刻数据的依个累加以得到新的数据与数列。**累加前的数列称原始数列,累加后的数列称为生成数列。累加生成是使灰色过程由灰变白的一种方法,它在灰色系统理论中占有极其重要地位,通过累加生成可以看出灰量积累过程的发展态势,使离乱的原始数据中蕴含的积分特性或规律加以显化。累加生成是对原始数据列中各时刻的数据依次累加,从而生成新的序列的一种手。
GM(1,1)预测模型
推导
精度检验
模型选定之后,一定要经过检验才能判定其是否合理,只有通过检验的模型才能用来作预测。
灰色模型的精度检验一般有三种方法:
- 相对误差大小检验法
- 关联度检验法
- 后验差检验法
下面主要介绍后验差检验法
精度检验等级参照表
算法总结
主要步骤
-
- 累加生成
-
- 建立GM(1,1)模型
-
- 检验预测值
Matlab代码
function []=greymodel(y)
% 本程序主要用来计算根据灰色理论建立的模型的预测值。
% 应用的数学模型是 GM(1,1)。
% 原始数据的处理方法是一次累加法。
y=input('请输入数据 ');
n=length(y);
yy=ones(n,1);
yy(1)=y(1);
for i=2:n
yy(i)=yy(i-1)+y(i);
end
B=ones(n-1,2);
for i=1:(n-1)
B(i,1)=-(yy(i)+yy(i+1))/2;
B(i,2)=1;
end
BT=B';
for j=1:n-1
YN(j)=y(j+1);
end
YN=YN';
A=inv(BT*B)*BT*YN;
a=A(1);
u=A(2);
t=u/a;
i=1:n+2;
yys(i+1)=(y(1)-t).*exp(-a.*i)+t;
yys(1)=y(1);
for j=n+2:-1:2
ys(j)=yys(j)-yys(j-1);
end
x=1:n;
xs=2:n+2;
yn=ys(2:n+2);
plot(x,y,'^r',xs,yn,'*-b');
det=0;
sum1=0;
sumpe=0;
for i=1:n
sumpe=sumpe+y(i);
end
pe=sumpe/n;
for i=1:n;
sum1=sum1+(y(i)-pe).^2;
end
s1=sqrt(sum1/n);
sumce=0;
for i=2:n
sumce=sumce+(y(i)-yn(i));
end
ce=sumce/(n-1);
sum2=0;
for i=2:n;
sum2=sum2+(y(i)-yn(i)-ce).^2;
end
s2=sqrt(sum2/(n-1));
c=(s2)/(s1);
disp(['后验差比值为:',num2str(c)]);
if c<0.35
disp('系统预测精度好')
else if c<0.5
disp('系统预测精度合格')
else if c<0.65
disp('系统预测精度勉强')
else
disp('系统预测精度不合格')
end
end
end
disp(['下个拟合值为 ',num2str(ys(n+1))]);
disp(['再下个拟合值为',num2str(ys(n+2))]);
实际案例
[724.57, 746.62, 778.27, 800.8, 827.75,871.1, 912.37, 954.28, 995.01, 1037.2]
[2.874,3.278,3.337,3.390,3.679]
例子
数学建模之灰色预测实例含代码(城市交通噪声的例子)
GM(2,1)、DGM(2,1)模型、Verhulst模型
GM(1,1)模型适用于较强指数规律的序列,只能描述单调的变化过程,对于非单调的摆动发展序列或者有饱和的S形序列,可以考虑建立GM(2,1)、DGM、Verhulst模型。
GM(2,1)模型
弱化算子
对于初期增长势头过于猛烈的模型,为了提高精度,可以考虑使用弱化算子处理原始数列。
对应的,依旧是最小二乘估计参数,再对微分方程求解,得到
DGM模型建立
Verhulst预测模型
Verhulst模型的定义如下
对于模型参数,使用最小二乘估计有以下结果
最终,可以求得灰色Verhulst的解为
Verhulst模型应用:道路交通事故预测
对于交通事故死亡人数统计数据,我们首先做出大体曲线变化图,以从整体上着手
可见曲线呈现S型,考虑使用verhulst建模。建模过程如下
最后我们还要进行一步模型精度检验。灰色模型有一套具体的检验标准,后注。
检验三个指标:**相对误差、绝对关联度、均方差比值。**利用MATLAB检验结果如下:
可见:
平均相对误差为 3.74% ,则模型精度为二级;同时算得绝对关联度 g 为 0.9845,
均方差比值 C 为 0.2355,则模型精度为一级,可见模型精度较高,可用于事故预测。
Matlab程序
clc,clear
x1=[4.93 5.33 5.87 6.35 6.63 7.15 7.37...
7.39 7.81 8.35 9.39 10.59 10.94 10.44];
n = length(x1);
nian=1990:2003;
plot(nian,x1,'o-');
x0=diff(x1); %作累减生成
x0=[x1(1),x0]
z1=0.5*(x1(2:n)+x1(1:n-1)) %求紧邻均值生成序列
B=[-z1',z1'.^2]
Y=x0(2:end)'
ab_hat=B\Y %估计参数 a,b 的值
x=dsolve('Dx+a*x=b*x^2','x(0)=x0'); %求解常微分方程
x=subs(x,{'a','b','x0'},{ab_hat(1),ab_hat(2),x1(1)}); %代入参数值
yuce=subs(x,'t',0:14) %计算预测值
%下面显示微分方程的解,为了提高计算精度,把该语句放在计算预测值之后
x=vpa(x,6)
x1_all=[x1,9.92,10.71]; %加上 2004 年的两个观测值
yuce(16)=yuce(15); %2004 年有两个观测值,要对应两个相同的预测值
epsilon=x1_all-yuce %计算残差
delta=abs(epsilon./x1_all) %计算相对误差
delta_mean=mean(delta) %计算平均相对误差
x1_all_0=x1_all-x1_all(1); %观测值数据列的始点零化像
yuce_0=yuce-yuce(1); %预测值数据列的始点零化像
s0=abs(sum(x1_all_0(2:end-1))+0.5*x1_all_0(end));
s1=abs(sum(yuce_0(2:end-1))+0.5*yuce_0(end));
tt=yuce_0-x1_all_0;
s1_s0=abs(sum(tt(2:end-1))+0.5*tt(end));
absdegree=(1+s0+s1)/(1+s0+s1+s1_s0) %计算灰色绝对关联度
c=std(epsilon,1)/std(x1_all,1) %计算标准差比值
参考博客
【数学建模】灰色预测模型(预测)文章来源:https://www.toymoban.com/news/detail-445622.html
【数学建模】灰色系统理论II-Verhulst建模-GM(1,N)-GM(2,1)建模文章来源地址https://www.toymoban.com/news/detail-445622.html
到了这里,关于数学建模|预测方法:灰色预测模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!