数学建模|预测方法:灰色预测模型
简介
灰色系统理论是由华中理工大学邓聚龙教授于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:nyy(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-1YN(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:2ys(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:nsumpe=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:nsumce=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.35disp('系统预测精度好')
else if c<0.5disp('系统预测精度合格')else if c<0.65disp('系统预测精度勉强')elsedisp('系统预测精度不合格')endend
enddisp(['下个拟合值为 ',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) %计算标准差比值
参考博客
【数学建模】灰色预测模型(预测)
【数学建模】灰色系统理论II-Verhulst建模-GM(1,N)-GM(2,1)建模
数学建模|预测方法:灰色预测模型相关推荐
- 清风数学建模学习笔记——灰色预测模型推导及原理详解
灰色预测模型 灰色预测是对既含有已知信息又含有不确定信息的系统进行预测,就是对在一定范围内变化的.与时间有关的灰色过程进行预测. 灰色预测对原始数据进行生成处理来寻找系统变动的规律,并生成有较 ...
- 数学建模|预测方法:马尔科夫预测
马尔可夫链的定义 现实世界中有很多这样的现象:某一个系统在已知现在的条件下,系统未来时刻的情况只与现在有关,而与过去的历史无关,比如,研究一个商店的累计销售额,如果现在时刻的累计销售额已知,则未来某一 ...
- 一篇文章带你搞定数学建模中的灰色预测模型(05年长江水质问题示例讲解含代码)
文章目录 一.题目分析 二.原理步骤 三.MATLAB实现 G(1,1) 预测未来10年的污水情况 四.MATLAB 实现预测六类污染程度的河流长度比例 五.扩展灰色预测知识 一.题目分析 假如不采取 ...
- 2023年数学建模国赛:灰色预测模型与MATLAB实战案例(Matlab代码)
订阅专栏后9月比赛期间会分享思路及Matlab代码 灰色预测模型(Gray Forecast Model, GM)是一种基于少量.不完全的信息建立数学模型并进行预测的方法.在实际问题解决.制定发展战略 ...
- 数学建模 预测方法集锦
预测方法集锦 1.移动平均法 2.指数平滑法 3.差分指数平滑法 4.自适应滤波法 5.趋势外推(预测)法 6.回归分析 7.灰色预测 1.移动平均法 根据时间序列资料逐渐推移,依次计算包含一定项数的 ...
- 数学建模预测方法之 差分方程模型
差分方程 利用差分方程建模研究实际问题,常常需要根据统计数据用最小二乘法来拟合出差分方程的系数. 数据系统的稳定性还要进一步讨论代数方程的求根. 应用场景 适用于商品销售量的预测.投资保险收益率的预测 ...
- 数学建模--预测类模型
目录 一.中短期预测 1.灰色预测法 ①适用范围 ②模型实现 2.回归分析 ①适用范围 ②模型实现 3.时间序列分析 ①自适应滤波法 ②指数平滑法 ③移动平均法 4.微分方程 二.长期预测 1.神经网 ...
- 【MATLAB】数学建模入门方法综述
数学建模入门方法综述
- 数学建模常用算法—灰色预测
今天数模君给大家讲解一下数学建模比赛中常用的一种预测方法:灰色预测法. 目录 模型的含义 灰色预测的原理 实例 模型的含义 灰色预测模型 ( Gray Forecast Model )是通过少量的.不 ...
最新文章
- 深入研究ConcurrentHashMap 源码从7到8的变迁
- 【leetcode】Remove Linked List Elements(easy)
- 性能测试、负载测试、压力测试的区别
- 由IP和掩码计算广播地址
- MySQL 中一个双引号的错位引发的血案
- openjudge 14:求10000以内n的阶乘
- 2345王牌浏览器九宫格个性化设置
- openvswitch patch port使用方法
- SpringMVC RedirectView的使用以及源码分析
- python爬取公众号,用最简单的方式爬虫
- LeetCode 655. Print Binary Tree (C++)
- A bit of fun: fun with bits[翻译]
- 【FPGA+PWM】基于FPGA的三相PWM整流器移相触发电路的设计与实现
- 【转】iPhone通讯录AddressBook.framework和AddressBookUI.framework的应用
- c#qq群 群号:11069698 欢迎喜欢和爱好c#的朋友加入!
- Android/安卓 文本添加中划线、下划线的方法
- 浅谈String的堆内存和栈内存
- 使用pyecharts绘制各个3D图表代码示例整理和分享
- C语言中的语法错误和语义错误
- 【学生毕业设计】基于web学生信息管理系统网站的设计与实现(13个页面)