作者:桂。
時間: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
結果圖:


計算均值生成序列: