MATLAB实现灰色预测

        久违了,前段时间由于学习压力大,就没怎么更新MATLAB相关的内容,今天实在学不进去了,换个内容更新一下~

        本贴介绍灰色预测模型,这也是数学建模竞赛常见算法中的一员,和许多预测模型一样——底层原理是根据已知数据对未知进行预测~


一.理论部分

        灰色预测是对既含有已知信息又含有不确定信息的系统进行预测,就是对在一定范围内变化的、与时间有关的灰色过程进行预测。 灰色预测对原始数据进行生成处理来寻找系统变动的规律,并生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。
灰色系统理论运用灰色数学处理不确定性量化问题,并充分利用已知信息,寻求系统运动规律。其独特之处在于适用于处理信息匮乏的系统。
灰色生成是通过对原始数据进行特定要求的处理,揭示出数据背后的内在规律。常用的生成方法包括累加生成、累减均值生成和级比生成。
所谓的GM(1,1)模型: Grey(Gray) Model,本质上就是一维层面的预测~
至于模型更底层复杂的数学原理就不展开详解了,大家自行收集资料,此处主要讲解套路~

二.例题讲解

如下是有关棉花生产的数据:

年份单产种子费化肥费农药费机械费灌溉费
kg/公顷/公顷/公顷/公顷/公顷/公顷
19901017106.05495.15305.145.956.1
19911036.5113.55561.45343.868.5593.3
1992792104.55584.8541473.2104.55
1993861132.75658.35453.7582.95107.55
1994901.5174.3904.05625.05114152.1
1995922.5230.41248.75834.45143.85176.4
1996916.5238.21361.55720.75165.15194.25
1997976.5260.11337.4727.65201.9291.75
19981024.5270.61195.8775.5220.5271.35
19991003.5286.21171.8610.95195284.55
20001069.5282.91151.55599.85190.65277.35
20011168.5317.851105.8553.8211.05290.1
20021228.5319.651213.05513.75231.6324.15
20031023368.41274.1567.45239.85331.8
20041144.5466.21527.9487.35408336.15
假设我们不知道2005-2007这三年的单产数据,请你用过去15年的数据来预测这三年的产量。

1.传统GM模型的代码

function [result, x0_hat, relative_residuals, eta] = gm11(x0, predict_num)n = length(x0); x1=cumsum(x0); z1 = (x1(1:end-1) + x1(2:end)) / 2;  y = x0(2:end); x = z1; k = ((n-1)*sum(x.*y)-sum(x)*sum(y))/((n-1)*sum(x.*x)-sum(x)*sum(x));b = (sum(x.*x)*sum(y)-sum(x)*sum(x.*y))/((n-1)*sum(x.*x)-sum(x)*sum(x));a = -k;  x0_hat=zeros(n,1);  x0_hat(1)=x0(1);   for m = 1: n-1x0_hat(m+1) = (1-exp(a))*(x0(1)-b/a)*exp(-a*m);endresult = zeros(predict_num,1);  for i = 1: predict_numresult(i) = (1-exp(a))*(x0(1)-b/a)*exp(-a*(n+i-1)); endabsolute_residuals = x0(2:end) - x0_hat(2:end);   relative_residuals = abs(absolute_residuals) ./ x0(2:end); class_ratio = x0(2:end) ./ x0(1:end-1) ;  eta = abs(1-(1-0.5*a)/(1+0.5*a)*(1./class_ratio));  
end

2.原始数据检验

此处选用【单产】作为示例~

year =[1995:1:2001]';  % 横坐标表示年份,写成列向量的形式(加'就表示转置)
yield= [1017
1036.5
792
861
901.5
922.5
916.5
976.5
1024.5
1003.5
1069.5
1168.5
1228.5
1023
1144.5
]';  %原始数据序列,写成列向量的形式(加'就表示转置)
ERROR = 0;  % 建立一个错误指标,一旦出错就指定为1
% 判断是否有负数元素
if sum(yield<0) > 0 disp('灰色预测的时间序列中不能有负数!')ERROR = 1;
end% 判断数据量是否太少
n = length(yield);  % 计算原始数据的长度
disp(strcat('原始数据的长度为',num2str(n)))    
if n<=3disp('数据量太小')ERROR = 1;
end% 数据太多时提示可考虑使用其他方法
if n>10disp('考虑使用其他的方法')
end% 判断数据是否为列向量,如果输入的是行向量则转置为列向量
if size(yield,1) == 1yield = yield';
end
if size(year,1) == 1year = year';
end

3.准指数规律检验

if ERROR == 0    disp('准指数规律检验')x1 = cumsum(yield);  rho = yield(2:end) ./ x1(1:end-1) ;   rhofigure(2)plot(year(2:end),rho,'o-',[year(2),year(end)],[0.5,0.5],'-'); grid on;text(year(end-1)+0.2,0.55,'临界线')   set(gca,'xtick',year(2:1:end)) xlabel('年份');  ylabel('原始数据的光滑度');  disp(strcat('指标1:光滑比小于0.5的数据占比为',num2str(100*sum(rho<0.5)/(n-1)),'%'))disp(strcat('指标2:除去前两个时期外,光滑比小于0.5的数据占为',num2str(100*sum(rho(3:end)<0.5)/(n-3)),'%'))disp('参考标准:指标1一般要大于60%, 指标2要大于90%!')   Judge = input('你认为可以通过准指数规律的检验吗?可以通过请输入1,不能请输入0:');if Judge == 0disp('灰色预测模型不适合你的数据!')ERROR = 1;end
end

4.传统的GM(1,1)预测

        if n > 7test_num = 3;elsetest_num = 2;endtrain_yield = yield(1:end-test_num);  disp('训练数据是: ')disp(mat2str(train_yield')) test_yield = yield(end-test_num+1:end); disp('试验数据是: ')disp(mat2str(test_yield')) 

 

disp(' ')disp('***下面是传统的GM(1,1)模型预测的详细过程***')result1 = gm11(train_yield, test_num);

5.评估误差精度

    %% 残差检验average_relative_residuals = mean(relative_residuals); disp(strcat('平均相对残差为',num2str(average_relative_residuals)))if average_relative_residuals<0.1disp('该模型对原数据的拟合程度非常不错!')elseif average_relative_residuals<0.2disp('该模型对原数据的拟合程度达到一般要求!')elsedisp('该模型对原数据的拟合程度不太好!')end%% 级比偏差检验average_eta = mean(eta);   % 计算平均级比偏差disp(strcat('平均级比偏差为',num2str(average_eta)))if average_eta<0.1disp('该模型对原数据的拟合程度非常不错!')elseif average_eta<0.2disp('该模型对原数据的拟合程度达到一般要求!')elsedisp('该模型对原数据的拟合程度不太好!')enddisp(' ')

答案如下,大家自己尝试(每个单独预测一遍,因为GM(1,1)只针对一维数据~)

年份单产种子费化肥费农药费机械费灌溉费
kg/公顷/公顷/公顷/公顷/公顷/公顷
20051122449.851703.25555.15402.3358.8
20061276.55371888.5637.2480.75428.4
20071233565.52009.85715.65562.05456.9

 

三.实战案例

1.2022年美赛C题

 

        根据现有数据,通过灰色预测模型,预测比特币和黄金两种波动资产的走向,拟合优度较高,残差与级比偏差均很低,预测模型的可信度较高~

2.2022亚太赛C题

上图是准指数检验~

 通过BP神经网络、多元线性回归以及灰色预测3种方式预测气温变化~结果可信度较高

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

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

相关文章

监控员工上网有什么软件丨三款好用的员工上网管理软件推荐

监控员工上网行为是企业管理中不可或缺的一部分&#xff0c;因此&#xff0c;选择一款好的监控员工上网的软件至关重要。目前市场上存在多种监控员工上网的软件&#xff0c;它们具有各种特点和功能&#xff0c;但企业需要仔细评估和选择。 一、域之盾软件 这是一款优秀的监控员…

利用GenericMenu创建上下文菜单或下拉菜单

使用GenericMenu 创建自定义上下文菜单和下拉菜单丰富自己的编辑器功能。 GenericMenu 介绍 变量 allowDuplicateNames 允许菜单具有多个同名的菜单项。 公共函数 AddDisabledItem 向菜单添加已禁用的项。 AddItem 向菜单添加一个项。 AddSeparator 向菜单添加一个分隔符项…

如何在AppLink配置金蝶云星空预算使用单流程

上一篇有提到金蝶云星空如何通过AppLink平台配置销售订单操作&#xff0c;这次来演示下如何“保存预算使用单”、“调拨单定时自动审核”以及“预算使用单反审核后删除”操作。 根据请求数据保存预算使用单 当webhook接收到数据时触发流程 步骤1&#xff1a;根据webhook的请…

OpenGL YUV 和 RGB 图像相互转换出现的偏色问题怎么解决?

未经作者(微信ID:Byte-Flow)允许,禁止转载 文章首发于公众号:字节流动 早上知识星球里的一位同学,遇到 yuv2rgb 偏色问题,这个问题比较典型,今天展开说一下。 省流版 首先 yuv2rgb 和 rgb2yuv 之间的转换要基于相同的标准,转换使用不同的标准肯定会引起偏色,常见的…

短视频矩阵系统源码搭建部署分享

一、 短视频矩阵系统源码搭建部署分享 目录 一、 短视频矩阵系统源码搭建部署分享 二、短视频矩阵系统搭建功能设计 三、 抖音矩阵号矩阵系统功能设计原则 四、 短视频矩阵开发部分源码展示 很高兴能够帮助您&#xff0c;以下是短视频矩阵系统源码搭建部署分享&#xff1a…

怎么快速卸载office365

怎么快速卸载office365 根据官网提供的两种解决方案即点即用或MSIMicrosoft Store 根据官网提供的两种解决方案 官网地址&#xff1a;https://support.microsoft.com/zh-cn/office/%E4%BB%8E-pc-%E5%8D%B8%E8%BD%BD-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8#OfficeVersio…

智能优化算法 | Matlab实现金豺优化算法(GJO)(内含完整源码)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现金豺优化算法(GJO)(内含完整源码) 源码设计 %%clear clc close SearchAgents_no=30; % Number of search agents Max_iteration=1000

PHP 正则式 全能匹配URL(UBB)

PHP 正则式 全能匹配URL&#xff08;UBB&#xff09; 语言&#xff1a;PHP 注明&#xff1a;正则式 无语言限制&#xff08;js、PHP、JSP、ASP、VB、.net、C#...&#xff09;一切皆可。 简介&#xff1a;PHP UBB 正则式 全能匹配URL 自动加超级链接。网上找了很多都不匹配或…

数字化转型过程中面临最大的问题是什么?如何借助数字化工具实现快速转型?

在科技快速发展的时代&#xff0c;数字化转型已经成为企业的重要战略。当企业努力适应数字化时代并取得成功时&#xff0c;他们可能会面临各种必须有效应对的挑战。   数字化转型不仅仅是将新技术应用到企业的运营中&#xff0c;还需要对企业的运营方式、与客户的互动方式和价…

数字人直播系统开发要注意的陷阱

数字人做为元宇宙的底层基座&#xff0c;BAT都在跑步进场&#xff0c;目前具有前瞻性的公司都在布局数字人产业。数字人可以应用于很多业务场景&#xff0c;对今年来说&#xff0c;无疑数字人直播系统是最火的。像去年数字人直播SAAS系统定制开发的话没有个百把万是下不来的。但…

求臻医学六周年,我们的故事值得被记录

6载光阴求臻医学持续以科技创新推动产业升级在肿瘤精准诊疗领域持续深耕致力于为肿瘤患者生命续航每一位求臻人都是我们前进的力量也是我们不断创新的源泉我们不拘泥于一种声音以多元化的视角探索前行

app小程序定制的重点|软件定制开发|网站搭建

app小程序定制的重点|软件定制开发|网站搭建 App小程序定制开发是近年来快速发展的一项技术服务&#xff0c;随着移动互联网的普及和用户需求的不断升级&#xff0c;越来越多的企业和个人开始关注和需求定制化的小程序开发。那么&#xff0c;对于app小程序定制开发来说&#xf…

【微信小程序】绘制二维码实现及解决canvas层级问题最佳实践

前言 很久没写微信小程序的需求了&#xff0c;今天来活儿要做个二维码扫码相关的需求&#xff0c;本来以为是洒洒水的事情&#xff0c;谁知道也折磨了大半天&#xff0c;今天特此记录一下~ 需求&#xff1a;点击按钮&#xff0c;弹出二维码&#xff0c;二维码内容固定为test …

Dubbo框架

1&#xff1a;简介 Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架 Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题 这是Dubbo官网的介绍&#xff0c;下面是我对这dubbo的理解 首先介绍下什么是RPC&#xff1a; 常…

为什么说品牌低价不是一件好事

消费者货比三价为的是买到低价质优的产品&#xff0c;而网络电商平台的公开&#xff0c;也促进了消费者及品牌进行比价&#xff0c;那品牌低价一定就是好事吗&#xff0c;一定会拉高品牌销量吗。其实是不一定的&#xff0c;低价意味着成本的降低&#xff0c;也可能滋生很多产品…

【精选】改进的YOLOv5:红外遥感图像微型目标的高效识别系统

1.研究背景与意义 随着科技的不断发展&#xff0c;红外遥感技术在军事、安防、环境监测等领域中得到了广泛应用。红外遥感图像具有独特的优势&#xff0c;可以在夜间或恶劣天气条件下获取目标信息&#xff0c;因此在小目标检测方面具有重要的应用价值。然而&#xff0c;由于红…

专注短视频账号矩阵系统源头开发---saas工具

专注短视频账号矩阵系统源头开发---saas营销化工具&#xff0c;目前我们作为一家纯技术开发团队目前已经专注打磨开发这套系统企业版/线下版两个版本的saas营销拓客工具已经3年了&#xff0c;本套系统逻辑主要是从ai智能批量剪辑、账号矩阵全托管发布、私信触单收录、文案ai智能…

微服务实战系列之签名Sign

前言 昨日恰逢“小雪”节气&#xff0c;今日寒风如约而至。清晨的马路上&#xff0c;除了洋洋洒洒的落叶&#xff0c;就是熙熙攘攘的上班族。眼看着&#xff0c;暖冬愈明显了&#xff0c;叶子来不及泛黄就告别了树。变化总是在不经意中发生&#xff0c;容不得半刻糊涂。 上集博…

kubernetes 部署 spinnaker

spinnaker简介 Spinnaker 是一个开源、多云持续交付平台&#xff0c;它将强大而灵活的管道管理系统与主要云提供商的集成相结合。Spinnaker 提供应用程序管理和部署&#xff0c;帮助您快速、自信地发布软件变更。 Spinnaker 提供了两组核心的功能&#xff1a; 应用管理与应用程…

从根到叶:随机森林模型的深入探索

一、说明 在本综合指南中&#xff0c;我们将超越基础知识。当您盯着随机森林模型的文档时&#xff0c;您将不再对“节点杂质”、“加权分数”或“成本复杂性修剪”等术语感到不知所措。相反&#xff0c;我们将剖析每个参数&#xff0c;阐明其作用和影响。通过理论和 Python 实践…