GM11灰色模型


作者:桂。

時間: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-模型建立
有觀測序列:
計算一階累加序列:
其中
假設生成序列的一階模型( 核心思想):
對其積分(連續轉化為離散):
從而上式轉化為:
其中:
借助矩陣表示:
這便是一個 最小二乘求解問題。
   B-參數求解
定義:
計算均值生成序列:
得出參數估計
  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

結果圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM