蔬菜产量预测
由1990-2001年某地蔬菜产量,建立模型预测该地2002年蔬菜产量,并对预测结果做检验。
1.画图
t=1990:2001;
X0=[19519,19578,19637,19695,16602,25723,30379,34473,38485,40514,42400,48337];
hold on
plot(t,X0,'linewidth',1)
xlabel('年份')
ylabel('产量')
hold off
图像具有指数趋势,可以使用灰色预测。
2.编写灰色预测函数
function [X,c,error1,error2,A,B]=GM11(X0,k)
format long;
n=length(X0);
X1=[];
X1(1)=X0(1);
for i=2:n
X1(i)=X1(i-1)+X0(i);
end
for i=1:n-1
B(i,1)=-0.5*(X1(i)+X1(i+1));
B(i,2)=1;
Y(i)=X0(i+1);
end
alpha=(B'*B)^(-1)*B'*Y';
a=alpha(1,1);
b=alpha(2,1);
d=b/a;
c=X1(1)-d;
X2(1)=X0(1);
X(1)=X0(1);
for i=1:n-1
X2(i+1)=c*exp(-a*i)+d;
X(i+1)=X2(i+1)-X2(i);
end
for i=(n+1):(n+k)
X2(i)=c*exp(-a*(i-1))+d;
X(i)=X2(i)-X2(i-1);
end
for i=1:n
error(i)=X(i)-X0(i);
error1(i)=abs(error(i));
error2(i)=error1(i)/X0(i);
end
c=std(error1)/std(X0);
A=(X0(1)-(b/a))*(1-exp(a));
B=-a;
3.建立模型
>> [X1,c1,e1,e2,A,B]=GM11(X0,k)
X1 =
1.0e+04 *
1 至 5 列
1.951900000000000 1.695769385830782 1.885790370699693 2.097104330304606 2.332097268346191
6 至 10 列
2.593422554345592 2.884030883565190 3.207203594115656 3.566589717441861 3.966247180534730
11 至 13 列
4.410688625094434 4.904932361001952 5.454559029427991
c1 =
0.163969348419772
e1 =
1.0e+03 *
1 至 5 列
0 2.620306141692184 0.779096293003065 1.276043303046055 6.718972683461907
6 至 10 列
0.211225543455919 1.538691164348100 2.400964058843441 2.819102825581387 0.851528194652696
11 至 12 列
1.706886250944343 0.712323610019521
e2 =
1 至 5 列
0 0.133839316666267 0.039674914345525 0.064790215945471 0.404708630494031
6 至 10 列
0.008211543888968 0.050649829301429 0.069647667996503 0.073251989751368 0.021018121998635
11 至 12 列
0.040256751201518 0.014736611912604
A =
1.524895796797355e+04
B =
0.106210475032772
4.再次画图分析
t=1990:2001;
X0=[19519,19578,19637,19695,16602,25723,30379,34473,38485,40514,42400,48337];
p=1:12;
X1=A.*exp(B.*p);
hold on
plot(t,X0,'linewidth',1)
plot(t,X1,'linewidth',1)
xlabel('年份')
ylabel('产量')
hold off
后六个数据需要残差修正。
5.残差修正灰色预测
对后六个数据的残差序列作GM(1,1)模型。
>> E0=[1538.7,2400.9,2819.1,851.53,1707,712.3];
[E1,c1,e1,e2,a,b]=GM11(E0,0)
E1 =
1.0e+03 *
1 至 5 列
1.538700000000000 2.662167251695292 2.059445314123276 1.593181269570276 1.232480678318035
6 列
0.953443686189585
c1 =
0.362653144399383
e1 =
1.0e+02 *
1 至 5 列
0 2.612672516952921 7.596546858767238 7.416512695702757 4.745193216819652
6 列
2.411436861895847
e2 =
1 至 5 列
0 0.108820547167850 0.269467094419043 0.870963171667793 0.277984371225522
6 列
0.338542308282444
a =
3.441283158817899e+03
b =
-0.256703865781852
可以得到
模型建立成功。