灰色預測的MATLAB程序

         灰色預測適用於小樣本的預測,經常使用來解決一些不肯定性的問題。spa

        理論知識書上都有介紹,下面僅列出程序設計,同時方便本身比賽。設計

        MATLAB是實現灰色預測過程的首選,用MATLAB編寫灰色預測程序時,能夠徹底按照預測模型的求解步驟進行,也就是下面的步驟:code

  • 對原始數據進行累加;
  • 構造累加矩陣B與常數向量;
  • 求解灰參數;
  • 將參數代入預測模型進行數據預測。

       下面舉例,一個公司1999到2008年的利潤爲[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670],如今要預測該公司將來幾年的利潤狀況。ci

       在程序中咱們僅僅預測該公司10年之後的狀況,數據可修改,把(n+10)裏的10改爲你須要的數字便可。table

      代碼:模板

clc,clear;
syms a b;
c=[a b]';
A=[89677,99215,109655,120333,135823,159878,182321,209407,246619,300670];
B=cumsum(A);  %原始數據累加
n=length(A);
for i=1:(n-1)
    C(i)=(B(i)+B(i+1))/2; %生成累加矩陣
end
%計算待定參數的值
D=A;D(1)=[];
D=D';
E=[-C;ones(1,n-1)];
c=inv(E*E')*E*D;
c=c';
a=c(1);b=c(2);
%預測後續數據
F=[];F(1)=A(1);
for i=2:(n+10)  %只推測後10個數據,能夠今後修改
    F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a;
end
G=[];G(1)=A(1);
for i=2:(n+10)  %只推測後10個數據,能夠今後修改
    G(i)=F(i)-F(i-1);  %獲得預測出來的數據
end
t1=1999:2008;
t2=1999:2018;  %多10組數據
G
h=plot(t1,A,'o',t2,G,'-'); %原始數據與預測數據的比較
set(h,'LineWidth',1.5);    
預測數據與原始數據的比較,運行結果,其中圈表明原始數據,線是預測數據擬合的結果,想看每一年對應的實際數據看矩陣G值,MATLAB有輸出在command window裏:

         下面爲說明該程序的模板做用,舉例說明CUMCM2005A題 長江水質的預測,其中1995年到2004年的長江污水排放數據以下:程序設計

1995 1996 1997 1998 1999 2000 2001 2002 2003 2004
174 179 183 189 207 234 220.5 256 270 285

     代碼和上同樣,只是數據區改了,功能是預測長江將來10年的水質狀況。

    代碼:class

clc,clear;
syms a b;
c=[a b]';
<span style="color:#ff0000;"><strong>A=[174,179,183,189,207,234,220.5,256,270,285];</strong></span>
B=cumsum(A);  %原始數據累加
n=length(A);
for i=1:(n-1)
    C(i)=(B(i)+B(i+1))/2; %生成累加矩陣
end
%計算待定參數的值
D=A;D(1)=[];
D=D';
E=[-C;ones(1,n-1)];
c=inv(E*E')*E*D;
c=c';
a=c(1);b=c(2);
%預測後續數據
F=[];F(1)=A(1);
for i=2:(n+10)  %只推測後10個數據,能夠今後修改
    F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a;
end
G=[];G(1)=A(1);
for i=2:(n+10)  %只推測後10個數據,能夠今後修改
    G(i)=F(i)-F(i-1);  %獲得預測出來的數據
end
t1=1995:2004;
t2=1995:2014;  %多10組數據
G
h=plot(t1,A,'o',t2,G,'-'); %原始數據與預測數據的比較
set(h,'LineWidth',1.5);    

預測結果:


版權聲明:本文爲博主原創文章,未經博主容許不得轉載。程序

相關文章
相關標籤/搜索