数学建模--G(1,1)型的灰色预测模型的Python实现

目录

 

  1.算法适用情况

  2.算法推演步骤

  3.算法核心代码

  4.算法效果展示


 1.算法适用情况

#1.灰色预测模型简介
"""
1.灰色预测是对既含有已知信息又含有不确定信息的系统进行预测,就是对在一定范围内变化的、与时间有关的灰色过程进行预测。
2.灰色预测对原始数据进行生成处理来寻找系统变动的规律,并生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。
3.灰色预测模型要求时长尽可能多或者数据尽可能充足,如果数据不足的话灰色预测的效果很差
4.如果数据不足,可以采用普通的时间序列来进行预测
"""

  2.算法推演步骤

#算法步骤如下所示:
#1.生成累加数据集合
#2.计算矩阵B和向量Y
#3.计算结果矩阵U=[a,u] U=(B^T.B)^-1.B^T.Y
#4.建立灰色预测模型函数
#5.灰色预测精度检验
#6.灰色误差检验
#7.可视化绘图

  3.算法核心代码

#1.灰色预测模型简介
"""
1.灰色预测是对既含有已知信息又含有不确定信息的系统进行预测,就是对在一定范围内变化的、与时间有关的灰色过程进行预测。
2.灰色预测对原始数据进行生成处理来寻找系统变动的规律,并生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。
3.灰色预测模型要求时长尽可能多或者数据尽可能充足,如果数据不足的话灰色预测的效果很差
4.如果数据不足,可以采用普通的时间序列来进行预测
"""
#导入必要的库和数据
import math
import numpy as np
import matplotlib.pyplot as plt
# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falsehist_data=[724.57,746.62,778.27,800.8,827.75,871.1,912.37,954.28,995.01,1037.2]
number=len(hist_data)
x0=np.array(hist_data)#1.生成累加数据集合
add_hist_data = [sum(hist_data[0:i+1]) for i in range(number)]
x1 = np.array(add_hist_data)
#2.计算矩阵B和向量Y
#B矩阵是一个number-1行2列的矩阵
#Y向量是一个number-1行1列的矩阵
B=np.zeros([number-1,2])
Y=np.zeros([number-1,1])
#通过for循环计算值
#Y=[x0[1],x0[2],x0[3],.......x0[n-1]]
#B=[[-0.5(x(0)+x(1)),1],.......,[-0.5(x(number)+x(1=number-1)),1]]
for i in range(0,number-1):B[i][0] = -0.5*(x1[i] + x1[i+1])B[i][1] = 1Y[i][0] = x0[i+1]
#3.计算结果矩阵U=[a,u]^T
#U=(B^T.B)^-1.B^T.Y
U=np.linalg.inv(B.T.dot(B)).dot(B.T).dot(Y)
a=U[0][0]
u=U[1][0]
#4.建立灰色预测模型函数
ans=np.zeros(number)
ans[0]=x0[0]
for i in range(1,number):ans[i]=(x0[0]-u/a)*(1-math.exp(a))*math.exp(-a*(i))
#5.灰色预测精度检验
#5.1.残差平均值+残差平方
#残差平均值
aver0=0
for i in range(number):aver0+=(x0[i]-ans[i])
aver0=aver0/number
#残差平方
s0 = 0;       
for i in range(0,number):s0 += ((x0[i] - ans[i]) - aver0)**2;
s0 /= number#5.2.历史数据平均值+历史数据方差
aver1=0
S1=0
for i in range(number):aver1+=(x0[i])
aver1=aver1/number
for i in range(number):S1+= (x0[i]-aver1)**2;
S1 /= number
#5.3.后验差比值
C=s0/S1
#5.4.小误差概率P
sum=0
for i in range(number):if abs(x0[i]-ans[i]-aver0)<0.6754*math.sqrt(S1):sum=sum+1else:sum=sum
p=sum/number
#6.灰色误差检验
ANS=0
if(C<0.35 and p>0.95):#预测效果不错ANS=1m=20answer=np.zeros(m)for i in range(m):answer[i]=(x0[0]-u/a)*(1-math.exp(a))*math.exp(-a*(i+number))
else:ANS=0print("关联性不强,灰色预测法不可用!")
#7.可视化绘图
if ANS == 1:for i in range(m):print("预测第",i+1,"年的数据是:",answer[i])x=[]y=[]for i in range(m):x.append(i+1)y.append(answer[i]) plt.bar(x,y,color='r')plt.xlabel("预测时间变化",color='b')plt.ylabel("预测产量变化",color='b')plt.title("G(1,1)灰色预测模型下20年产量的预测情况",color='b')plt.savefig('C:/Users/Zeng Zhong Yan/Desktop/灰度预测模型.png', dpi=200, bbox_inches='tight')plt.show()

  4.算法效果展示

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

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

相关文章

python 之import与from import 导入库的解析与差异

文章目录 1. **使用import导入整个模块**&#xff1a;2. **使用from import导入特定内容**&#xff1a;注意事项别名的使用 在Python中&#xff0c;import和from import是用于导入模块中内容的两种不同方式。下面详细介绍它们的用法和差异&#xff1a; 1. 使用import导入整个模…

java基础-----第九篇

系列文章目录 文章目录 系列文章目录前言一、GC如何判断对象可以被回收前言 一、GC如何判断对象可以被回收 引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计 数为0时可以回收, 可达性分析法:从 GC Roots 开始向下搜索,搜索所走过的…

htmx-使HTML更强大

‍本文作者是360奇舞团开发工程师 htmx 让我们先来看一段俳句: javascript fatigue: longing for a hypertext already in hand 这个俳句很有意思&#xff0c;是开源项目htmx文档中写的&#xff0c;意思是说&#xff0c;我们已经有了超文本&#xff0c;为什么还要去使用javascr…

Win7系统电脑开机总出现硬盘自检的简单解决方法

你是不是经常会遇到电脑开机进行硬盘自检&#xff0c;而且每次开机都检查很久不能跳过&#xff1b;怎么才能跳过这一步骤呢&#xff1f;下面教大家如何让Win7系统电脑在开机的时候跳过硬盘自检这一步骤&#xff0c;加快开机时间。 解决步骤&#xff1a; 1、按下“Win R”快捷键…

Java【手撕滑动窗口】LeetCode 438. “字符串中所有异位词“, 图文详解思路分析 + 代码

文章目录 前言一、字符串中所有异位词1, 题目2, 思路分析2.1, 引入哈希表找出异位词2.2, 引入变量记录"有效字符的个数"2.3, left 右移维护窗口2.4, 总结核心步骤 3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; Ja…

弹性盒子的使用

一、定义 弹性盒子是一种用于按照布局元素的一维布局方法&#xff0c;它可以简便、完整、响应式地实现各种页面布局。 容器中存在两条轴&#xff0c;主轴和交叉轴(相当于我们坐标轴的x轴和y轴)。我们可以通过flex-direction来决定主轴的方向。 主轴&#xff08;main axis&am…

运维自动化与Cobbler服务部署

运维自动化与Cobbler服务部署 一.Cobbler简介 1.1.简介 Cobbler是一款Linux生态的自动化运维工具&#xff0c;基于Python2开发&#xff0c;用于自动化批量部署安装操作系 统&#xff1b;其提供基于CLI的管理方式和WEB配置界面&#xff0c;其中WEB配置界面是基于Python2和Djang…

Linux查看是虚拟机还是物理机

第一种方式&#xff1a;dmesg命令 [roottest ~]# dmesg | grep -i hypervisor [ 0.000000] Hypervisor detected: VMware [ 0.001000] TSC freq read from hypervisor : 2903.999 MHz [ 6.311621] [drm] Max dedicated hypervisor surface memory is 0 kiB第二种方式…

K8S Nginx Ingress实现金丝雀发布

通过给 Ingress 资源指定 Nginx Ingress 所支持的 annotation 可实现金丝雀发布。 需给服务创建2个 Ingress&#xff0c;其中1个常规 Ingress&#xff0c;另1个为带 nginx.ingress.kubernetes.io/canary: "true" 固定的 annotation 的 Ingress&#xff0c;称为 Cana…

美团 Flink 资源调度优化实践

摘要&#xff1a;本文整理自美团数据平台计算引擎组工程师冯斐&#xff0c;在 Flink Forward Asia 2022 生产实践专场的分享。本篇内容主要分为四个部分&#xff1a; 相关背景和问题解决思路分析资源调度优化实践后续规划 点击查看原文视频 & 演讲PPT 一、相关背景和问题 在…

【Spring Boot】使用XML配置文件实现数据库操作(一)

使用XML配置文件实现数据库操作&#xff08;一&#xff09; 1.SQL映射文件 SQL映射文件就是我们通常说的mapper.xml配置文件&#xff0c;主要实现SQL语句的配置和映射&#xff0c;同时实现Java的POJO对象与数据库中的表和字段进行映射关联的功能。 1.1 mapper.xml的结构 下…

100天精通Python(可视化篇)——第99天:Pyecharts绘制多种炫酷K线图参数说明+代码实战

文章目录 专栏导读一、K线图介绍1. 说明2. 应用场景 二、配置说明三、K线图实战1. 普通k线图2. 添加辅助线3. k线图鼠标缩放4. 添加数据缩放滑块5. K线周期图表 书籍推荐 专栏导读 &#x1f525;&#x1f525;本文已收录于《100天精通Python从入门到就业》&#xff1a;本专栏专…

Unity中Shader的混合模式Blend

文章目录 前言一、混合的作用就是实现各种半透明效果二、混合操作三、在 Shader 中暴露两个属性 来调节 混合的效果 前言 Unity中Shader的混合模式Blend 一、混合的作用就是实现各种半透明效果 这里用PS里的混合作为例子 没选择混合效果前&#xff0c;显示的效果是这样 选择…

基于 Zookeeper 实现服务注册和服务发现

文章目录 前言声明前置知识服务注册和发现Zookeeper 工作原理实现过程注册中心服务注册服务发现 总结 前言 无论是采用SOA还是微服务架构&#xff0c;都需要使用服务注册和服务发现组件。我刚开始接触 Dubbo 时一直对服务注册/发现以及 Zookeeper 的作用感到困惑&#xff0c;现…

React 18 对 state 进行保留和重置

参考文章 对 state 进行保留和重置 各个组件的 state 是各自独立的。根据组件在 UI 树中的位置&#xff0c;React 可以跟踪哪些 state 属于哪个组件。可以控制在重新渲染过程中何时对 state 进行保留和重置。 UI 树 浏览器使用许多树形结构来为 UI 建立模型。DOM 用于表示 …

解决Linux Ubuntu上安装RabbitMQ服务后的公网远程访问问题,借助cpolar内网穿透技术

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…

软件产品确认测试鉴定测试

软件产品确认测试 确认测试也称鉴定测试&#xff0c;即验证软件的功能、性能及其它特性是否与用户的要求一致。软件确认测试是在模拟的环境下&#xff0c;验证软件是否满足需求规格说明书列出的需求。为此&#xff0c;需要首先制定测试计划&#xff0c;规定要做测试的种类&…

Pinely Round 2 (Div. 1 + Div. 2) F. Divide, XOR, and Conquer(区间dp)

题目 给定长为n(n<1e4)的数组&#xff0c;第i个数为ai(0<ai<2的60次方) 初始时&#xff0c;区间为[1,n]&#xff0c;也即l1&#xff0c;rn&#xff0c; 你可以在[l,r)中指定一个k&#xff0c;将区间分成左半边[l,k]、右半边[k1,r] 1. 如果左半边异或和与异或和的异…

分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测

分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测 目录 分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测分类效果基本介绍模型描述预测过程程序设计参考资料分类效果 基本介绍 MATLAB实现GRNN广义回归神经网络多特

自建音乐服务器Navidrome之一

这里写自定义目录标题 1.1 官方网站 2. Navidrome 简介2.1 简介2.2 特性 3. 准备工作4. 视频教程5. 界面演示5.1 初始化页5.2 专辑页 前言 之前给大家介绍过 Koel 音频流服务&#xff0c;就是为了解决大家的这个问题&#xff1a;下载下来的音乐&#xff0c;只能在本机欣赏&…