【摘要】灰色預測通過鑒別系統因素之間發展趨勢的相異程度,即進行關聯分析,并對原始數據進行生成處理來尋找系統變動的規律.MATLAB具有強大的數據處理和分析功能,可以方便、快捷、準確、直觀地進行預測分析.本文介紹了灰色預測模型GM(1,1)的基本原理和精度檢驗方法,并用GM(1,1)模型對經濟指標進行了預測.考慮到人工計算的復雜性和不準確性,本文將MATLAB程序用于GM(1,1)模型對經濟指標的預測中,得到了理想的預測結果.
【關鍵詞】灰色預測;MATLAB;GM(1,1)模型;檢驗;經濟預測
一、灰色預測與MATLAB簡介
客觀世界,既是物質的世界又是信息的世界,它既包含大量的已知信息,也包含大量的未知信息與非確知信息.未知的或非確知的信息稱為黑色信息,已知信息稱為白色信息.既含有已知信息又含有未知的、非確知的信息的系統,稱為灰色系統.灰色預測是灰色系統建模的具體數學方法之一,灰色預測不是把觀測到的數據序列視為一個隨機過程,而是看作隨時間變化的灰色量或灰色過程,灰色預測通過鑒別系統因素之間發展趨勢的相異程度,即進行關聯分析,并對原始數據進行生成處理來尋找系統變動的規律.基于灰色系統理論的灰色模型主要有GM(1,1)灰色預測模型.GM(1,1)模型是基于隨機的原始時間序列,經按時間累加后所形成的新的時間序列呈現的規律可用一階線性微分方程的解來逼近.經證明,經一階線性微分方程的解逼近所揭示的原始時間數列呈指數變化規律,因此,當原始時間序列隱含著指數變化規律時,灰色模型GM(1,1)的預測將是非常成功的.
在實際進行預測時,由于數據量大、涉及的因素多以及計算的復雜性,給手工建立數學模型和進行預測分析造成了很大的困難,有的根本無法進行.而MATLAB就可以通過編程解決這一問題.MATLAB,即“矩陣實驗室”,是美國MathWork公司自20世紀80年代中期推出的數學軟件,用于線性代數、自動控制理論、概率論及數理統計、數字信號處理、時間序列分析、動態系統仿真等高級課程的基本教學工具,可解決工程、科學計算和數學學科中許多問題.
二、灰色預測模型GM(1,1)基本原理
1.生成時間序列
為了減弱原始時間序列的隨機性,先要對原始序列進行數據處理,即通過累加的方式產生時間序列.
(1)原始時間序列X(0)=(x(0)(1),x(0)(2),…,x(0)(n)).
(2)一次累加生成序列X(1)=(x(1)(1),x(1)(2),…,x(1)(n)),其中x(1)(k)=∑ki=1x(0)(i),k=1,2,…,n.
(3)緊鄰均值(MEAN)生成序列Z(1)=(z(1)(2),z(1)(3),…,z(1)(n)),其中z(1)(k)=0.5x(1)(k)+0.5x(1)(k-1).
由于生成序列接近指數曲線,可認為是光滑的離散系數,則可用微分方程進行描述.
2.灰色預測模型GM(1,1)的建立
對生成的時間序列,GM(1,1)相應的微分方程為
dx(1)dt+ax(1)=b.
求解微分方程,即可得到預測模型:
(1)(k+1)=x(0)(1)-bae-ak+ba,k=1,2,…,n.
上式中,參數a,b是用最小二乘法估計,即=(a,b)T,=(BTB)-1BTYn,其中
B=-z(1)(2)1-z(1)(3)1……-z(1)(n)1,
Yn=x(0)(2)x(0)(3)…x(0)(n) .
3.灰色預測模型GM(1,1)精度檢驗
灰色預測模型檢驗有殘差檢驗、關聯度檢驗、后驗差檢驗.
(1)殘差檢驗.計算原始序列和原始序列的灰色預測序列之間的:
絕對誤差:ε(0)(i)=x(0)(i)-(0)(i)(i=1,2,…,n).
相對誤差:ω(0)(i)=x(0)(i)-(0)(i)x(0)(i)(k=1,2,…,n).
其中(0)(i)=(1)(i)-(1)(i-1)(i=1,2,…,n).
相對誤差越小,模型精度越高.
(2)后驗差檢驗.首先計算原始序列x(0)(i)的均方差:
S0=S20n-1,而S20=∑ni=1[x(0)(i)-x(0)]2,x(0)=1n∑ni=1x(0)(i).
然后計算殘差序列ε(0)(i)的均方差:
S1=S21n-1,而S21=∑ni=1[ε(0)(i)-ε(0)]2,ε(0)=1n∑ni=1ε(0)(i).
再計算方差比c=S1S0,最后計算小誤差概率p={|ε(0)-ε(0)|<0.6745#8226;S0}.
預測精度等級劃分表
根據上面的預測精度等級劃分表確定模型的精度.如果殘差檢驗、關聯度檢驗、后驗差檢驗都能通過,則可以用所建立的模型進行預測.如果不能通過,則要進行殘差修正,以提高模型的精度.
三、用灰色預測模型GM(1,1)對經濟指標進行預測
某大型企業2002年至2007年的產品銷售額如下表,現在用GM(1,1)預測模型預測2008年的產品銷售額.
銷售額(億元)2.673.133.253.363.563.72
步驟1 原始生成序列為X(0)(k)={2.67,3.13,3.25,3.36,3.56,3.72}.
構造累加生成序列X(1)(k)={2.67,5.80,9.05,12.4,15.97,19.69}.
步驟2 構造數據矩陣B和數據向量Yn.
B=-12[x(1)(1)+x(1)(2)]1
-12[x(1)(2)+x(1)(3)]1
-12[x(1)(3)+x(1)(4)]1
-12[x(1)(4)+x(1)(5)]1
-12[x(1)(5)+x(1)(6)]1=
-4.2351-7.4251-10.731-14.191-17.831,
Yn=x(0)(2)x(0)(3)x(0)(4)x(0)(5)x(0)(6)=
3.133.253.363.563.72 .
步驟3 計算=ab=(BTB)-1BTYn.
BTB=707.46375-54.41-54.415,
(BTB)-1=0.0086670.0943190.0943191.226382,
=(BTB)-1BTYn=-0.0438792.925663 .
步驟4 得出預測模型.
dx(1)dt-0.043879x(1)=2.925663,
(1)(k+1)=69.3457e0.043879k-66.6757,
x(0)(1)=2.67;ba=-66.6757.
步驟5 殘差檢驗.
(1)根據預測公式,計算X^(1)(k),得
X^(1)(k)={2.67,5.78,9.03,12.43,15.97,19.68,19.69}(k=0,1,…,6).
(2)累減生成X^(0)(k)序列,k=1,2,…,6,
X^(0)(k)={2.67,3.11,3.25,3.40,3.54,3.71}.
原始序列:X(0)(k)={2.67,3.13,3.25,3.36,3.56,3.72}.
(3)計算絕對殘差和相對殘差序列.
絕對殘差序列:Δ(0)={0,0.02,0,0.04,0.02,0.01}.
相對殘差序列:={0,0.64%,0,1.19%,0.56%,0.27%}.
相對殘差不超過1.19%,模型精確度高.
預測結果:k=7,x(0)(8)=x(1)(8)-x(1)(7)=4.23.
四、將MATLAB用于灰色預測模型GM(1,1)中對經濟指標進行預測
Step1:
編寫GM(1,1)模型參數估計、檢驗及作圖及預測的MATLAB程序.M文件名:fungry1.m.
function GM1=fungry1(x0)
T=input(’T=’);
x1=zeros(1,length(x0));B=zeros(length(x0)-1,2);
yn=zeros(length(x0)-1,1);Hatx0=zeros(1,length(x0)+T);
Hatx00=zeros(1,length(x0));Hatx1=zeros(1,length(x0)+T);
epsilon=zeros(length(x0),1);omega=zeros(length(x0),1);
for i=1:length(x0)
for j=1:i
x1(i)=x1(i)+x0(j);
end
end
for i=1:length(x0)-1
B(i,1)=(-1/2)*(x1(i)+x1(i+1));
B(i,2)=1;
yn(i)=x0(i+1);
end
HatA=(inv(B’*B))*B’*yn
for k=1:length(x0)+T
Hatx1(k)=(x0(1)-HatA(2)/HatA(1))*exp(-HatA(1)*(k-1))+HatA(2)/HatA(1);
end
Hatx0(1)=Hatx1(1);
for k=2:length(x0)+T
Hatx0(k)=Hatx1(k)-Hatx1(k-1);
end
for i=1:length(x0)
epsilon(i)=x0(i)-Hatx0(i);
omega(i)=(epsilon(i)/x0(i))*100;
end
%x0,Hatx1,Hatx0,epsilon,omega,
c=std(epsilon)/std(x0);
p=0;
for i=1:length(x0)
if abs(epsilon(i)-mean(epsilon))<0.6745*std(x0)
p=p+1;
end
end
p=p/length(x0)
if p>0.95 c<0.35
disp(’The model is good and the forecast is :’),
disp (Hatx0(length(x0)+T))
elseifp>0.85 c<0.5
disp(’The model is eligibility and the forecast is:’),
disp (Hatx0(length(x0)+T))
elseifp>0.70 c<0.65
disp(‘The model is not goodand the forecast is :’),
disp (Hatx0(length(x0)+T))
else p<=0.70 c>0.65
disp(’The model is badand try again ’)
end
for i=1:length(x0)
Hatx00(i)=Hatx0(i);
end
z=1:length(x0);
plot(z,x0,’-’,z,Hatx00,’:’)
text(2,x0(2),’History data :real line’)
text(length(x0)/2,Hatx00(length(x0))/2,’Simulation data :broken line’)
end
Step2:在MATLAB窗口中運行程序.
clear
x0=[2.67 3.13 3.25 3.36 3.56 3.72];
fungry1(x0);
T=1
HatA=
-0.0440
2.9256
p=1
The model is good and the forecast is:
3.8756
如圖,實線表示真實值,虛線表示預測值,兩條線幾乎重合,表明預測值與真實值很接近,該模型可以較準確地進行預測.
五、結 語
灰色預測方法不受數據多少的限制,對數據分布類型及變量間的相關類型無特殊要求.灰色預測方法具有短期預測精度較高,模型可檢驗,參數的估計方法較簡單等特點,用灰色GM(1,1)模型對經濟指標的變化規律進行模擬,具有一定的實際意義.
從上面的實例可以看出,與人工計算相比較,MATLAB可以方便、快捷、準確、直觀地進行預測分析.同樣,經濟中的許多問題,如經濟進貨批量、財務杠桿效應、企業經營業績評價、量本利多因素分析等,都可以利用MATLAB求解.
【參考文獻】
[1]李工農,阮曉青,徐晨.經濟預測與決策及其Matlab實現.清華大學出版社,2007.
[2]韓中庚.數學建模方法及其應用.高等教育出版社,2006.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文