「 数学模型 」“灰色预测GM(1,1)模型原理及Matlab实例”讲解
一、前言
小白将使用的灰色预测模型的Matlab代码贴在下面,代码使用了灰色模型进行两次回归预测,缺点是精度不高,预测后的残差有点大。
灰色预测模型主要内容:
- GM(1,1)模型(1阶1个影响因素);
- 离散灰色模型(解决GM(1,1)中的理论缺陷);
- GM(1,N)模型(多个变量影响);
- GM(n,h)模型(多个变量高阶影响);
- 多变量离散灰色模型(解决GM(n,h)中的理论缺陷);
二、模型原理
1. GM(1,1)模型内容
差分方程;
取均值作中间状态,减少误差;——背景值
微分方程——影子方程
根据已知数据,通过软件求出a,b参数后,需要通过关联度来判断预测方程的准确程度,如下例:
2. 灰色预测模型扩展及应用
(1)灰色预测模型扩展
1)残差GM(1,1)模型
数据选取太长时,会出现估计不准情况,所以引申出残差模型。
之所以选择时间分段,很可能是因为数据选择过长,而这一长段数据不能用同一模型描述,出现模型分段现象。这时使用CM(1,1)残差模型可增加数据预测的准确性。
这也是灰度预测模型的难点之一:到底选取多少个数据是准确的。(通常选取4个或5个,但很难准确确定某个数)
2)GM(1,1)模型群
(2)GM(1,1)模型应用:数列预测、区间预测(比例带/包络带/发展带)、灾变预测、波形预测。
1)区间预测——比例带:
2)区间预测——包络带:
3)区间预测——发展带:
4)灾变预测
灾变预测实质上是异常值预测,主要是给出下一个或几个异常值出现的时刻,以便人们提前准备,采取对策。
上灾变序列和下灾变序列统称灾变序列。灾变预测就是通过对灾变序列的研究,寻找其规律性,预测以后若干次灾变发生的日期。实例:
然后进行GM(1,1)建模,预测下一个灾害年份。
5)波形预测
当原始数据频频波动且摆动幅度较大时,往往难以找到合适的模拟模型,因此可以考虑根据原始数据的波形预测未来行为数据发展变化的波形。思想是:找出等高线。
3. 灰色预测中的累加生成建模思想
灰色预测模型通过数据处理来分析和对待随机量,即通过数据到数据的“映射”、时间序列到时间序列的“映射”来处理和发现规律。通过映射把原来存在扰动项的微分相互抵消掉。右边图示是处理后的结果,可以看出数据的明显变化趋势。
三、Matlab代码实例
%二次拟合预测GM(1,1)模型
%预测数据x=[x1,x2,x3,x4]; %x[]为输入数组
sizexd2 = size(x,2);
%求数组长度
k=0;
for y1=xk=k+1;if k>1x1(k)=x1(k-1)+x(k);%累加生成z1(k-1)=-0.5*(x1(k)+x1(k-1));%z1维数减1,用于计算Byn1(k-1)=x(k);elsex1(k)=x(k);end
end
%x1,z1,k,yn1
sizez1=size(z1,2);
%size(yn1);
z2 = z1';
z3 = ones(1,sizez1)';
YN = yn1'; %转置
%YN
B=[z2 z3];
au0=inv(B'*B)*B'*YN;
au = au0';
%B,au0,au
afor = au(1);
ufor = au(2);
ua = au(2)./au(1);
%afor,ufor,ua?
%输出预测的? a u 和 u/a的值
constant1 = x(1)-ua;
afor1 = -afor;
x1t1 = 'x1(t+1)';
estr = 'exp';
tstr = 't';
leftbra = '(';
rightbra = ')';
%constant1,afor1,x1t1,estr,tstr,leftbra,rightbra
strcat(x1t1,'=',num2str(constant1),estr,leftbra,num2str(afor1),tstr,rightbra,'+',leftbra,num2str(ua),rightbra)
%输出时间响应方程
%******************************************************
%二次拟合
k2 = 0;
for y2 = x1k2 = k2 + 1;if k2 > kelseze1(k2) = exp(-(k2-1)*afor);end
end
%ze1
sizeze1 = size(ze1,2);
z4 = ones(1,sizeze1)';
G=[ze1' z4];
X1 = x1';
au20=inv(G'*G)*G'*X1;
au2 = au20';
%z4,X1,G,au20
Aval = au2(1);
Bval = au2(2);
%Aval,Bval
%输出预测的? A,B的值
strcat(x1t1,'=',num2str(Aval),estr,leftbra,num2str(afor1),tstr,rightbra,'+',leftbra,num2str(Bval),rightbra)
%输出时间响应方程
nfinal = sizexd2-1 + 1;
%决定预测的步骤数5? 这个步骤可以通过函数传入
%nfinal = sizexd2 - 1 + 1;
%预测的步骤数 1
for k3=1:nfinalx3fcast(k3) = constant1*exp(afor1*k3)+ua;
end
%x3fcast
%一次拟合累加值
for k31=nfinal:-1:0if k31>1x31fcast(k31+1) = x3fcast(k31)-x3fcast(k31-1);elseif k31>0x31fcast(k31+1) = x3fcast(k31)-x(1);elsex31fcast(k31+1) = x(1);endendend
x31fcast
%一次拟合预测值for k4=1:nfinalx4fcast(k4) = Aval*exp(afor1*k4)+Bval;
end
%x4fcast
for k41=nfinal:-1:0if k41>1x41fcast(k41+1) = x4fcast(k41)-x4fcast(k41-1);elseif k41>0x41fcast(k41+1) = x4fcast(k41)-x(1);elsex41fcast(k41+1) = x(1);endendend
x41fcast,x
%二次拟合预测值
%***精度检验p C************//
k5 = 0;
for y5 = xk5 = k5 + 1;if k5 > sizexd2elseerr1(k5) = x(k5) - x41fcast(k5);end
end
%err1
%绝对误差xavg = mean(x);
%xavg
%x平均值
err1avg = mean(err1);
%err1avg
%err1平均值
k5 = 0;
s1total = 0 ;
for y5 = xk5 = k5 + 1;if k5 > sizexd2elses1total = s1total + (x(k5) - xavg)^2;end
end
s1suqare = s1total ./ sizexd2;
s1sqrt = sqrt(s1suqare);
%s1suqare,s1sqrt
%s1suqare? 残差数列x的方差? s1sqrt 为x方差的平方根S1
k5 = 0;
s2total = 0 ;
for y5 = xk5 = k5 + 1;if k5 > sizexd2elses2total = s2total + (err1(k5) - err1avg)^2;end
end
s2suqare = s2total ./ sizexd2;
%s2suqare?? 残差数列err1的方差S2
Cval = sqrt(s2suqare ./ s1suqare);
Cval
%nnn = 0.6745 * s1sqrt
%Cval? C检验值
k5 = 0;
pnum = 0 ;
for y5 = xk5 = k5 + 1;if abs( err1(k5) - err1avg ) < 0.6745 * s1sqrtpnum = pnum + 1;%ppp = abs( err1(k5) - err1avg )?????elseend
end
pval = pnum ./ sizexd2;
pval
%p检验值
%arr1 = x41fcast(1:6)
%预测结果为区间范围? 预测步长和数据长度可调整程序参数进行改进%二次拟合预测GM(1,1)模型
%预测数据x=[4,5,6,7]; %写入的数据
sizexd2 = size(x,2);
%求数组长度
k=0;
for y1=xk=k+1;if k>1x1(k)=x1(k-1)+x(k);%累加生成z1(k-1)=-0.5*(x1(k)+x1(k-1));%z1维数减1,用于计算Byn1(k-1)=x(k);elsex1(k)=x(k);end
end
%x1,z1,k,yn1
sizez1=size(z1,2);
%size(yn1);
z2 = z1';
z3 = ones(1,sizez1)';
YN = yn1'; %转置
%YN
B=[z2 z3];
au0=inv(B'*B)*B'*YN;
au = au0';
%B,au0,au
afor = au(1);
ufor = au(2);
ua = au(2)./au(1);
%afor,ufor,ua?
%输出预测的? a u 和 u/a的值
constant1 = x(1)-ua;
afor1 = -afor;
x1t1 = 'x1(t+1)';
estr = 'exp';
tstr = 't';
leftbra = '(';
rightbra = ')';
%constant1,afor1,x1t1,estr,tstr,leftbra,rightbra
strcat(x1t1,'=',num2str(constant1),estr,leftbra,num2str(afor1),tstr,rightbra,'+',leftbra,num2str(ua),rightbra)
%输出时间响应方程
%******************************************************
%二次拟合
k2 = 0;
for y2 = x1k2 = k2 + 1;if k2 > kelseze1(k2) = exp(-(k2-1)*afor);end
end
%ze1
sizeze1 = size(ze1,2);
z4 = ones(1,sizeze1)';
G=[ze1' z4];
X1 = x1';
au20=inv(G'*G)*G'*X1;
au2 = au20';
%z4,X1,G,au20
Aval = au2(1);
Bval = au2(2);
%Aval,Bval
%输出预测的? A,B的值
strcat(x1t1,'=',num2str(Aval),estr,leftbra,num2str(afor1),tstr,rightbra,'+',leftbra,num2str(Bval),rightbra)
%输出时间响应方程
nfinal = sizexd2-1 + 1;
%决定预测的步骤数5? 这个步骤可以通过函数传入
%nfinal = sizexd2 - 1 + 1;
%预测的步骤数 1
for k3=1:nfinalx3fcast(k3) = constant1*exp(afor1*k3)+ua;
end
%x3fcast
%一次拟合累加值
for k31=nfinal:-1:0if k31>1x31fcast(k31+1) = x3fcast(k31)-x3fcast(k31-1);elseif k31>0x31fcast(k31+1) = x3fcast(k31)-x(1);elsex31fcast(k31+1) = x(1);endendend
x31fcast
%一次拟合预测值for k4=1:nfinalx4fcast(k4) = Aval*exp(afor1*k4)+Bval;
end
%x4fcast
for k41=nfinal:-1:0if k41>1x41fcast(k41+1) = x4fcast(k41)-x4fcast(k41-1);elseif k41>0x41fcast(k41+1) = x4fcast(k41)-x(1);elsex41fcast(k41+1) = x(1);endendend
x41fcast,x
%二次拟合预测值
%***精度检验p C************//
k5 = 0;
for y5 = xk5 = k5 + 1;if k5 > sizexd2elseerr1(k5) = x(k5) - x41fcast(k5);end
end
%err1
%绝对误差xavg = mean(x);
%xavg
%x平均值
err1avg = mean(err1);
%err1avg
%err1平均值
k5 = 0;
s1total = 0 ;
for y5 = xk5 = k5 + 1;if k5 > sizexd2elses1total = s1total + (x(k5) - xavg)^2;end
end
s1suqare = s1total ./ sizexd2;
s1sqrt = sqrt(s1suqare);
%s1suqare,s1sqrt
%s1suqare? 残差数列x的方差? s1sqrt 为x方差的平方根S1
k5 = 0;
s2total = 0 ;
for y5 = xk5 = k5 + 1;if k5 > sizexd2elses2total = s2total + (err1(k5) - err1avg)^2;end
end
s2suqare = s2total ./ sizexd2;
%s2suqare?? 残差数列err1的方差S2
Cval = sqrt(s2suqare ./ s1suqare);
Cval
%nnn = 0.6745 * s1sqrt
%Cval? C检验值
k5 = 0;
pnum = 0 ;
for y5 = xk5 = k5 + 1;if abs( err1(k5) - err1avg ) < 0.6745 * s1sqrtpnum = pnum + 1;%ppp = abs( err1(k5) - err1avg )?????elseend
end
pval = pnum ./ sizexd2;
pval
%p检验值
%arr1 = x41fcast(1:6)
%预测步长和数据长度可调整程序参数进行改进
「 数学模型 」“灰色预测GM(1,1)模型原理及Matlab实例”讲解相关推荐
- python灰色模型代码_python 实现 灰色预测 GM(1,1)模型 灰色系统 预测 灰色预测公式推导...
来源公式推导连接 关键词:灰色预测 python 实现 灰色预测 GM(1,1)模型 灰色系统 预测 灰色预测公式推导 一.前言 本文的目的是用Python和类对灰色预测进行封装 二.原理简述 1.灰 ...
- python灰色预测_python 实现 灰色预测 GM(1,1)模型 灰色系统 预测 灰色预测公式推导...
关键词:灰色预测 python 实现 灰色预测 GM(1,1)模型 灰色系统 预测 灰色预测公式推导 一.前言 本文的目的是用Python和类对灰色预测进行封装 二.原理简述 1.灰色预测概述 灰色预 ...
- 灰色预测GM(1,1)模型的java实现代码
@TOC 灰色预测模型 本文以灰色预测GM(1,1)模型为主体,利用java代码实现灰色预测. 实现代码 public class GreyModel {//原始数组的个数private int si ...
- 灰色预测GM(1,1)模型
目录 简介 数学模型 分析步骤 对数据进行准指数规律检验 对预测效果进行评价 GM(1,1)模型拓展 MATLAB源码 简介 在这里,灰色的意思是系统的信息只有一部分,不完整,与之类似概念还有白色和黑 ...
- 灰色预测GM(1,n)模型_python
灰色系统理论及其应用系列博文: 一.灰色关联度分析法(GRA)_python 二.灰色预测模型GM(1,1) 三.灰色预测模型GM(1,n) 四.灰色预测算法改进1-背景值Z 五.灰色预测改进2-三角 ...
- 灰色关联以及灰色预测GM(1,n),GM(1,1)模型(Python实现)
**灰色关联以及灰色预测GM(1,n),GM(1,1)模型** 简介:本篇文章简单的介绍灰色关联以及灰色预测模型,使用python代码进行实现. 1. 灰色系统的概论 2. 关于灰色关联度那些事 3. ...
- python灰色预测_灰色系统预测GM(1,1)模型
预备知识 (1)灰色系统 白色系统是指系统内部特征是完全已知的:黑色系统是指系统内部信息完全未知的:而灰色系统是介于白色系统和黑色系统之间的一种系统,灰色系统其内部一部分信息已知,另一部分信息未知或不 ...
- 《灰色预测(GM)的MATLAB实现》
一. 灰色模型GM(1,1) 1. 问题 2. 分析 3. MATLAB实现源代码 4. MATLAB绘制的曲线图 二. 灰色Verhulst模型(即Logistic模型) 1. 问题 2. 分析 3 ...
- 灰色预测GM(1,1)代码
目录 1.一项初始序列X0 2.累加序列,生成新序列 3.紧邻均值生成序列 4.求相关参数 5.由第四步求出参数 6.生成预测模型 7.累减还原,得原始数列的灰色预测值 8.模型检验 9.可视化 结果 ...
最新文章
- java迭代器在哪个包里面,java.util.LinkedList.listIterator()方法实例
- string转成对象_JAVA学习分享[008]——面向对象深化(一)
- Android布局中的空格以及占一个汉字宽度的空格的实现
- pythonsklearn多元回归回归_用sklearn进行多元线性回归
- C语言循环为1404的循环,考试,求大神帮忙,C语言,小弟感激不尽
- IDEA中中文乱码问题解决方案
- php email,两种PHP邮件发送的方式
- Spring Boot学习总结(20)——提升开发效率之热部署
- 如何做到24小时监控某个网页,在网页变化或者更新的时候第一时间接到通知
- HTTPS 防劫持攻击
- PR视频转场预设 10个快节奏极限运动空间扭曲效果PR转场过渡预设
- android图片花,Android中使用Canvas绘制南丁格尔玫瑰图(Nightingale rose diagram)
- java web实战宝典李宁,《Java Web编程实战宝典》李宁,刘岩,张国平著【摘要 书评 在线阅读】-苏宁易购图书...
- (十二)c#Winform自定义控件-分页控件
- 关于环信客服的集成与使用
- 解决屏保时间过短的问题(电脑息屏过快)
- 怎样让你的软文更有说服力?四个办法帮你赢得用户信任
- 虚幻4和Unity3D应该学哪个? 1
- CES 2017媒体日:VR AR波澜不惊,无人驾驶和智能家居大放异彩
- 计算机在我们生活中有哪些应用,计算机在生活中的应用有哪些?
热门文章
- Web前端的学习与应用
- Windows——查进程端口、杀进程端口详细说明
- 漫谈农业物联网与互联网技术的结合
- 02.视频播放器整体结构
- [转载]Oracle的几个概念:数据库名,全局数据库名,SID,实例,命名空间,schema
- Vue3下PostCSS Loader has been initialized using an options that does not match the API schema的问题解决
- 硬盘数据毁尸灭迹的方法
- Linux基础篇大集合
- 模仿input闪烁光标
- 建站WordPress