灰色预测--matlab&python实现
function SGrey
X0 = input('请输入原始负荷数据:'); %输入原始数据
n = length(X0); %原始n年数据
%累加生成
X1 = zeros(1,n);
for i = 1:n
if i == 1
X1(1,i) = X0(1,i);
else
X1(1,i) = X0(1,i) + X1(1,i-1);
end
end
X1
%计算数据矩阵B和数据向量Y
B = zeros(n-1,2);
Y = zeros(n-1,1);
for i = 1:n-1
B(i,1) = -0.5*(X1(1,i) + X1(1,i+1));
B(i,2) = 1;
Y(i,1) = X0(1,i+1);
end
B,Y
%计算GM(1,1)微分方程的参数a和u
A = zeros(2,1);
A = inv(B'*B)*B'*Y;
a = A(1,1);
u = A(2,1);
a,u
%建立灰色预测模型
XX0(1,1) = X0(1,1);
for i = 2:n
XX0(1,i) = (X0(1,1) - u/a)*(1-exp(a))*exp(-a*(i-1));
end
XX0
%模型精度的后验差检验
e = 0; %求残差平均值
for i =1:n
e = e + (X0(1,i) - XX0(1,i));
end
e = e/n;
e
aver = 0; %求历史数据平均值
for i = 1:n
aver = aver + X0(1,i);
end
aver = aver / n;
aver
s12 = 0; %求历史数据方差
for i = 1:n
s12 = s12 + (X0(1,i)-aver)^2;
end
s12 = s12 / n;
s12
s22 = 0; %求残差方差
for i = 1:n
s22 = s22 + ((X0(1,i) - XX0(1,i)) - e)^2;
end
s22 = s22 / n;
s22
C = s22 / s12; %求后验差比值
C
cout = 0; %求小误差概率
for i = 1:n
if abs((X0(1,i) - XX0(1,i)) - e) < 0.6754*sqrt(s12)
cout = cout+1;
else
cout = cout;
end
end
P = cout / n;
P
if (C < 0.35 & P > 0.95)
disp('预测精度为一级');
m = input('请输入需要预测的年数: m = '); %预测往后各年的负荷
disp('往后m各年负荷为:');
f = zeros(1,m);
for i = 1:m
f(1,i) = (X0(1,1) - u/a)*(1-exp(a))*exp(-a*(i+n-1));
end
f
else
disp('灰色预测法不适用');
end
matlab输出
输入:[724.57 746.62 778.27 800.8 827.75 871.1 912.37 954.28 995.01 1037.2] 输出: >> SGrey
请输入原始负荷数据:[724.57 746.62 778.27 800.8 827.75 871.1 912.37 954.28 995.01 1037.2
] X1 = 1.0e+003 * Columns 1 through 8 0.7246 1.4712 2.2495 3.0503 3.8780 4.7491 5.6615 6.6158 Columns 9 through 10 7.6108 8.6480 B = 1.0e+003 * -1.0979 0.0010
-1.8603 0.0010
-2.6499 0.0010
-3.4641 0.0010
-4.3136 0.0010
-5.2053 0.0010
-6.1386 0.0010
-7.1133 0.0010
-8.1294 0.0010 Y = 1.0e+003 * 0.7466
0.7783
0.8008
0.8277
0.8711
0.9124
0.9543
0.9950
1.0372 a = -0.0420 u = 693.9403 XX0 = 1.0e+003 * Columns 1 through 8 0.7246 0.7398 0.7715 0.8046 0.8391 0.8750 0.9125 0.9517 Columns 9 through 10 0.9925 1.0350 e = 0.1818 aver = 864.7970 s12 = 1.0357e+004 s22 = 26.8113 C = 0.0026 P = 1 预测精度为一级
请输入需要预测的年数: m = 10
往后m各年负荷为: f = 1.0e+003 * Columns 1 through 8 1.0794 1.1257 1.1739 1.2242 1.2767 1.3315 1.3885 1.4481 Columns 9 through 10 1.5101 1.5749
Python实现
# -*- coding: utf-8 -*-
"""
Spyder Editor This is a temporary script file.
"""
import numpy as np
import math history_data = [724.57,746.62,778.27,800.8,827.75,871.1,912.37,954.28,995.01,1037.2]
n = len(history_data)
X0 = np.array(history_data) #累加生成
history_data_agg = [sum(history_data[0:i+1]) for i in range(n)]
X1 = np.array(history_data_agg) #计算数据矩阵B和数据向量Y
B = np.zeros([n-1,2])
Y = np.zeros([n-1,1])
for i in range(0,n-1):
B[i][0] = -0.5*(X1[i] + X1[i+1])
B[i][1] = 1
Y[i][0] = X0[i+1] #计算GM(1,1)微分方程的参数a和u
#A = np.zeros([2,1])
A = np.linalg.inv(B.T.dot(B)).dot(B.T).dot(Y)
a = A[0][0]
u = A[1][0] #建立灰色预测模型
XX0 = np.zeros(n)
XX0[0] = X0[0]
for i in range(1,n):
XX0[i] = (X0[0] - u/a)*(1-math.exp(a))*math.exp(-a*(i)); #模型精度的后验差检验
e = 0 #求残差平均值
for i in range(0,n):
e += (X0[i] - XX0[i])
e /= n #求历史数据平均值
aver = 0;
for i in range(0,n):
aver += X0[i]
aver /= n #求历史数据方差
s12 = 0;
for i in range(0,n):
s12 += (X0[i]-aver)**2;
s12 /= n #求残差方差
s22 = 0;
for i in range(0,n):
s22 += ((X0[i] - XX0[i]) - e)**2;
s22 /= n #求后验差比值
C = s22 / s12 #求小误差概率
cout = 0
for i in range(0,n):
if abs((X0[i] - XX0[i]) - e) < 0.6754*math.sqrt(s12):
cout = cout+1
else:
cout = cout
P = cout / n if (C < 0.35 and P > 0.95):
#预测精度为一级
m = 10 #请输入需要预测的年数
#print('往后m各年负荷为:')
f = np.zeros(m)
for i in range(0,m):
f[i] = (X0[0] - u/a)*(1-math.exp(a))*math.exp(-a*(i+n))
else:
print('灰色预测法不适用')
灰色预测--matlab&python实现的更多相关文章
- matlab批量灰色预测
没事玩了一下matlab 发现现在网上的代码都是一组数据预测 所以我就写个批量数据的预测 顺便学习下matlab ----------------------------------我是快乐的分割线- ...
- [matlab] 21.灰色预测、线性回归分析模型与最小二乘回归 (转载)
灰色预测的主要特点是只需要4个数据,就能解决历史数据少,序列的完整性以及可靠性低的问题,能将无规律的原始数据进行生成得到规律性较强的生成序列,易于检验 但缺点是只适合中短期的预测,且只适合指数级增长的 ...
- python 实现 灰色预测 GM(1,1)模型 灰色系统 预测 灰色预测公式推导
来源公式推导连接 https://blog.csdn.net/qq_36387683/article/details/88554434 关键词:灰色预测 python 实现 灰色预测 GM(1,1)模 ...
- R实现灰色预测
1.简介 预测就是借助于对过去的探讨去推测.了解未来.灰色预测通过原始数据的处理和灰色模型的建立,发现.掌握系统发展规律,对系统的未来状态做出科学的定量预测.对于一个具体的问题,究竟选择什么样的预测模 ...
- 灰色预测原理及JAVA实现
最近在做项目时,用户不想使用平均值来判断当前数据状态,想用其他的方式来分析数据的变化状态,在查找了一些资料后,想使用灰色预测来进行数据的预测.下面的内容是从网上综合下来的,java代码也做了一点改动, ...
- 灰色预测 GM11模型
灰色预测实现见:https://www.jianshu.com/p/a35ba96d852b from pandas import Series from pandas import DataFram ...
- 使用LIBSVM工具实现样本分类预测——MatLab
准备工作: https://www.csie.ntu.edu.tw/~cjlin/libsvm/,下载LIBSVM:(LIBSVM工具相较于MATLAB自带的工具:1).支持多分类及回归(‘-s 0’ ...
- win7 64 旗舰版虚拟GPU-VMware下+vs2013安装caffe+matlab+python
转发请说明来处 Win7配置caffe(无GPU) 配置环境: 必须:win7 64 + vs2013 Win7 64位旗舰版要升级到service spack(因为是在vs2013下,想安装vs20 ...
- ubuntu16.04 安装配置matlab+python +cuda8.0+cudnn+opencv3.1的caffe环境
网络上有很多ubuntu上caffe配置环境的帖子,本人照着其中的许多进行了参考,都出现了或多或少的错误,很多地方也有差异. 于是自己整理了下自己的安装过程,成功进行了测试,跑通了faster-rcn ...
随机推荐
- Java的Hashtable类(转)
文章来源:http://blog.csdn.net/zhna123_2011/article/details/6741479 ps:直接copy 哈希表是一种重要的存储方式,也是一种常见的检索方法.其 ...
- 素数路(prime) (BFS)
问题 C: 素数路(prime) 时间限制: 1 Sec 内存限制: 64 MB提交: 8 解决: 5[提交][状态][讨论版] 题目描述 已知一个四位的素数,要求每次修改其中的一位,并且要保证修 ...
- Codeforces 920 F SUM and REPLACE
Dicription Let D(x) be the number of positive divisors of a positive integer x. For example, D(2) = ...
- [BZOJ1095]捉迷藏
点了动态点分治的科技树,这道题是树形态不变的动态点分治,形态变化的话...待会补 考虑点分治过程中的这样一种结构:按递归层次把当前层的重心与上层重心互相连接,这就是点分治树,容易看出它的树高只有$O( ...
- [Contest20180314]学习
为了响应班级组团学习的要求,班主任xx将班上的$n$个同学编成了$m$个学习小组. 班长小r作为资深OI选手,他发现班级里存在一个可以量化的学习激♂情,并且这个激情跟组内成♀对的同学数量相关.若有$x ...
- 【并查集】【set】AtCoder - 2159 - 連結 / Connectivity
Problem Statement There are N cities. There are also K roads and L railways, extending between the c ...
- [CF911C]Three Garlands
题目大意: 给你三个灯,分别以k1秒一次,k2秒一次和k3秒一次的频率闪烁着. 你可以自定义三个灯开启的时间,问是否有一种方案,使得max(k1,k2,k3)秒之后,每秒钟都至少有一盏灯闪烁. 思路: ...
- Mac Screen Capture Shortcuts
Here's How: To capture the entire desktop, press Command-Shift-3. The screen shot will be automati ...
- 支付宝签名验证实现-Delphi版
支付宝签名验证实现-Delphi版 首先介结下支付宝签名验证流程: 一 支付宝密钥生成 支付宝提供秘钥生成工具https://docs.open.alipay.com/291/105971/ 用此下 ...
- 想使用gevent、mysql、sqlalchemy实现python项目协程异步达到并发的效果
如题,但是查看了很多资料,都说python这边的mysql不支持异步并发,只能阻塞进行,心塞30秒,暂时放弃这方面的研究 如果不操作数据库的化,比如请求url.操作文件,还是可以用gevent来异步实 ...