【MATLAB】GM(1,1) 灰色预测模型及算法

news2024/12/27 11:43:50

一、灰色预测模型概念

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

二、使用步骤

1.使用条件


这个应该是很清晰的,数据量少,四五个,然后类指数形式增长的,什么是类指数增长:就是一组数据累加后排列是否呈类指数增长,与且预测的时间不是很长,就可以用。 分为GM (1,1),GM (1,m),GM (n,m)分别用于一个自变量一个因变量,多个自变量一个因变量,多个自变量多个因变量。 灰色预测就是尽可能使用数据中含有的信息。 假设你有十组数据,需要预测接下来的三组数据,程序跑完,一般是有求残差的过程,看一看是不是小于0.1,如果每个数据点都是小于0.1,那这次灰色预测就是很好的。

注:

数据量较少的情况下使用;
数据呈类指数增长;
预测时间较短
要先进行级比值检验
后验差比检验
模型拟合检验
模型残差检验

2.以GM(1,1)为例
(1)级比值检验

 

(注:级比值介于区间[0.982,1.0098]时说明数据适合模型构建。)

从上表可知,针对某数据进行GM(1,1)模型构建,结果显示:级比值的最大值为1.010,在适用范围区间[0.982,1.0098]之外,意味着本数据进行GM(1,1)可能得不到满意的模型。但从数据来看,1.01非常接近于1.0098,因此有理由接着进行建模。

(2)后验差比检验

后验差比C值用于模型精度等级检验,该值越小越好,一般C值小于0.35则模型精度等级好,C值小于0.5说明模型精度合格,C值小于0.65说明模型精度基本合格,如果C值大于0.65,则说明模型精度等级不合格。

三、总结

 算法(1)

clc,clear
a = [2.874,3.278,3.337,3.39,3.679];%初始数据
n = length(a); %数据的长度
k=1:n;
k2=1:(n+2);  %【】要预测未来几年的或其他的,改这里,再只改下面b4和b5的n,改成一样的,b5存的就是预测的值
                 %其他都不需要改
               %(n+2)意为预测未来2年的  
%进行累加
b=zeros(1,n);  %对存放累加的矩阵进行初始化
b(1)=a(1);   %累加的第一项
for i=2:n
    b(i)=b(i-1)+a(i);
end

%计算光滑比
b1=zeros(1,n-1); %初始化
for i=1:(n-1)
    b1(i)=a(i+1)/b(i);  %即b1(1) = a(2)/a(1)  b1(2) = a(3)/(a(1)+a(2)) ....
end

c = 0.7;%光滑阈值
count = 0; %计数
for i=1:(n-1)
    if b1(i)<0.6   %这里可以变
    count=count+1;
    end
end
if(count/(n-1))>0.7 %c
    disp('数据是光滑的')
end

%计算模型背景值
b2=zeros(1,n-1);
for i=2:n
    b2(i-1) = 0.5*b(i-1)+0.5*b(i);
end

%计算最小二乘估计
A=[(-b2)',ones(n-1,1)];
Y=a(2:n)'  %a(2:5)指的是取原始数据第2到5个,再进行转置
b3=zeros(2,1);
b3=inv(A'*A)*(A'*Y)  %最终得到两个数a和b

%计算一次累加的预测值
b4=zeros(1,n+2);
b4(1)=b(1);
for i=2:n+2
    b4(i)=(b(1)-b3(2)/b3(1))*exp(-b3(1)*(i-1))+b3(2)/b3(1)
end
  
%最终计算预测值
b5=zeros(1,n+2);
b5(1)=b4(1);
for i=2:n+2
    b5(i)=b4(i)-b4(i-1)
end

scatter(k,a,'r') %画散点图    初始数据
hold on %可使两个图在一个窗口上显示
scatter(k2,b5,'b')    %预测值


    

算法(2)

clc;clear;      %建立符号变量a(发展系数)和b(灰作用量)
syms a b;
c = [a b]';    

A = [1 4 6 9 10 12 21 34





];    %输入需要预测的数据

T1=length(A);
T2=100;                             %输入需要预测数据个数 
t1=1:T1;
t2=1:T1+T2;
n = T1;

m = length(A);
JiBi = ones(1,m-1);
for i =2:m
    JiBi(i-1) = A(i-1)/A(i);
end
max1 = max(JiBi);
min1 = min(JiBi);
FanWei = exp(2/(n+2))-exp(-2/(n+1))
if max1 - min1<FanWei
    disp(['数据通过级别检验']);
else 
    disp(['数据不通过级比检验']);
end

 
%对原始数列 A 做累加得到数列 B
B = cumsum(A);
%对数列 B 做紧邻均值生成
for i = 2:n
    C(i) = (B(i) + B(i - 1))/2; 
end
C(1) = [];
 
%构造数据矩阵 
B = [-C;ones(1,n-1)];
Y = A; Y(1) = []; Y = Y';      %Y进行了转置,C的公式求法与百度文库 发生了一些变化
% 使用最小二乘法计算参数 a(发展系数)和b(灰作用量)
c = inv(B*B')*B*Y;          %核心公式  
c = c';
a = c(1); b = c(2);
disp(['发展系数:',num2str(a)]);
disp(['灰色作用量:',num2str(b)]);
%预测后续数据
F = []; F(1) = A(1);

for i = 2:T1+T2
    F(i) = (A(1)-b/a)*exp(-a*(i-1))+ b/a;
end
%对数列 F 累减还原,得到预测出的数据
G = []; G(1) = A(1);
for i = 2:T1+T2
    G(i) = F(i) - F(i-1); %得到预测出来的数据
end
disp(['预测数据为:',num2str(G)]);
 
%模型检验
H = G(1:T1);
epsilon = A - H;               %计算残差序列
 disp(['残差检验:',num2str(epsilon)]);
%法一:计算相对误差Q
delta = abs(epsilon./A);
Q = mean(delta);
disp(['相对残差Q检验:',num2str(Q)]);

%法二:方差比C检验
C = std(epsilon, 1)/std(A, 1);  %方差函数std   按照列分
disp(['方差比C检验:',num2str(C)]);

%法三:小误差概率P检验
S1 = std(A, 1);
tmp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1);
P = length(tmp)/n;
disp(['小误差概率P检验:',num2str(P)])
%级比偏差和相对残差
check(A)

 
%绘制曲线图
plot(t1, A,'ro'); hold on;
plot(t2, G, 'g-');
grid on;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/789319.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NFT和数字藏品的安全方案解析

一、NFT和数字藏品 01 NFT是什么&#xff1f; NFT 是Non-Fungible Tokens 的缩写&#xff0c;意思是不可互换的代币&#xff0c;它是相对于可互换的代币而言的。不可互换的代币也称为非同质代币。什么是可互换的代币&#xff1f;比如BTC&#xff08;比特币&#xff09;、ETH&…

用i18next使你的应用国际化-React

ref: https://www.i18next.com/ i18next是一个用JavaScript编写的国际化框架。 i18next为您提供了一个完整的解决方案&#xff0c;本地化您的产品从web端到移动端和桌面端。 在react项目中安i18next依赖&#xff1a; i18nextreact-i18nexti18next-browser-languagedetector&…

详细介绍如何使用 PyTorch 和 Lightning 增强医学多标签(人类蛋白质)图像分类-附源码

文末提供免费的原代码下载链接 在医疗诊断这一关键领域,快速、准确的图像分类在帮助医疗保健专业人员的决策中发挥着至关重要的作用。深度学习的出现,加上 PyTorch 等强大的框架,使得应用前沿模型来处理复杂的任务(例如医学多标签图像分类)成为可能。在本次演示中,我们将…

最新基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

logback-spring.xml日志配置文件详解

目录 前言logback-spring.xml 配置 前言 打印日志是一个系统的基本功能&#xff0c;系统出现异常可以通过查找日志弄清楚是什么原因&#xff0c;从而更加快速地定位问题&#xff0c;修复系统。 logback-spring.xml 配置 文件位置 具体配置 <?xml version"1.0"…

Vlan端口隔离(第二十四课)

一、端口隔离 1、端口隔离技术概述 1)端口隔离技术出现背景:为了实现报文之间的二层隔离,可以将不同的端口加入不同的VLAN,但这样会浪费有限的VLAN ID资源。 2)端口隔离的作用:采用端口隔离功能,可以实现同一VLAN内端口之间的隔离。 3)如何实现端口隔离功能:只需要…

Windows如何安装Django及如何创建项目

目录 1、Windows安装Django--pip命令行 2、创建项目 2.1、终端创建项目 2.2、在Pycharm中创建项目 2.3、二者创建的项目有何不同 2.4、项目目录说明 1、Windows安装Django--pip命令行 安装Django有两种方式&#xff1a; pip命令行【推荐--简单】手动安装【稍微复杂一丢丢…

【ruby on rails】M1遇到的一些安装问题

1. homebrew位置变了 原来的Cellar Homebrew Caskroom 都是在 /usr/local/下面 M1在/opt/homebrew下面 2. 装ruby M1电脑安装ruby&#xff0c;装不上的问题 RUBY_CFLAGS"-w" rbenv install 2.7.43. 装puma报错 gem install puma -v 5.5.2 -- --with-openssl-dir…

AtcoderABC311场

A - First ABCA - First ABC 题目大意 需要找到满足条件的最小字符数量。条件是字符串S中出现了A、B和C各至少一次。 思路分析 可以使用一个unordered_set来存储已经出现的字符&#xff0c;每次遍历字符串S时&#xff0c;将字符加入集合中。当集合中的元素数量达到3时&#…

Python元祖及字典小练习

目录 1. 元组 2. 字典 资料获取方法 1. 元组 和list的区别&#xff0c;不能改变元组中的对象&#xff0c;对象里面的值可以修改 元组中包含容器类&#xff08;列表&#xff0c;字典等&#xff09; 如果直接&#xff08;&#xff09;是数学运算&#xff0c; 如果&#xf…

爬虫002_python程序的终端运行_文件运行_ipython的使用---python工作笔记020

用python运行一个文件,就是要写一个.py结尾的文件 然后保存 然后直接cmd中,python 然后写上py文件的路径就可以了 然后看一下内容 看一下终端中运行,直接输入python进入python环境,然后写python代码 回车运行 退出可以用exit()

LiveGBS流媒体平台GB/T28181功能-视频直播流媒体平台分屏展示设备树分组树记录上次分屏播放记录

LiveGBS视频直播流媒体平台分屏展示设备树分组树记录上次分屏播放记录 1、分屏展示1.1、单屏1.2、四分屏1.3、九分屏1.4、十六分屏 2、分屏记录3、搭建GB28181视频直播平台 1、分屏展示 LiveGBS分屏页面支持&#xff0c;多画面播放&#xff0c;支持单屏、四分屏、九分屏、十六…

【无标题】机器学习常识阅读笔记

原博客链接&#xff1a;https://blog.csdn.net/minfanphd/category_12328466.html 总共24篇博客内容&#xff0c;最近两天集种看了一遍。小有收获&#xff0c;了解了一些机器学习的概念。大部分概念原来听过&#xff0c;但是有些概念还是第一次见。比如U-Net&#xff0c;多示例…

使用IDEA打jar包的详细图文教程

1. 点击intellij idea左上角的“File”菜单 -> Project Structure 2. 点击"Artifacts" -> 绿色的"" -> “JAR” -> Empty 3. Name栏填入自定义的名字&#xff0c;Output ditectory 选择 jar 包目标目录&#xff0c;Available Elements 里右击…

vue中预览静态pdf文件

方法 // pdf预览 viewFileCompare() { const pdfUrl "/static/wjbd.pdf"; window.open(pdfUrl); }, // 下载 downloadFile(){ var a document.createElement("a"); a.href "/static/wjbd.pdf"; a.…

王道考研数据结构第二章知识点总结

2.1 线性表的定义和基本操作 2.2.1 顺序表的定义 2.2.1 顺序表的插入删除 注意&#xff1a;插入操作中插入一个元素是从后往前移(从最后一个开始处理)&#xff1b;而删除操作中是从前往后移(从需要删除的后一个开始移)。 2.2.2 顺序表的查找 2.3.1 单链表的定义 2.3.2-1 单链…

CCLINK转profinet网关cclink转modbus

在工业自动化领域&#xff0c;不同品牌的PLC控制系统之间的数据交互是一个重要的问题。比如说&#xff0c;如果我们需要将三菱PLC的数据和西门子PLC的数据进行交互&#xff0c;我们应该如何处理呢&#xff1f;在这方面&#xff0c;捷米的JM-PN-CCLK通讯网关为我们提供了一种解决…

Python中的Cookie模块有什么功能

什么是Cookie Cookie&#xff08;或HTTP Cookie&#xff09;是一小段由Web服务器发送到Web浏览器并保存在用户本地计算机上的数据。它通常用于跟踪和识别用户的会话信息&#xff0c;以提供个性化的用户体验。 Cookie的工作原理 1. 当用户访问一个网站时&#xff0c;服务器会生…

在docker中安装使用达梦数据库

关于在docker中安装达梦数据库&#xff0c;达梦官方网站其实是有提供安装使用方法的&#xff0c;但可能还是有朋友不会&#xff0c;这里将在原文基础上简单扩充下。 注意&#xff1a;docker容器中&#xff0c;数据库安装后没有创建服务的脚本&#xff0c;只有bin、bin2、conf、…

VMWare虚拟机常用操作命令

今日一语&#xff1a;做到所有的细节都不放过&#xff0c;则可以避免99%已知的风险&#xff0c;但大多数都因懒惰而甘愿承受风险&#xff0c;至此悔不当初 查看虚拟机在本机网络的IP ip addr 本地向虚拟机传送文件 scp 文件 rootpath 虚拟机路径 enter后输入密码即可传输&am…