MATLAB灰色预测

一.灰色预测

1.灰色系统下的灰色预测

<1>什么是灰色系统?

所谓的灰色系统其实就是夹杂在白色系统和黑色系统之中的一种系统,而白色系统就是全部信息已知的系统黑色系统就是全部信息未知的系统。所以,夹在这两种系统中间的灰色系统就是部分信息已知,而部分信息也是未知的系统。

<2>什么是灰色预测?

灰色预测就是在灰色系统中所作的预测。灰色预测就是在部分信息已知,而部分信息也是未知的前提下做的一种预测分析。灰色预测通过鉴别个因素之间的差异程度,进行关联分析,对原始数据处理后生成一定规律性的序列,然后建立相应的微分方程模型,从而预测事物未来的发展趋势最后得到其发展的模型

2.如何实现灰色预测GM(1,1)

<1>了解灰色生成

①累加生成: 通过数列间各时刻数据的依个累加以得到新的数据与数列。
(最开始看的时候我还不信累加生成能增强数据规律性所以我用MATLAB画了个图,对于[6 3 8 10 7]这组数据好像确实累加后规律更明显,累加后的数列呈指数增长趋势
在这里插入图片描述
②累减生成: 将原始序列前后两个数据相减得到累减生成序列。(将累加的数据累减就得到原始序列)
③均值生成: 将前后两个数据相加在除以2得到均值生成序列。

<2>实现GM(1,1)——一阶微分方程,且只含一个变量的灰色模型

原始序列
x(0)=(x(0)(1),x(0)(2),x(0)(3),...,x(0)(n))x^{(0)}=(x^{(0)}(1),x^{(0)}(2),x^{(0)}(3),...,x^{(0)}(n))x(0)=(x(0)(1),x(0)(2),x(0)(3),...,x(0)(n))
先累加操作得到序列
x(1)=(x(1)(1),x(1)(2),x(1)(3),...,x(1)(n))x^{(1)}=(x^{(1)}(1),x^{(1)}(2),x^{(1)}(3),...,x^{(1)}(n))x(1)=(x(1)(1),x(1)(2),x(1)(3),...,x(1)(n))x(1)(t)=∑k=1tx(1)(k)x^{(1)}(t)=\sum_{k=1}^{t}x^{(1)}(k)x(1)(t)=k=1tx(1)(k)

然后均值操作累加生成的数列

z(1)=(z(1)(2),z(1)(3),...,z(1)(n))z^{(1)}=(z^{(1)}(2),z^{(1)}(3),...,z^{(1)}(n))z(1)=(z(1)(2),z(1)(3),...,z(1)(n))z(1)(k)=0.5x(1)(k)+0.5x(1)(k)z^{(1)}(k)=0.5x^{(1)}(k)+0.5x^{(1)}(k)z(1)(k)=0.5x(1)(k)+0.5x(1)(k)
对累加生成序列建立微分方程——白化微分方程(这里要说一下因为刚刚提过累加后的数列呈指数增长,所以可以用指数函数进行拟合所以建立如下微分方程)如下微分方程用数学知识求得明显为指数关系
dx(1)dt+ax(1)=b\frac{dx^{(1)}}{dt}+ax^{(1)}=bdtdx(1)+ax(1)=b
然后建立灰微分方程这里是知乎网友解释的建立过程
x(0)(k)+az(1)(k)=bx^{(0)}(k)+az^{(1)}(k)=bx(0)(k)+az(1)(k)=b
aaa为发展系数,bbb为灰色作用量
根据最小二乘法求aaabbb其中a^\hat{a}a^=[aaa;bbb]
在这里插入图片描述
求解刚刚建立的白化微分方程
x(1)(t)=(x(1)(0)−ba)e−at+bax^{(1)}(t)=(x^{(1)}(0)-\frac{b}{a})e^{-at}+\frac{b}{a}x(1)(t)=(x(1)(0)ab)eat+ab
x(1)(0)=x(0)(1)x^{(1)}(0)=x^{(0)}(1)x(1)(0)=x(0)(1),则
x(1)(k+1)=(x(0)(1)−ba)e−ak+bax^{(1)}(k+1)=(x^{(0)}(1)-\frac{b}{a})e^{-ak}+\frac{b}{a}x(1)(k+1)=(x(0)(1)ab)eak+abk=1,2,3,⋯,n−1k=1,2,3,\cdots,n-1k=123,,n1

最后累减还原即为预测方程x(0)(k+1)=x(1)(k+1)−x(1)(k)=(x(0)(1)−ba)(1−ea)e−akx^{(0)}(k+1)=x^{(1)}(k+1)-x^{(1)}(k)=(x^{(0)}(1)-\frac{b}{a})(1-e^a)e^{-ak}x(0)(k+1)=x(1)(k+1)x(1)(k)=(x(0)(1)ab)(1ea)eakk=1,2,3,⋯,n−1k=1,2,3,\cdots,n-1k=123,,n1
注意:①原始序列数据不一定要全部使用,相应建立的模型也会不同,即aaabbb不同。②原始序列数据必须要等时间间隔、不间断。

<3>灰色模型检验

① 计算x(0)(t)x^{(0)}(t)x(0)(t)x^(0)(t)\hat{x}^{(0)}(t)x^(0)(t)之间的残差e(0)(t)e^{(0)}(t)e(0)(t)和相对误差q(x)q(x)q(x)
e(0)(t)=x(0)(t)−x^(0)(t)e^{(0)}(t)=x^{(0)}(t)-\hat{x}^{(0)}(t)e(0)(t)=x(0)(t)x^(0)(t)q(x)=e(0)(t)x(0)(t)q(x)=\frac{e^{(0)}(t)}{x^{(0)}(t)}q(x)=x(0)(t)e(0)(t)
② 求原始数据的均值x0x^0x0以及方差s1s_1s1
③ 求e(0)(t)e^{(0)}(t)e(0)(t)的平均值qˉ\bar{q}qˉ以及残差的方差s2s_2s2
④ 计算方差比C=s2s1C=\frac{s_2}{s_1}C=s1s2
⑤ 求小误差概率P=P(∣e(t)∣<0.6745s1)P=P({|e(t)|<0.6745s_1})P=P(e(t)<0.6745s1)
⑥ 灰色精度检验如下表

等级相对误差qqq方差比CCC小误差概率PPP
ⅠⅠ<0.01<0.01<0.01<0.35<0.35<0.35>0.95>0.95>0.95
ⅡⅡ<0.05<0.05<0.05<0.50<0.50<0.50<0.80<0.80<0.80
ⅢⅢ<0.10<0.10<0.10<0.65<0.65<0.65<0.70<0.70<0.70
ⅣⅣ>0.20>0.20>0.20>0.80>0.80>0.80<0.60<0.60<0.60

在实际应用的过程中,检验模型精度的方法并不唯一。可以利用上述方法进行模型的检验,也可以根据q(x)q(x)q(x)的误差百分比进行结合预测数据与实际数据之间的测试结果酌情认定模型是否合理。

<4>利用灰色模型预测

x^(0)\hat{x}^{(0)}x^(0)= [x^(0)(1),x^(0)(2),⋯,x^(0)(n)⏟原数列的模拟,x^(0)(n+1),x^(0)(n+2),⋯,x^(0)(n+m)⏟未来数列的预测][ \begin{matrix} \underbrace{\hat{x}^{(0)}(1),\hat{x}^{(0)}(2),\cdots,\hat{x}^{(0)}(n)} \\ 原数列的模拟 \end{matrix},\begin{matrix} \underbrace{\hat{x}^{(0)}(n+1),\hat{x}^{(0)}(n+2),\cdots,\hat{x}^{(0)}(n+m)} \\ 未来数列的预测\end{matrix} ][x^(0)(1),x^(0)(2),,x^(0)(n),x^(0)(n+1),x^(0)(n+2),,x^(0)(n+m)]

二.灰色预测例子及代码

1.长江污水排放预测

在这里插入图片描述
请以上表的数据为依据,预测2005-2014年长江的污水排放量(单位:亿吨)。

2.长江污水排放预测MATLAB代码

%2020/2/14,灰色模型学习进行预测2005-2014年长江的污水排放量(单位:亿吨)。
clc;clear;close all;
%% 数据准备
syms a b;                                                %建立符号变量a(发展系数)b(灰作用量)
c=[a,b]';
A = [174, 179, 183, 189, 207, 234, 220.5, 256, 270, 285];%原始数列 A
n = length(A);                                           %求出A中元素个数
years=10;                                                %预测未来年数
B = cumsum(A);                                           %对原始数列 A 做累加得到数列 B
for i = 2:n                                              %对数列 B 做紧邻均值生成C(i) = (B(i) + B(i - 1))/2;                          
end
C(1) = [];                                               %这里注意C中元素个数为n-1所以删去第一列
B=[-C;ones(1,n-1)]';                                     %构造数据矩阵 
Y=A(2:n)';
%% 最小二乘法计算参数并求出预测数据
c=inv(B'*B)*B'*Y;                                        %使用最小二乘法计算参数 a(发展系数)b(灰作用量)
a=c(1);b=c(2);
%预测未来数据
F = []; F(1) = A(1);        
for i = 2:(n+years)F(i) = (A(1)-b/a)/exp(a*(i-1))+ b/a;
end
G = []; G(1) = A(1);                                     %对数列 F 累减还原,得到预测出的数据
for i = 2:(n+years)G(i) = F(i) - F(i-1);                                %得到预测出来的数据
end
disp(['预测数据为:',num2str(G)]);
%% 模型检验
%计算残差
H = G(1:10);                                     
epsilon = A - H;
%计算相对误差q
q= abs(epsilon./A);
Q=mean(q);
disp(['相对残差Q检验:',num2str(Q)]);
%方差比C检验
C = std(epsilon, 1)/std(A, 1);
disp(['方差比C检验:',num2str(C)]);
%小误差概率P检验
S1 = std(A, 1);
temp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1); %找到数据中满足条件数据位置
P = length(temp)/n;                                     %求出满足条件个数然后除以总个数求出概率
disp(['小误差概率P检验:',num2str(P)]);
%% 绘图
t1 = 1995:2004;
t2 = 1995:2014;
plot(t1, A,'r*'); hold on;
plot(t2, G, 'b-');
xlabel('年份'); ylabel('污水量/亿吨');
legend('实际污水排放量','预测污水排放量');
title('长江污水排放量增长曲线');
grid on;                                                %显示网格

3.运行结果

预测数据为:174       172.809      183.9355      195.7785      208.3839       221.801       236.082      251.2825      267.4616      284.6825      303.0122      322.5221      343.2881      365.3912      388.9175      413.9585      440.6118      468.9812      499.1772      531.3174
相对残差Q检验:0.023399
方差比C检验:0.18697
小误差概率P检验:1

在这里插入图片描述
2020/2/14灰色预测学习笔记,代码参考《数学建模算法与应用》

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

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

相关文章

ASP.NET Core 中的依赖注入

什么是依赖注入软件设计原则中有一个依赖倒置原则&#xff08;DIP&#xff09;&#xff0c;为了更好的解耦&#xff0c;讲究要依赖于抽象&#xff0c;不要依赖于具体。而控制反转(Ioc)就是这样的原则的其中一个实现思路, 这个思路的其中一种实现方式就是依赖注入(DI)。什么是依…

【每日一题】7月7日题目精讲—最短路

来源&#xff1a;牛客网&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 1048576K&#xff0c;其他语言2097152K 64bit IO Format: %lld题目描述 给一个连通图&#xff0c;每次询问…

【活动(广州)】office365的开发者训练营

Office 365每月有超过1亿的商业活跃用户&#xff0c;是现有最大的生产力服务。Office 365为开发人员提供了一个令人难以置信的机会&#xff0c;包括业务关键数据和数百万用户&#xff0c;以及一个旨在让人们保持工作流程的平台。作为一名开发人员&#xff0c;您可以使用每天使用…

牛客网【每日一题】7月8日 Alliances

来源&#xff1a;牛客网 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 5秒&#xff0c;其他语言10秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 树国是一个有n个城市的国家&#xff0c;城市编号…

Ocelot简易教程(四)之请求聚合以及服务发现

上篇文章给大家讲解了Ocelot的一些特性并对路由进行了详细的介绍&#xff0c;今天呢就大家一起来学习下Ocelot的请求聚合以及服务发现功能。希望能对大家有所帮助。作者&#xff1a;依乐祝原文地址&#xff1a;https://www.cnblogs.com/yilezhu/p/9695639.html请求聚合Ocelot允…

邓公数据结构C++语言版学习笔记1

1. 对于计算幂2n2^n2n的算法优化 暴力算法时间复杂度O(n)O(n)O(n) __int64 power2BF_I(int n) //幂函数2^n算法&#xff08;蛮力迭代版&#xff09;&#xff0c;n > 0{ __int64 pow 1; //O(1)&#xff1a;累积器刜始化为2^0while (0 < n --) //O(n)&#xff1a;迭代n轮…

HttpClientFactory系列二:集成Polly处理瞬态故障

前言&#xff1a;最近&#xff0c;同事在工作中遇到了使用HttpClient,有些请求超时的问题&#xff0c;辅导员让我下去调研一下&#xff0c;HttpClinet的使用方式已经改成了之前博客中提到的方式&#xff0c;问题的原因我已经找到了&#xff0c;就是因为使用了伪异步&#xff0c…

邓公数据结构C++语言版学习笔记——二叉树

二叉树的遍历 一. preorder——先序遍历VLR 1. 递归先序遍历 2. 迭代先序遍历 3.先序遍历图解 二. inorder——先序遍历LVR 1. 递归中序遍历 2.迭代中序遍历 3.迭代中序遍历优化空间复杂度 <1>定义直接后继 <2>借用直接后继优化算法 解释&#xff1a;…

二分图匹配--匈牙利算法

文章目录二分图&#xff1a;匹配匈牙利算法代码&#xff1a;二分图&#xff1a; 二分图是一个无向图&#xff0c;点集分成子集X和Y&#xff0c;图中每一条边都是一边在X一边在Y 当且仅当无向图G的每一个回路次数都是偶数时&#xff08;包括0&#xff09;&#xff0c;G就是一个…

《Office 365开发入门指南》上市说明和读者服务

写在最开始的话拙作《Office 365开发入门指南》上周开始已经正式在各大书店、在线商城上市&#xff0c;欢迎对Office 365的开发、生态感兴趣的开发者、项目经理、产品经理参考本书&#xff0c;全面了解Office 365带来的全新机遇以及在具体业务应用开发中的场景。写作本书差不多…

简单理解手机快充

浅谈手机快充 背景 智能手机发展这么些年&#xff0c;屏幕显示越来越清晰&#xff0c;拍照像素越来越高&#xff0c;处理器性能越来越强&#xff0c;运行内存甚至开始超过PC&#xff0c;不过手机的续航还是一个问题&#xff1a;处理器性能以及一系列的增强无疑对电池是一个巨…

【送书活动】C# 程序员的自我修养

如果希望成为一个C# 高手&#xff0c;或者至少是合格的C# 程序员&#xff0c;应该懂些什么&#xff1f;《C#从现象到本质》&#xff08;以下简称本书&#xff09;试图回答这个问题。实际上&#xff0c;在本书问世之前&#xff0c;市面上已经有很多优秀的C# 书籍&#xff0c;例如…

张善友:自由之精神,中国之队长

张善友&#xff0c;毕业于兰州大学数学系&#xff0c;2006年开始连任微软最有价值专家&#xff08;MVP&#xff09;&#xff0c;一直在社区宣导.NET开源项目&#xff0c;从早期的Mono到.NET Core&#xff0c;在社区被尊称为张队长&#xff0c;在腾讯工作11年后&#xff0c;进行…

CF461D-Appleman and Complicated Task【并查集】

正题 题目链接:https://www.luogu.com.cn/problem/CF461D 题目大意 n∗nn*nn∗n的网格需要填上xxx或ooo&#xff0c;其中有kkk个格子已经固定&#xff0c;求有多少中填写方案使得每个格子的四周都有偶数个ooo。 解题思路 约束条件相当于一个格子周围的异或和都为000&#xff…

工科数学分析无穷级数总结

目录序言一.常数项级数概念1. 什么是常数项无穷级数&#xff1f;2. 级数的收敛性与和两个特别的级数级数的判别方法①常数项级数判别法②正项级数的审敛准则③变号级数的审敛准则④绝对收敛二.函数项级数概念1. 什么是函数项级数&#xff1f;2. 函数项级数处处收敛与和函数一致…

dump解析入门-用VS解析dump文件进行排障

突然有一天部署在服务器的一个应用挂掉了&#xff0c;没办法只能进入服务器打开【事件查看器】查看下&#xff0c;好不容易找到了打开后一脸懵逼事件查看器查到的内容根本对我们排障没有任何作用。在这个时候如果有对应的dump文件就能派上用场了&#xff0c;只要有dump文件就能…

.NET Core部署中你不了解的框架依赖与独立部署

作者&#xff1a;依乐祝原文地址&#xff1a;https://www.cnblogs.com/yilezhu/p/9703460.htmlNET Core项目发布的时候你有没有注意到这两个选项呢&#xff1f;有没有纠结过框架依赖与独立部署到底有什么区别呢&#xff1f;如果有的话那么这篇文章可以参考下&#xff01;为什么…

dump文件解析之探索.Net的内存

前言&#xff1a;对于需要长时间运行的.net程序&#xff0c;有时需要我们查看内存的使用有没有内存泄露问题。我们可以从dump文件中找到答案。Dump的看点用dump文件来分析内存&#xff0c;到底我们需要关心哪些点呢&#xff1f;内存的使用情况 HeapSize/object的数量 也就是托管…

微软发布Azure Pipelines,开源项目可无限制使用CI/CD

微软发布了Azure Pipelines&#xff0c;他们新的CI/CD服务&#xff0c;是Azure DevOps产品的一部分。Azure Pipelines可用于构建、测试和部署工作负载&#xff0c;并可以让各种语言、项目类型和平台协同工作。作为Visual Studio Team Services&#xff08;VSTS&#xff09;的后…

2020牛客暑期多校训练营(第一场)

文章目录A B-Suffix ArrayB Infinite TreeC DominoD Quadratic FormE Counting Spanning TreesF Infinite String Comparision题意&#xff1a;题解&#xff1a;代码&#xff1a;G BaXianGuoHai, GeXianShenTongH Minimum-cost FlowI 1 or 2J Easy Integration题意题解代码2020…