灰色预测GM(1,1)模型及MATLAB实现

2024-02-19 07:40

本文主要是介绍灰色预测GM(1,1)模型及MATLAB实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

因为做毕设开始接触的灰色预测,发表的第一篇小论文也是基于GM(1,1)灰色预测模型的,这一篇主要想详细记录一下灰色理论的基础知识以及分享一下我在毕设中用到的MATLAB代码。如有问题欢迎指正交流(#.#)

灰色预测方法是一种用来对灰色系统进行预测的方法,灰色系统是指信息不完全的一种系统,是一种广泛用于研究少数据、贫信息问题的方法。GM(1,1)预测模型的基本原理是:对某一数据序列使用累加的方法生成一组变化趋势明显的新序列,对新的数据序列建立模型并进行预测,然后利用累减的方法逆向计算,使其恢复为原始序列,以此得出预测模型结果。
GM(1,1)建模过程如下:
设一组原始数列为:

n为数据个数,对x(0)进行一阶累加生成数列:

生成x(1)的紧邻均值数列:

根据灰色系统理论对x(1)建立关于t的白化微分方程GM(1,1):

其中,a是发展系数,b是灰作用量,z(1)(k)是白化背景值,x(0)(k)是灰导数,且

带入n值可得

引入矩阵向量记号:

于是GM(1,1)模型可表示为:

利用最小二乘法可求得a,b的值

对于GM(1,1)的灰微分方程,如果将时刻k=2,3,…,n视为连续变量t,则之前的x(1)视为时间t函数,于是得到GM(1,1)灰微分方程对应的白化微分方程:

解得:

于是得到预测值:

从而可以得到还原预测值:

为确保GM(1,1)建模的实用性,需在预测前对已有的数据进行验证。计算数列的级比:

当计算出来的级比均落在可覆盖区间内时,则可以对数列x(0)建立GM(1,1)模型,并进行灰色预测。可覆盖区间X:

模型的误差检验
对建立的灰色模型进行精度检验方法如下,且预测精度等级对照表如表1所示。
均值:

方差:

残差的均值:

残差的方差:

后验差比值C:

小误差概率P:


MATLAB代码实现:

%建立符号变量a(发展系数)和b(灰作用量)
syms a b;
c = [a b]';%原始数列 A
A=input('请输入原始序列(格式为[1.5, 2.1, 3.3, 4.6, 5.7]): ');
m=input('请输入后续需要预测的数据个数: ');
n = length(A);%对原始数列 A 做累加得到数列 B
B = cumsum(A);%对数列 B 做紧邻均值生成
for i = 2:nC(i) = (B(i) + B(i - 1))/2; 
end
C(1) = [];%构造数据矩阵 
B = [-C;ones(1,n-1)];
Y = A; Y(1) = []; Y = Y';%使用最小二乘法计算参数 a(发展系数)和b(灰作用量)
c = inv(B*B')*B*Y;
c = c';
a = c(1); b = c(2);%预测后续数据
F = []; F(1) = A(1);
for i = 2:(n+m)F(i) = (A(1)-b/a)/exp(a*(i-1))+ b/a;
end%对数列 F 累减还原,得到预测出的数据
G = []; G(1) = A(1);
for i = 2:(n+m)G(i) = F(i) - F(i-1); %得到预测出来的数据
enddisp('预测数据为:');
G%模型检验H = G(1:10);
%计算残差序列
epsilon = A - H;%方差比C检验
C = std(epsilon, 1)/std(A, 1)
if C<0.35disp('系统预测精度好')else if C<0.5disp('系统预测精度合格')else if C<0.65disp('系统预测精度勉强')elsedisp('系统预测精度不合格')endend
end%绘制曲线图
t1 = 0:9;
t2 = 0:(9+m);plot(t1, A,'bo--'); hold on;
plot(t2, G, 'r*-');
xlabel('距瓦斯涌出点距离'); ylabel('瓦斯浓度');
legend('实测瓦斯浓度','预测瓦斯浓度');
title('瓦斯浓度变化曲线');
grid on;

上述程序为当时做毕设时根据我的任务目标来编写的,原始数据个数为10,后续预测数据个数输入为10后得到拟合及预测结果图如下:

根据上述结果分析可得,GM(1,1)模型在本次实验中平均模拟相对误差为2.176%,预测精度良好。

这篇关于灰色预测GM(1,1)模型及MATLAB实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/723981

相关文章

pytorch自动求梯度autograd的实现

《pytorch自动求梯度autograd的实现》autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣... autograd是pytorch构建神经网络的核心。在 PyTorch 中,结合以下代码例子,当你

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入