灰色预测模型

  1. 灾变预测模型


    数据

    这是某个地区降水量的数据,规定变量zeta < 320为灾年

计算用的matlab程序如下

clc, clear
%写出初始数据
a=[390.6, 412, 320, 559.2, 380.8, 542.4, 553, 310, 561, 300, 632,...
540, 406.2, 540, 406.2, 313.8, 576, 587.6, 318.5]';
t0=find(a<= 320);
n=length(t0);
%做累加运算
t1=cumsum(t0);
z1=0.5*t1(1:end-1)+0.5*t1(2:end);

%求出B矩阵
B=[-z1, ones(n-1, 1)];
Y=t0(2:end);
%左除法
r=B\Y;
y=dsolve('Dy+a*y=b', 'y(0)=y0');
%替换变量
y=subs(y, {'a','b','y0'}, {r(1), r(2), t1(1)} );
yucel=subs(y, 't', [0:n+1]);

%为了提高预测精度,先计算预测值,再显示微分方程的解
y=vpa(y, 6);
yuce=diff(yucel);
yuce=[t0(1), yuce]
yuce_new=yuce(n+1: end)
  1. 同样的一个类似的预测模型


    实例计算
数据

代码如下

A=[83.0, 79.8,78.1,85.1,86.6,88.2,90.3,86.7,93.3,92.5,90.9,96.9; 
    101.7,85.1,87.8,91.6,93.4,94.5,97.4,99.5,104.2,102.3,101.0,123.5; 
    92.2,114.0,93.3,101.0,103.5,105.2,109.5,109.2,109.6,111.2,121.7,131.3; 
    105.0,125.7,106.6,116.0,117.6,118.0,121.7,118.7,120.2,127.8,121.8,121.9; 
    139.3,129.5,122.5,124.5,135.7,130.8,138.7,133.7,136.8,138.9,129.6,133.7; 
    137.5,135.3,133.0,133.4,142.8,141.6,142.9,147.3,159.6,162.1,153.5,155.9; 
    163.2,159.7,158.4,145.2,124,144.1,157.0,162.6,171.8,180.7,173.5, 176.5]; 
T=A(1:6, 1:12);
%对前六年求平均
x0=mean(T');
x1=zeros(size(x0));
n=length(x1);
x1(1)=x0(1);
%做一次累加求和
for i=2:n
    x1(i)=x1(i-1)+x0(i);
end

z=zeros(size(x0));
af=0.4;

for i=2:n
    z(i)=af*x1(i)+(1-af)*x1(i-1);
end
Y=zeros(n-1, 1);
B=zeros(n-1, 2);

%构造出B和Y矩阵,也就是灰色方程
for i=2:n
    Y(i-1, 1)=x0(i);
    B(i-1, 1)=-z(i);
    B(i-1, 2)=1;
end

%计算(a, b)'
Para=inv(B'*B)*B'*Y;
a=Para(1);
b=Para(2);

%预测值
Pred=(x0(1)-b/a)*exp(-a*n)*(1-exp(a));

%预测第n+1年的数据
Total=12*Pred;

%估计各月所占比重
r=sum(T)/sum(sum(T));

%预测各个月销售量
Px=Total*r;
fprintf('输出203年预测值与实际值.\n');

for i=1:12
    fprintf('%5d ', i);
end

fprintf('\n');
for i=1:12
    fprintf('%6.1f', Px(i));
end

fprintf('\n');
for i=1:12
    fprintf('%6.1f', A(7, i));
end

fprintf('\n');
Error=sum(Px(4:6))-sum(A(7, 4:6));
fprintf('2003年4,5,6月SARS导致减少销售额%6.2f亿元\n',Error);
%作图 
subplot(2,1,1); 
PA=[A(1,:),A(2,:),A(3,:),A(4,:),A(5,:),A(6,:),A(7,:)];
%变为一行数据 
plot(PA); 
grid on 
title('原始数据'); 
subplot(2,1,2); 
plot(1:12,A(7,:),'b*',1:12,Px,'r'); 
title('2003年对比数据'); grid on

最后得到的图形为


结果

你可能感兴趣的:(灰色预测模型)