qiuwei_002 发表于 2008-5-29 16:51:34

基本灰色负荷预测程序(Matlab)

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

zhao06102642 发表于 2016-12-19 16:43:08

多谢楼主,好人啊!

qiuwei_002 发表于 2008-7-15 09:35:05

大家有没有改进的灰色预测程序呢?

乔丹 发表于 2009-4-3 15:53:11

毕业设计正在做这个,谢谢楼主分享,呵呵!

weilingyou 发表于 2009-5-12 14:45:00

很好这个::loveliness::

no123456 发表于 2009-5-12 16:01:01

谢谢楼主分享! 很好这个

snowbird 发表于 2009-9-10 22:23:43

不错,谢谢楼主

daisyjiangd 发表于 2010-3-29 11:58:26

谢谢,我正需要。

wangyuan01 发表于 2010-4-21 21:51:21

正在研究这个东西,谢谢!

family1420 发表于 2010-4-26 15:22:28

谢谢楼主,不知是否和神经网络结合在一起了。

zhpy 发表于 2010-4-26 15:28:59

灰色预测以前数学建模时用过
页: [1] 2
查看完整版本: 基本灰色负荷预测程序(Matlab)

招聘斑竹