灰色预测模型GM(1,1)的matlab运行代码
例 由1990—2001年中国蔬菜产量,建立模型预测2002年中国蔬菜产量,并对预测结果作检验。
分析建模:给定原始时间1990—2001年资料序列X
(k),对X
(k)生成1-AGO(累加)序列X
(k)及Y
。见下
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
K 1 2 3 4 5 6 7 8 9 10 11 12
X
19519 ,19578 ,19637,19695,16602, 25723, 30379, 34473, 38485, 40514, 42400, 48337
X
19519, 39097, 58734,………………………………………… 264605,307005,355342
Y
----- 19578 19637 ………………………………………… 40514 42400 48337
其中
X
(k)=
; Y
=
对上述X
(k)的GM(1,1),得到
将 B和Y
代入辨识算式,有:
得灰色GM(1,1)模型为
(1)灰微分方程X
(k)-0.1062105 Z
(k)=13999.9
(2)白化方程
(3)白化方程的时间响应式
(4)还原为原始数据预测方程:
,即
(5)残差检验:
残差error1=e1=
,这里残差有12个。
相对残差error2=e2=
,这里相对残差有12个。
(6) 后验差检验:
C=
, 其中
, S1为绝对误差序列的
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
差。
,
S2为原始数据系列标准差,
,
C<0.35 好;C<0.5 合格;C>0.6 不合格。
利用matlab做求解a,b,B,并作残差分析
>> x0=[19519,19578,19637,19695,16602,25723,30379,34473,38485,40514,42400,48337];
>> format long; (表示
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
精度)
>> n=length(x0); (输入数据长度)
>> x1=[ ]; (表示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的第一列)
B(i,2)=1; (矩阵B的第二列)
Y(i)=x0(i+1); (表示Yn数据)
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; (这里x2(i+1)相当上面所讲的
)
x(i+1)=x2(i+1)-x2(i); (这里x(i+1) 相当原来输入数据的预测数据
)
end
>> for i=2: 12;
x2(i)=c*exp(-a*(i-1))+d; (对上面刚引出的x2(i)进行说明及计算)
x(i)=x2(i)-x2(i-1);
end
>> for i=1:n;
error(i)=x(i)-x0(i); (残差)
error1(i)=abs(error(i));(计算残差,abs表示绝对值)
error2(i)=error1(i)/x0(i); (计算相对误差)
end
>> C=std(error1)/std(x0); (计算后验差检验数,std表示标准差)
>> k=1; (k表示预测长度,这里每次预测下一年)
a =
-0.
>> b
b =
1.e+04
B
B =
1.0e+05 *
-0. 0.
-0. 0.
-0. 0.
-0. 0.
-1. 0.
-1. 0.
-1. 0.
-2. 0.
-2. 0.
-2. 0.
-3. 0.
>> C (求后检验数)
C =
0.
>> x (原始数据
的对应的预测数据
,这里也是12个)
x =
1.0e+04 *
Columns 1 through 3
1. 1. 1.
Columns 4 through 6
2. 2. 2.
Columns 7 through 9
2. 3. 3.
Columns 10 through 12
3. 4. 4.
>> eroor1 (求残差)
eroor1 =
1.0e+03 *
Columns 1 through 4
0 2. 0. 1.
Columns 5 through 8
6. 0. 1. 2.
Columns 9 through 12
2. 0. 1. 0.
>> eroor2 (求相对误差)
eroor2 =
Columns 1 through 4
0 0. 0. 0.
Columns 5 through 8
0. 0. 0. 0.
Columns 9 through 12
0. 0. 0. 0.
a =
-0.
b =
1.e+04
>> B
B =
1.0e+05 *
-0. 0.
-0. 0.
-0. 0.
-0. 0.
-1. 0.
-1. 0.
-1. 0.
-2. 0.
-2. 0.
-2. 0.
-3. 0.
方法二 程序
(1)一次累加生成序列的matlab命令
>> x0=[19519,19578,19637,19695,16602,25723,30379,34473,38485,40514,42400,48337];
>> x1(1)=x0(1);
>> x1(1)
x1(1) =
19519
>> for t=2:12;
x1(t)=x1(t-1)+x0(t);
end
x1回车
x1 =
Columns 1 through 8
19519 39097 58734 78429 95031 120754 151133 185606
Columns 9 through 12
224091 264605 307005 355342
(2)由一次累加生成序列紧邻均值生成Z
的matlab命令:
x0=[19519,19578,19637,19695,16602,25723,30379,34473,38485,40514,42400,48337];