GM预测
模型的建立
设原始数列为x0(x0(1),x0(2),,x0(n)),把这些数列依次累加:
kx(k)(1)xi1(0)(i),k1,2,,n;r1
其中,x(1)(k)称为x0的1次累加生成数列。
定义x(1)的灰导数为
d(k)x(0)(k)x(1)(k)x(1)(k1)
令z(r)为x(r)的均值数列,即
z(1)(k)0.5x(1)0.5x(1)(k1)
本模型于是定义灰微分方程模型GM(1,1)为
x(0)(k)az(1)(k)b
上式中,称x(0)(k)为灰导数,a为发展系数,z(1)(k)为白化背景值,b为灰作用量。
3,,n代入GM(1,n)模型,得: 将时刻k2,x(0)(2)az(1)(2)bx(0)(3)az(1)(3)b
x(0)(n)az(1)(n)b令
z(1)(2)1(1)z(2)1YN(x(0)(2),x(0)(3),,x(0)(n))T,u(a,b)T,B
z(1)(2)1其中,称YN为数据向量,u为参数向量,B为数据矩阵,则GM(1,n)模型可以表示为矩阵YNBu。
参数向量u可用最小二乘法求取,如果BTB奇异,则u(BTB)1BTYN 3,,n视为连续变量t,对于GM灰微分方程,将灰导数x(0)(k)的时刻k2,dx(1)(t)(1)(0)(1)则x视为时间x(t),于是x(k)对应于导数量级,白化背景值z(1)(k)dt(t)。于是建立白微分方程: 对应于导数x(1)dx(1)(t)ax(1)(t)b dt解为:
x(1)(t)(x(0)(t1)于是得到预测值表达式:
ba(0)b)e aax(1)(k1)(x(0)(k)即:
bakb)e,k1,2,,n-1 aax(0)(k1)(x(1)(k1)x(1)(k),k1,2,,n-1
预测下一个数据时,令k+1=n-1有:
bx(0)(n1)(x(0)(n))(e-an-e-a(n1))
a程序1为较通用的程序,单个数据预测(模型和程序在原有基础上进行了微调) 程序1:GM(1,1)预测 运行环境:Matlab2011a clear han1=[ ]; %数据,建议十行以上的数据 han1(end,:)=[]; m=size(han1,2); x0=mean(han1,2); %平均每行的数据 x1=cumsum(x0); %累加x0 alpha=0.5; n=length(x0); %x0中元素个数 z1=alpha*x1(2:n)+(1-alpha)*x1(1:n-1)%x1的邻值生成数列 Y=x0(2:n); B=[-z1,ones(n-1,1)]; ab=B\\Y %a,b的值 c=ab(2)/ab(1) xhat=(x0(1)-c)*(exp(-ab(1)*n)-exp(-ab(1)*(n-1)))%预测值方程 数据预测: 结果: 预测下一个数据时,将11.4063加入han1矩阵即可
因篇幅问题不能全部显示,请点此查看更多更全内容