灰色预测GM(1.1)模型及matlab程序负荷预测

灰色GM(1.1)预测模型
GM(1.1)模型由包含单一变量的一阶微分方程构成的模型,是灰色模型中最常用的模型。
设有负荷变量为的原始数据列:
3-1
(3-1)
生成一阶累加数据列:
3-2
(3-2)
其中
3-3
(3-3)
一阶微分方程的解呈指数增长形式,与序列增长规律相同,可认为序列满足下列方程:
3-4
(3-4)
根据导数定义得:
3-5
(3-5)
离散形式下,微分项可以表示为:
3-6
(3-6)
其中,x为k和k+1时刻的平均值即。
公式
3-7
(3-7)
表示:
3-8
(3-8)
得:
k=1,+
k=2,+ 3-9
(3-9)
·······
k=n-1,+
将上述方程用矩阵形式表示为
*[] 3-10
(3-10)
简记为:=BA
式中:在这里插入图片描述
=[, A=[], B=
由上述方程可知,和B为已知量,A为待定参数,存在A和u两个变量和n-1个方程,由n-1>2可知,方程组无解。由最小二乘法得到近似解,式=BA可写为
=BA+E 3-11
(3-11)
其中中,E为误差项
使min||-B||=min(-B),利用矩阵求导公式,可得:
3-12
(3-12)
将,代进原来的微分方程,得:
3-13
(3-13)
解之可得:
3-14
(3-14)
离散形式[令],得:
3-15
(3-15)
上式称为GM(1,1)模型的时间函数模式,是GM(1,1)模型灰色预测的具体计算公式,对此公式做累减还原,得到原始数列的灰色预测模型为:
3-16
(3-16)

负荷预测matlab程序算例如下:

// 灰色预测g(1,1)模型,负荷预测
clc
close all
clear all
%% 原始数据
%年份。。。。。。。。。。。。。。。。。。。。。。。。。。负荷
S=[2000	4149	1149	2003.07 	4851	2396	208.15
2001	4186	1273	2175.68 	5221	2500	222.28
2002	4222	1360	2450.48 	5829	2651	246.57
2003	4254	1447	2807.41 	6624	2739	299.53
2004	4284	1524	3456.7  	8097	3353	389.2
2005	4311	1595	4056.76 	9440	3821	391.98
2006	4339	1687	4820.53 	10679	4117	446.2
2007	4368	1739	5800.25 	13322	4676	511.09
2008	4400	1820	6971.05 	15900	5805	545.88
2009	4432	1914	7655.18 	17335	6212	609.22
2010	4462	1966	9451.26 	21253	7989	700.51
2011	4488	2051	11702.82	26150	9523	835.1
2012	4504	2140	12948.88	28800	10573	867.7
2013	4522	2210	14410.19	31930	11910	947.1
2014	4542	2281	15714.63	34674	12000	1018.52
2015	4566	2357	16923.78	36724	14489	1087.26
2016	4592	2438	18499   	40400	16040	1182.5
2017	4622	2524	20006.31	43424	17290	1293.98
2018	4648	2604	22716.51	49013	18322	1428.77];
%% 灰色模型
Result2=ones(1,9);
E2=ones(1,9);
for i=1:9
 T=[S(11,7),S(12,7),S(13,7),S(14,7),S(15,7),S(16,7),S(17,7),S(18,7),S(19,7)];   
A=[S(i,7),S(i+1,7),S(i+2,7),S(i+3,7),S(i+4,7),S(i+5,7),S(i+6,7),S(i+7,7),S(i+8,7),S(i+9,7)];
syms a u;
c=[a,u]';
Ago=cumsum(A);
n=length(A);
for k=1:(n-1)
    Z(k)=(Ago(k)+Ago(k+1))/2;
end
Yn =A;%Yn为常数项向量
Yn(1)=[]; %从第二个数开始,即x(2),x(3)...
Yn=Yn';
E=[-Z;ones(1,n-1)]';%累加生成数据做均值
c=(E'*E)\(E'*Yn);%利用公式求出a,u
c= c';
a=c(1);%得到a的值
u=c(2);%得到u的值
F=[];
F(1)=A(1);
for k=2:(n+1)
    F(k)=(A(1)-u/a)/exp(a*(k-1))+u/a;%求出GM(1,1)模型公式
end
G=[];
G(1)=A(1);
for k=2:(n+1)
    G(k)=F(k)-F(k-1);%两者做差还原原序列,得到预测数据
end
result=G(11);
Result2(i)=result;
E2(i)=(result-T(i))/result;
end
%% 输出
figure
plot(2010:1:2018,T,'b:*',2010:1:2018,Result2,'r-o')
legend('真实值','预测值')
xlabel('年份')
ylabel('用电量/亿千瓦时')

matlab运行预测结果如下图:
运行结果

  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电磁MATLAB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值