MATLAB解灰色模型
目前,灰色模型已经成为社会、经济、科教、技术等很多领域进行预测、决策、评估、规划、控制、系统分析和建模的重要方法之一。特别是它对时间序列短、统计数据少、信息不完全系统的建模与分析,具有独特的功效。
其实灰色模型很简单,具体的步骤我就不再一一赘述,我就灰色模型用MATLAB的解法与大家分享一下。我以一组简单的数据为例,如下:
例:
近几年,某种商品的价格如下表:
年份 |
2006 |
2007 |
2008 |
2009 |
2010 |
2011 |
2012 |
价格 |
71.1 |
72.4 |
72.4 |
72.1 |
71.4 |
72.0 |
71.6 |
请预测接下来几年价格情况?
下面我用MATLAB求出灰色模型的方程,然后检验:
format long
x=[71.1 72.4 72.4 72.1 71.4 72.0 71.6];
for k=2:7
q=x(k-1)/x(k)
end
q1=(2.718281828459)^(-2/8)
q2=(2.718281828459)^(2/8) %进行检验是否能用灰色模型%
for i=1:7
if q1<q(i)<q2
disp('keyijianmo'); %可以应用模型%
x12=sum(x(1,1:2))
x13=sum(x(1,1:3))
x14=sum(x(1,1:4))
x15=sum(x(1,1:5))
x16=sum(x(1,1:6))
x17=sum(x(1,1:7))
z12=0.5*(x(1)+x12)
z13=0.5*(x12+x13)
z14=0.5*(x13+x14)
z15=0.5*(x14+x15)
z16=0.5*(x15+x16)
z17=0.5*(x16+x17)
y=[x(2) x(3) x(4) x(5) x(6) x(7)]';
b=[-z12 1;-z13 1;-z14 1;-z15 1;-z16 1;-z17 1];
p=inv(b'*b)*b'*y;
a=p(1)
b=p(2)
c=b/a
d=x(1)-c
end
end
运行后结果如下:
Keyijianmo
a = 0.00234378647852
b = 72.65726960367881
c = 3.099995254237023e+004
d = -3.092885254237023e+004
建立灰色模型函数:
function f=huise(x)
f=-30928.85254237023*(2.718281828459)^(-0.00234378647852*x)+30999.95254237023;
建立该函数放在huise.m文件中,将工作区间指向该文件,然后输入如下程序:
format long
x=[71.1 72.4 72.4 72.1 71.4 72.0 71.6];
x1=x(1)
x2=huise(1)-x1
x3=huise(2)-huise(1)
x4=huise(3)-huise(2)
x5=huise(4)-huise(3)
x6=huise(5)-huise(4)
x7=huise(6)-huise(5)
xx=[x1 x2 x3 x4 x5 x6 x7]
s=(x-xx)./x
o=abs(s)
p=sum(o(1,:))
q=1-p
运行结果如下:
x1 = 71.09999999999999
x2 = 72.40574144031999
x3 = 72.23623656178097
x4 = 72.06712850127951
x5 = 71.89841632983371
x6 = 71.73009912066482
x7 = 71.56217594914415
xx =
Columns 1 through 5
71.09999999999999 72.40574144031999 72.23623656178097 72.06712850127951 71.89841632983371
Columns 6 through 7
71.73009912066482 71.56217594914415
s =
Columns 1 through 5
0 -0.00007930166188 0.00226192594225 0.00045591537754 -0.00698062086602
Columns 6 through 7
0.00374862332410 0.00052826886670
o =
Columns 1 through 5
0 0.00007930166188 0.00226192594225 0.00045591537754 0.00698062086602
Columns 6 through 7
0.00374862332410 0.00052826886670
p = 0.01405465603849
q = 0.98594534396151
挑选你想要的数据即可。