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实现的更多相关文章

  1. matlab批量灰色预测

    没事玩了一下matlab 发现现在网上的代码都是一组数据预测 所以我就写个批量数据的预测 顺便学习下matlab ----------------------------------我是快乐的分割线- ...

  2. [matlab] 21.灰色预测、线性回归分析模型与最小二乘回归 (转载)

    灰色预测的主要特点是只需要4个数据,就能解决历史数据少,序列的完整性以及可靠性低的问题,能将无规律的原始数据进行生成得到规律性较强的生成序列,易于检验 但缺点是只适合中短期的预测,且只适合指数级增长的 ...

  3. python 实现 灰色预测 GM(1,1)模型 灰色系统 预测 灰色预测公式推导

    来源公式推导连接 https://blog.csdn.net/qq_36387683/article/details/88554434 关键词:灰色预测 python 实现 灰色预测 GM(1,1)模 ...

  4. R实现灰色预测

    1.简介 预测就是借助于对过去的探讨去推测.了解未来.灰色预测通过原始数据的处理和灰色模型的建立,发现.掌握系统发展规律,对系统的未来状态做出科学的定量预测.对于一个具体的问题,究竟选择什么样的预测模 ...

  5. 灰色预测原理及JAVA实现

    最近在做项目时,用户不想使用平均值来判断当前数据状态,想用其他的方式来分析数据的变化状态,在查找了一些资料后,想使用灰色预测来进行数据的预测.下面的内容是从网上综合下来的,java代码也做了一点改动, ...

  6. 灰色预测 GM11模型

    灰色预测实现见:https://www.jianshu.com/p/a35ba96d852b from pandas import Series from pandas import DataFram ...

  7. 使用LIBSVM工具实现样本分类预测——MatLab

    准备工作: https://www.csie.ntu.edu.tw/~cjlin/libsvm/,下载LIBSVM:(LIBSVM工具相较于MATLAB自带的工具:1).支持多分类及回归(‘-s 0’ ...

  8. win7 64 旗舰版虚拟GPU-VMware下+vs2013安装caffe+matlab+python

    转发请说明来处 Win7配置caffe(无GPU) 配置环境: 必须:win7 64 + vs2013 Win7 64位旗舰版要升级到service spack(因为是在vs2013下,想安装vs20 ...

  9. ubuntu16.04 安装配置matlab+python +cuda8.0+cudnn+opencv3.1的caffe环境

    网络上有很多ubuntu上caffe配置环境的帖子,本人照着其中的许多进行了参考,都出现了或多或少的错误,很多地方也有差异. 于是自己整理了下自己的安装过程,成功进行了测试,跑通了faster-rcn ...

随机推荐

  1. set注入

    顾名思义set注入必须要有set方法. 基本类型的注入.引用类型注入.List注入.Set注入.Map注入.Properties注入 public class person { private car ...

  2. Codeforces Gym100952 A.Who is the winner? (2015 HIAST Collegiate Programming Contest)

      A. Who is the winner?   time limit per test 1 second memory limit per test 64 megabytes input stan ...

  3. CodeFirst模式开发涉及到mysql简单使用

    在和同学写自己的小项目中,这次大胆的用到了“mysql”,毕竟是第一次在项目中使用,可我和同学就犯难了,我们没有真正意义上学过mysql,或者可以说,使用过mysql,当我们把项目放在www.git. ...

  4. POJ 2387 链式前向星下的SPFA

    (POJ)[http://poj.org/problem?id=2387] Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K ...

  5. 洛谷 P1068 分数线划定【结构体排序】

    题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据计划录取人数的150%划 ...

  6. 如何用java有选择的输入多行文本

    java如何有选择的输入多行文本 今天在做作业的时候碰到了一个问题:要用java做词频统计,但是这就犯难了,java如何有选择性的进行文件输入输出呢? 查阅文档可知,inputStream类和outp ...

  7. Codeforces 853C - Boredom

    853C - Boredom 题意 给出一个矩阵,每行每列有且仅有一个点.每次询问一个子矩形,问这些点构成的矩形有多少个与给定的矩形相交(两个处于对角线上的点可以组成矩形). 分析 考虑矩形周围 8 ...

  8. Track Cylinder

    1 Track = 48 KB1 Cylinder = 720 KB so 1 Cylinder = 15 Tracks Read more: http://ibmmainframes.com/abo ...

  9. 前端设计师必须知道的10个重要的CSS技巧

    对于一个初入门的前端设计师,在设计修改网站前端的时候,我们需要编写一些CSS.JS的内容达到界面效果.今天分享10个对于前端设计师来说重要的CSS技巧,这也是我在给许多客户做网站的过程当中总结出来的. ...

  10. struts2中css,js等资源无效 非路径问题(新手问题)

    一个小小的Strust2例子 然后发现css,js,图片用不了,debugger下发现无法访问这些资源(404错误),妈的,那个例子明明可以的,起码从书上的图片看. 发现是web.xml中的过滤器的问 ...