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. NYOJ 914 Yougth的最大化【二分/最大化平均值模板/01分数规划】

    914-Yougth的最大化 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:4 难度:4 题目描述: Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从 ...

  2. 洛谷 P1177 【模板】快速排序 【快速排序/multiset排序】

    题目描述 利用快速排序算法将读入的N个数从小到大排序后输出. 快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成.(C++选手请不要试图使用STL ...

  3. UVA 699 The Falling Leaves (递归先序建立二叉树)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/19244 #include <iostream> #include <cstdio> # ...

  4. 【二分答案】bzoj1639 [Usaco2007 Mar]Monthly Expense 月度开支

    #include<cstdio> using namespace std; #define N 100001 int n,m,a[N]; bool check(int x) { int n ...

  5. Java序列化对象为字符串并将字符串反序列化为对象

    对象的序列化与反序列化其实就是将对象的状态保存下来,一般是保存到文件中,但是其实更常用的是将对象序列化为字符串保存到数据库中,然后在需要读取对象的情况下将字符串反序列化为对象.   可以序列化的类必须 ...

  6. React Native 让组件做到局部刷新

    利用RN的状态机机制,我们可以通过this.setState({optional:...})来控制界面的刷新,但是一定会触发render方法,那如何保证不调用render方法从而做到界面的局部刷新呢? ...

  7. OC语言基础之NSArray

    0.数组的分类 NSArray :不可变数组 NSMutableArray : 可变数组 1: // @[] 只创建不可变数组NSArray 2: /* 错误写法 3: NSMutableArray ...

  8. identifier is too long 异常处理

    修改了oracle中的表. 报 identifier is too long 错误 我执行的脚本是: ---备份create table MDT_AGREEMENTMANAGEMENT_2018080 ...

  9. 使用GIT时排除NuGet的packages文件夹

    这段时间一直在用GIT做本地自己写的程序的源码管理工具,在使用的过程中发现了一个问题:Git往往会把NuGet的packages文件夹作为项目的一部分给添加进来了.网上搜了一下,原因是GIT只是和文件 ...

  10. Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis

    https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=6 ...