马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
function SGrey
4 E/ r+ _ d, @$ b2 X
: d7 _, Z* B- [7 P4 f+ _X0 = input('请输入原始负荷数据:'); %输入原始数据
8 B# V- K: k' Rn = length(X0); %原始n年数据( J% Q6 ], ]; O% E- Z6 I$ s
& U8 O9 J' U0 h' K6 j%累加生成
) [0 S$ b* [. L3 jX1 = zeros(1,n);; x+ R8 r# l# |6 j) G e& i: b, S! Q
for i = 1:n
4 d& v: p- s+ E$ b+ i" t5 B1 E if i == 1. ? }9 d* M2 j5 h' e4 ~' C8 s
X1(1,i) = X0(1,i);
* F; D$ w: x) L1 }! b4 F8 g else
' p3 g* J- ]. o+ u( M2 t1 r X1(1,i) = X0(1,i) + X1(1,i-1);
/ ?) A. q" d$ T2 b" l end" \3 h; v# m4 K- V( }/ @/ a
end* R" q; b; d* P% E4 C
X1
c- x7 }' \" p% z, b! D7 v/ F" Y
%计算数据矩阵B和数据向量Y
6 t' m3 E5 W( x) yB = zeros(n-1,2);2 I5 x1 P( J& g0 u) v! T5 l9 o
Y = zeros(n-1,1);* u* k; L& A( ]4 ?! X! s6 o- R
for i = 1:n-1
3 [1 h5 r7 m3 O# t8 k/ C B(i,1) = -0.5*(X1(1,i) + X1(1,i+1));7 q6 E1 O: d5 @% r: k8 I
B(i,2) = 1;
! F2 O. T& U* J" j Y(i,1) = X0(1,i+1);: Z/ L) G( S" O6 I3 o
end
' U3 O4 T! y. m- j3 T! RB,Y
0 S2 F- J3 R" A
( |* u1 C- k) t2 |%计算GM(1,1)微分方程的参数a和u$ W) f+ z) K, z; s) Z2 i
A = zeros(2,1);8 p; C1 @* D7 F. g1 J" V- f
A = inv(B'*B)*B'*Y;
9 }. ?- p$ Z# H! w- J. b) a/ g) @a = A(1,1);
$ O ~- p( k( [# Pu = A(2,1);* q4 E' K) v, c1 w# s& a3 v: K
a,u
& |" ]7 {$ u9 N1 t7 ?. l1 U4 y; C( I# a& W/ F: q
%建立灰色预测模型
; S+ g' [, H: f t7 t, T; D% y. qXX0(1,1) = X0(1,1);. T6 r! d# J9 Q5 B) D% p5 d; s& [
for i = 2:n
0 @3 Z6 w6 d$ ?* e& e+ C$ z0 D1 ` XX0(1,i) = (X0(1,1) - u/a)*(1-exp(a))*exp(-a*(i-1));
; m- X) @, P& k9 y1 {end
% o6 K8 d1 [8 z: t, s0 c" C+ FXX0( y0 z& Q2 z- X! c% @! Z) j1 y
%模型精度的后验差检验
1 \) N( |9 Q1 |0 r$ \e = 0; %求残差平均值4 r4 j2 \" b G/ o
for i =1:n2 i3 N& @! j% P# L, _+ t* ^$ U# ~% I
e = e + (X0(1,i) - XX0(1,i));
/ G5 R$ [" l9 ]" v* I& v# Iend7 C# M* H! Z1 A
e = e/n;
$ Q3 x+ V/ a/ ne, J' V8 K1 Q' z
aver = 0; %求历史数据平均值! _8 u/ z. q% w. f9 f, W
for i = 1:n
' }$ f) Y1 j$ ?0 b5 ~* k) u1 Q aver = aver + X0(1,i); ?0 ^( L: S- Y' R; p2 J" e
end* b( \5 Y* p9 E! o7 P, L% F6 V1 W
aver = aver / n;
$ S5 N7 i7 L5 o- S" haver; o9 H% T8 a$ c e& X
s12 = 0; %求历史数据方差
5 k1 B% c8 p: d2 t+ E! I$ qfor i = 1:n9 n9 a+ `' p2 M8 ^
s12 = s12 + (X0(1,i)-aver)^2;4 [ @& W _* o+ H
end
) i+ A) ^9 o' k* W9 ?s12 = s12 / n;
" \' A D1 H3 ?- K6 Ts12# ]; ?/ R/ m, N' u, f6 H' o4 j: b6 P
s22 = 0; %求残差方差* x9 n3 d' o0 Q6 e" s+ u
for i = 1:n( v4 q+ K" |" l: Z
s22 = s22 + ((X0(1,i) - XX0(1,i)) - e)^2;
9 b8 V6 V: f# R3 i6 gend
3 Z L8 N3 a8 v3 |4 R! a8 x# ms22 = s22 / n;
5 K6 o; r& Y" Y9 L% ~3 Qs228 Y/ I% i1 X( b/ X) Z+ Y
C = s22 / s12; %求后验差比值7 E' E2 p2 {* s$ B! q
C
9 u( p. i# ?4 |1 L: X1 o8 Ocout = 0; %求小误差概率
/ w0 y& r5 U5 [: w/ C- yfor i = 1:n
b" [, y, _: A6 F! I if abs((X0(1,i) - XX0(1,i)) - e) < 0.6754*sqrt(s12)
8 R$ S* o: [( F7 M3 {$ }" I cout = cout+1;, S" P# W$ ?" H5 E! R5 |
else
& q" q* G0 H! r; Q cout = cout;5 m- U0 n9 u( Y9 r! |3 e% ?$ B
end7 `$ N5 ~# h+ c5 p# H
end
1 ^) x+ B8 a* s# g+ k; jP = cout / n;
& a& m" z$ s5 L) p, V. A& ?P8 k6 [% m3 _0 i. _
if (C < 0.35 & P > 0.95)' w" ]* V! @/ e. M- ~
disp('预测精度为一级');
1 E1 z5 w l$ C m = input('请输入需要预测的年数: m = '); %预测往后各年的负荷* o" x' d/ {) C
disp('往后m各年负荷为:');
& q- W/ i. w9 ~1 L; H( J f = zeros(1,m);) y5 g( D& \; S3 c% R7 W9 \
for i = 1:m
9 o$ k5 `' h8 G. j4 p8 s0 D f(1,i) = (X0(1,1) - u/a)*(1-exp(a))*exp(-a*(i+n-1));
, C- Q$ \9 [7 D5 x7 @ end" M r$ Q1 d$ {$ R6 M9 {
f0 Z- M% e. }; n: e6 f+ ^1 e4 Q
else' {. e. _- X; H7 E
disp('灰色预测法不适用');
/ n/ j5 N7 K: K# G0 k7 hend |