資源簡介
本文參考了2篇論文,并給出了matlab實現,并附有論文。
本文采用最后的預測效果前50數據預測后面10個數據。效果如文件夾中result.jpg所示。可以通過CSDN交流。
本文僅僅提供入門級別的實現方法。

代碼片段和文件信息
%%?灰色預測模型
%???File?Name????????????:mine
%???Create?Date??????????:2016/08/09
%???Author???????????????:ZYZ
%???Abstract?Description?:Grey?Model-GM(11)
%???Note?????????????????:本文參考了博士論文《灰色預測技術及其應用研究》4.2節和論文《灰色預測GM_1_1模型的Matlab實現》
%%?
clear?all;?close?all;clc;
%load(‘TestData.mat‘);
data?=?xlsread(‘mine.xlsx‘‘1-1000‘‘A1:A60‘);%讀取60個原始樣本數據
%data=data+100;
n1=50;%用于訓練的樣本數目
x0_rawdata=data(1:n11)‘;%選取n1個作為訓練樣本
n2=size(data1);%訓練+預測未來的樣本數目
pre_rawdata=data(n1+1:n21)‘;
x=1:n2;
%E1加速指數變換
M=max(x0_rawdata);
m=min(x0_rawdata);
T=M/m;
T_power=0:n1-1;
Y=zeros(size(x0_rawdata));
Y=x0_rawdata.*(T.^T_power);
%E2幾何平均生成變換生成變換后的x0_rawdata
x0=zeros(size(x0_rawdata));
for?i=1:n1
??x0(1i)=(prod(Y(11:i)))^(1/i);
end
%1-AGO生成序列(累加)
x1=zeros(1n1);
x1(11)=x0(11);
for?i=2:n1
????x1(1i)=x1(1i-1)+x0(1i);
end
%緊鄰均值生成
z1=zeros(1n1-1);
for?i=1:n1-1
???z1(1i)=?0.5*(x1(1i)+x1(1i+1));
end
%計算矩陣B和向量yn
B=zeros(n1-12);
B(:1)=-z1‘;
B(:2)=ones(n1-11);
yn=x0(2:end)‘;
%計算參數a和b
A=inv(B‘*B)*B‘*yn;
a=A(11);
b=A(21);
%微分方程的離散化解(時間響應序列)
xx1=zeros(1n2);
k=0:n2-1;
xx1(1:)=(x0(1)-b/a)*exp(-a*k)?+b/a;
%還原:
xx0=zeros(1n2);
xx0(11)=x0(11);
for?i=2:n2
????xx0(i)=xx1(i)-xx1(i-1);
end
%還原1:變換后的x0的預測;還原2:x0的預測
%還原1
Y_undo=zeros(size(xx0));
Y_undo(11)=xx0(11);
for?i=2:n2
???Y_undo(1i)=?(xx0(1i)^i)/(xx0(1i-1)^(i-1));
end
%還原2
xx0_undo=zeros(size(Y_undo));
T_power_undo=0:n2-1;
xx0_undo=Y_undo./(T.^T_power_undo);
%殘差檢驗
e0=zeros(1n1);%絕對殘差
e0=x0_rawdata-xx0_undo(1:n1);
q=zeros(1n1);%相對殘差
q=e0./x0_rawdata;
q_mean=mean(abs(q));%平均相對誤差(已加絕對值)
q_max=max(abs(q));%最大相對誤差(已加絕對值)
fprintf(‘平均相對誤差q_mean為(已絕對值化):%f.\n‘q_mean);
fprintf(‘最大相對誤差q_max為(已絕對值化):%f.\n‘q_max);
%后驗差檢驗
x0_rawdata_mean=mean(abs(x0_rawdata));
S1=sqrt(sum((x0_rawdata-x0_rawdata_mean).^2)/(n1-1));
e0_mean=mean(abs(e0));
S2=sqrt(sum((e0-e0_mean).^2)/(n1-1));
C=S2/S1;%方差比
p_num=length(find(abs(e0-e0_mean)<0.6745*S1));
p=p_num/n1;%小誤差概率
fprintf(‘方差比C為:%f.\n‘C);
fprintf(‘小誤差概率p為:%f.\n‘p);
%預測結果的殘差檢驗
e0_pre=pre_rawdata-xx0_undo(n1+1:n2);%絕對殘差
q_pre=e0_pre./pre_rawdata;%相對殘差
q_pre_mean=mean(abs(q_pre));%平均相對誤差(已加絕對值)
q_pre_max=max(abs(q_pre));%最大相對誤差(已加絕對值)
fprintf(‘預測結果的平均相對誤差q_pre_mean為(已絕對值化):%f.\n‘q_pre_mean);
fprintf(‘預測結果的最大相對誤差q_pre_max為(已絕對值化):%f.\n‘q_pre_max);
%打印結果
plot(1:n2data(1:n21)‘‘k.-‘);
hold?on;
plot(1:n2xx0_undo‘r.-‘);
legend(‘原始值‘‘預測值‘);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-10-24?10:17??GM\
?????文件????????2821??2016-10-24?10:15??GM\mine.m
?????文件???????10040??2016-10-24?10:16??GM\mine.xlsx
?????文件?????????480??2016-10-24?10:23??GM\readme.txt
?????文件???????26064??2016-10-24?10:12??GM\result.jpg
?????目錄???????????0??2016-10-24?10:16??GM\灰色預測論文\
?????文件??????725101??2016-08-10?14:05??GM\灰色預測論文\灰色預測GM_1_1_模型的Matlab實現_朱登遠.pdf
?????文件??????969246??2016-08-12?10:10??GM\灰色預測論文\灰色預測技術及其應用研究_崔立志.caj
評論
共有 條評論