灰色预测模型的matlab运行代码(讲解)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

灰色预测模型GM(1,1)的matlab 运行代码

例 由1990—2001年中国蔬菜产量,建立模型预测2002年中国蔬菜产量,并对预测结果作检验。

分析建模:给定原始时间1990—2001年资料序列X )0((k),对X )0((k)生成1-AGO(累加)序列X )1((k)及Y n 。见下表

X )1((k)=)(1

i )

0(i X

k

∑=; Y n =T X X X )]12(,),3(),2([)0()0()0(

对上述X )0((k)的GM(1,1),得到

[

][][][][][][][][][][]

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦

⎤⎢

⎢⎢

⎢⎢⎢

⎢⎢⎢

⎢⎢⎢

⎢⎢⎢

⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢

⎢⎢⎢

⎢⎢⎢⎢⎢

⎢⎢⎢

⎢⎣⎡+-+-+-+-+-+-+-+-+-+-+-==⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-----------=15236.2-1331173.5-1244348.01204848.5-1168369.5-1135943.5-1107892.5-186730.0-168581.5-148915.5-129308.0-112115.0111105.011095.01985.01875.01765.01655.01545.01435.01325.01215.01)12(1)11(1)10(1)9(1)8(1)

7(1)6(1)5(1)4(1)3(1)2()1()1()

1()1()1()1()

1()1()1()1()1()1()1()1()1()1()1()1()1()1()

1()1()

1()1()

1()1()1()

1()1()

1()1()

1()1()()(

)()()()()()()

()()

()()

()()()()

()()()()()(X X X X X X X X X X X X X X X X X X X X X X z z z z z z z z z z z B 将 B 和Y n 代入辨识算式,有:

10.1062105()13999.9T T

n a B B B Y b α--⎡⎤⎡⎤==•=⎢⎥⎢⎥⎣⎦⎣⎦

得灰色GM(1,1)模型为

(1)灰微分方程X )0((k)-0.1062105 Z )1((k)=13999.9

(2)白化方程

9.139991062105.0)

1()1(=-X dt

dX (3)白化方程的时间响应式

5.1318135.151332)1()1(ˆ1062105.0)0()1(-=+⎥⎦⎤⎢⎣

⎡-=+--t at e a b e a b X t X (4)还原为原始数据预测方程:)(ˆ)1(ˆ)1(ˆ)1()1()0(t X t X t X

-+=+,即 t e t X

1062105.0)0(15248.968)1(ˆ=+ (5)残差检验: 残差error1=e1=

)()ˆ)0()0(i X i X -(,这里残差有12个。

相对残差error2=e2=)0()

0()0()0(1

)(|)()(ˆ|X

e i X i X i X =-,这里相对残差有12个。

(6) 后验差检验:

C=

2

1

S S , 其中1

])([12

1

2

)0(01-∆-∆

=∑=n i S i )

(, S1为绝对误差序列的标准差。

1)()(ˆ)()0()0()

0(e i X i X i =-=∆, )(121121

)0()0(i i ∑=∆=∆ S2为原始数据系列标准差,1

])([12

1

2

)0(02--=

∑=n X i X

S i )

( , )(121121

)

0()

0(i X X

i ∑== 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; (表示设计精度)

>> 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)相当上面所讲的)1(ˆ)

1(+t X

x(i+1)=x2(i+1)-x2(i); (这里x(i+1) 相当原来输入数据的预测数据)1(ˆ)

0(+t X

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.106210475032772 >> b b =

1.399996741173038e+04 B B =

相关文档
最新文档