MATLAB灰色预测
一.灰色預測
1.灰色系統下的灰色預測
<1>什么是灰色系統?
所謂的灰色系統其實就是夾雜在白色系統和黑色系統之中的一種系統,而白色系統就是全部信息已知的系統,黑色系統就是全部信息未知的系統。所以,夾在這兩種系統中間的灰色系統就是部分信息已知,而部分信息也是未知的系統。
<2>什么是灰色預測?
灰色預測就是在灰色系統中所作的預測?;疑A測就是在部分信息已知,而部分信息也是未知的前提下做的一種預測分析。灰色預測通過鑒別個因素之間的差異程度,進行關聯分析,對原始數據處理后生成一定規律性的序列,然后建立相應的微分方程模型,從而預測事物未來的發展趨勢,最后得到其發展的模型。
2.如何實現灰色預測GM(1,1)
<1>了解灰色生成
①累加生成: 通過數列間各時刻數據的依個累加以得到新的數據與數列。
(最開始看的時候我還不信累加生成能增強數據規律性所以我用MATLAB畫了個圖,對于[6 3 8 10 7]這組數據好像確實累加后規律更明顯,累加后的數列呈指數增長趨勢)
②累減生成: 將原始序列前后兩個數據相減得到累減生成序列。(將累加的數據累減就得到原始序列)
③均值生成: 將前后兩個數據相加在除以2得到均值生成序列。
<2>實現GM(1,1)——一階微分方程,且只含一個變量的灰色模型
原始序列
x(0)=(x(0)(1),x(0)(2),x(0)(3),...,x(0)(n))x^{(0)}=(x^{(0)}(1),x^{(0)}(2),x^{(0)}(3),...,x^{(0)}(n))x(0)=(x(0)(1),x(0)(2),x(0)(3),...,x(0)(n))
先累加操作得到序列
x(1)=(x(1)(1),x(1)(2),x(1)(3),...,x(1)(n))x^{(1)}=(x^{(1)}(1),x^{(1)}(2),x^{(1)}(3),...,x^{(1)}(n))x(1)=(x(1)(1),x(1)(2),x(1)(3),...,x(1)(n))x(1)(t)=∑k=1tx(1)(k)x^{(1)}(t)=\sum_{k=1}^{t}x^{(1)}(k)x(1)(t)=k=1∑t?x(1)(k)
然后均值操作累加生成的數列
z(1)=(z(1)(2),z(1)(3),...,z(1)(n))z^{(1)}=(z^{(1)}(2),z^{(1)}(3),...,z^{(1)}(n))z(1)=(z(1)(2),z(1)(3),...,z(1)(n))z(1)(k)=0.5x(1)(k)+0.5x(1)(k)z^{(1)}(k)=0.5x^{(1)}(k)+0.5x^{(1)}(k)z(1)(k)=0.5x(1)(k)+0.5x(1)(k)
對累加生成序列建立微分方程——白化微分方程(這里要說一下因為剛剛提過累加后的數列呈指數增長,所以可以用指數函數進行擬合所以建立如下微分方程)如下微分方程用數學知識求得明顯為指數關系
dx(1)dt+ax(1)=b\frac{dx^{(1)}}{dt}+ax^{(1)}=bdtdx(1)?+ax(1)=b
然后建立灰微分方程這里是知乎網友解釋的建立過程
x(0)(k)+az(1)(k)=bx^{(0)}(k)+az^{(1)}(k)=bx(0)(k)+az(1)(k)=b
aaa為發展系數,bbb為灰色作用量
根據最小二乘法求aaa,bbb其中a^\hat{a}a^=[aaa;bbb]
求解剛剛建立的白化微分方程
x(1)(t)=(x(1)(0)?ba)e?at+bax^{(1)}(t)=(x^{(1)}(0)-\frac{a})e^{-at}+\frac{a}x(1)(t)=(x(1)(0)?ab?)e?at+ab?
取x(1)(0)=x(0)(1)x^{(1)}(0)=x^{(0)}(1)x(1)(0)=x(0)(1),則
x(1)(k+1)=(x(0)(1)?ba)e?ak+bax^{(1)}(k+1)=(x^{(0)}(1)-\frac{a})e^{-ak}+\frac{a}x(1)(k+1)=(x(0)(1)?ab?)e?ak+ab?k=1,2,3,?,n?1k=1,2,3,\cdots,n-1k=1,2,3,?,n?1
最后累減還原即為預測方程x(0)(k+1)=x(1)(k+1)?x(1)(k)=(x(0)(1)?ba)(1?ea)e?akx^{(0)}(k+1)=x^{(1)}(k+1)-x^{(1)}(k)=(x^{(0)}(1)-\frac{a})(1-e^a)e^{-ak}x(0)(k+1)=x(1)(k+1)?x(1)(k)=(x(0)(1)?ab?)(1?ea)e?akk=1,2,3,?,n?1k=1,2,3,\cdots,n-1k=1,2,3,?,n?1
注意:①原始序列數據不一定要全部使用,相應建立的模型也會不同,即aaa和bbb不同。②原始序列數據必須要等時間間隔、不間斷。
<3>灰色模型檢驗
① 計算x(0)(t)x^{(0)}(t)x(0)(t)與x^(0)(t)\hat{x}^{(0)}(t)x^(0)(t)之間的殘差e(0)(t)e^{(0)}(t)e(0)(t)和相對誤差q(x)q(x)q(x):
e(0)(t)=x(0)(t)?x^(0)(t)e^{(0)}(t)=x^{(0)}(t)-\hat{x}^{(0)}(t)e(0)(t)=x(0)(t)?x^(0)(t)q(x)=e(0)(t)x(0)(t)q(x)=\frac{e^{(0)}(t)}{x^{(0)}(t)}q(x)=x(0)(t)e(0)(t)?
② 求原始數據的均值x0x^0x0以及方差s1s_1s1?。
③ 求e(0)(t)e^{(0)}(t)e(0)(t)的平均值qˉ\bar{q}qˉ?以及殘差的方差s2s_2s2?。
④ 計算方差比C=s2s1C=\frac{s_2}{s_1}C=s1?s2??。
⑤ 求小誤差概率P=P(∣e(t)∣<0.6745s1)P=P({|e(t)|<0.6745s_1})P=P(∣e(t)∣<0.6745s1?)。
⑥ 灰色精度檢驗如下表
| ⅠⅠⅠ級 | <0.01<0.01<0.01 | <0.35<0.35<0.35 | >0.95>0.95>0.95 |
| ⅡⅡⅡ級 | <0.05<0.05<0.05 | <0.50<0.50<0.50 | <0.80<0.80<0.80 |
| ⅢⅢⅢ級 | <0.10<0.10<0.10 | <0.65<0.65<0.65 | <0.70<0.70<0.70 |
| ⅣⅣⅣ級 | >0.20>0.20>0.20 | >0.80>0.80>0.80 | <0.60<0.60<0.60 |
在實際應用的過程中,檢驗模型精度的方法并不唯一??梢岳蒙鲜龇椒ㄟM行模型的檢驗,也可以根據q(x)q(x)q(x)的誤差百分比進行結合預測數據與實際數據之間的測試結果酌情認定模型是否合理。
<4>利用灰色模型預測
x^(0)\hat{x}^{(0)}x^(0)= [x^(0)(1),x^(0)(2),?,x^(0)(n)?原數列的模擬,x^(0)(n+1),x^(0)(n+2),?,x^(0)(n+m)?未來數列的預測][ \begin{matrix} \underbrace{\hat{x}^{(0)}(1),\hat{x}^{(0)}(2),\cdots,\hat{x}^{(0)}(n)} \\ 原數列的模擬 \end{matrix},\begin{matrix} \underbrace{\hat{x}^{(0)}(n+1),\hat{x}^{(0)}(n+2),\cdots,\hat{x}^{(0)}(n+m)} \\ 未來數列的預測\end{matrix} ][x^(0)(1),x^(0)(2),?,x^(0)(n)?原數列的模擬?,x^(0)(n+1),x^(0)(n+2),?,x^(0)(n+m)?未來數列的預測?]
二.灰色預測例子及代碼
1.長江污水排放預測
請以上表的數據為依據,預測2005-2014年長江的污水排放量(單位:億噸)。
2.長江污水排放預測MATLAB代碼
%2020/2/14,灰色模型學習進行預測2005-2014年長江的污水排放量(單位:億噸)。 clc;clear;close all; %% 數據準備 syms a b; %建立符號變量a(發展系數)和b(灰作用量) c=[a,b]'; A = [174, 179, 183, 189, 207, 234, 220.5, 256, 270, 285];%原始數列 A n = length(A); %求出A中元素個數 years=10; %預測未來年數 B = cumsum(A); %對原始數列 A 做累加得到數列 B for i = 2:n %對數列 B 做緊鄰均值生成C(i) = (B(i) + B(i - 1))/2; end C(1) = []; %這里注意C中元素個數為n-1所以刪去第一列 B=[-C;ones(1,n-1)]'; %構造數據矩陣 Y=A(2:n)'; %% 最小二乘法計算參數并求出預測數據 c=inv(B'*B)*B'*Y; %使用最小二乘法計算參數 a(發展系數)和b(灰作用量) a=c(1);b=c(2); %預測未來數據 F = []; F(1) = A(1); for i = 2:(n+years)F(i) = (A(1)-b/a)/exp(a*(i-1))+ b/a; end G = []; G(1) = A(1); %對數列 F 累減還原,得到預測出的數據 for i = 2:(n+years)G(i) = F(i) - F(i-1); %得到預測出來的數據 end disp(['預測數據為:',num2str(G)]); %% 模型檢驗 %計算殘差 H = G(1:10); epsilon = A - H; %計算相對誤差q q= abs(epsilon./A); Q=mean(q); disp(['相對殘差Q檢驗:',num2str(Q)]); %方差比C檢驗 C = std(epsilon, 1)/std(A, 1); disp(['方差比C檢驗:',num2str(C)]); %小誤差概率P檢驗 S1 = std(A, 1); temp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1); %找到數據中滿足條件數據位置 P = length(temp)/n; %求出滿足條件個數然后除以總個數求出概率 disp(['小誤差概率P檢驗:',num2str(P)]); %% 繪圖 t1 = 1995:2004; t2 = 1995:2014; plot(t1, A,'r*'); hold on; plot(t2, G, 'b-'); xlabel('年份'); ylabel('污水量/億噸'); legend('實際污水排放量','預測污水排放量'); title('長江污水排放量增長曲線'); grid on; %顯示網格3.運行結果
預測數據為:174 172.809 183.9355 195.7785 208.3839 221.801 236.082 251.2825 267.4616 284.6825 303.0122 322.5221 343.2881 365.3912 388.9175 413.9585 440.6118 468.9812 499.1772 531.3174 相對殘差Q檢驗:0.023399 方差比C檢驗:0.18697 小誤差概率P檢驗:1
2020/2/14灰色預測學習筆記,代碼參考《數學建模算法與應用》
總結
以上是生活随笔為你收集整理的MATLAB灰色预测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 孩子上网课奶奶不懂电脑调试,上海金山有一
- 下一篇: 【c++算法刷题笔记】——洛谷1