作者:桂。
時間:2017-08-12 08:34:06
鏈接:http://www.cnblogs.com/xingshansi/p/7348714.html
前言
灰色模型(Gray model)常用來對數據進行預測,這里簡要記錄其思路。
一、名稱由來
灰色模型(Gray Model),鄧聚龍教授1982年提出。
常見系統分類:
- 白色系統是指一個系統的內部特征是完全 已知的,即系統的信息是完全充分的。
- 黑色系統是指一個系統的內部信息對外界來說是一無所知的,只能通過它與外界的聯系來加以觀測研究。
- 灰色系統內的一部分信息是已知的,另一部分信息是未知的,系統內各因素間有不確定的關系。
通常成灰色預測模型為GM(n,h)模型,常用來預測的是GM(1,1):

二、算法原理
A-模型建立
有觀測序列:


計算一階累加序列:


其中



得出參數估計

C-序列預測

這里取

將其帶入上面一階方程解(參數已求出)
取t為離散值(t = k+1)
而
這樣便完成了預測。

三、代碼實現
主函數
clc;clear all;close all set(0,'defaultfigurecolor','w'); %{ 參考:《離散模型與灰色預測模型建模機理》,謝乃明,劉思峰 本程序主要用來計算根據灰色理論建立的模型的預測值。 應用的數學模型是 GM(1,1)。 原始數據的處理方法是一次累加法。 %} f = @(t,b)(0.3*t.^2+b+0.3*randn(1,length(t)));%定義待預測函數 t = 0:.2:5; b = 3; x0 = f(t,b); x_pre = GM11(x0); plot(t,x0,'k',t,x_pre,'r--'); xlabel('時間(年)'); ylabel('幅度'); title('GM11預測模型'); legend('原始數據','預測數據');
GM11的function:
function x_pre = GM11(x0) x0 = x0(:); n = length(x0); x1 = cumsum(x0); for i = 1:n-1 G(i,1) = -(x1(i)+x1(i+1))/2; G(i,2) = 1; end Y = x0(2:end); belta = pinv(G'*G)*G'*Y; a = belta(1); u = belta(2); %predict x_pre1 = zeros(n,1); x_pre = x_pre1; for k = 0:n-1 x_pre1(k+1) = (x0(1)-u/a)*exp(-a*k)+u/a; end x_pre(1) = x0(1); for k = 1:n-1 x_pre(k+1) = x_pre1(k+1)-x_pre1(k); end
結果圖: