灰色马尔科夫模型matlab实现
灰色馬爾科夫模型matlab
- 灰色預測GM(1,1)
- 模型檢驗
- 灰色馬爾科夫預測模型
- 仿真結果
- matlab源碼
灰色預測GM(1,1)
- 對待預測序列X0={x0,1,x0,2,?,x0,n}X_0 = \{ x _ { 0 , 1 } , x _ { 0 , 2 } , \cdots , x _ { 0 , n } \}X0?={x0,1?,x0,2?,?,x0,n?},生成X0X_0X0?的一次累加序列X1={x1,1,x1,2,?,x1,n}X_1 = \{ x _ { 1 , 1 } , x _ { 1 , 2 } , \cdots , x _ { 1 , n } \}X1?={x1,1?,x1,2?,?,x1,n?},其中:
x1,k=∑t=1kx0,i(k=1,2,?,n)x _ { 1 , k } = \sum _ { t = 1 } ^ { k } x _ { 0 , i } \quad ( k = 1 , 2 , \cdots , n )x1,k?=t=1∑k?x0,i?(k=1,2,?,n) - 對原始數據進行級比檢驗。先計算原始數據的級比ρk\rho_kρk?序列:
ρk=x0,k?1x0,k(k=2,?,n)\rho_ {k } = \frac { x _ { 0 , k - 1 } } { x _ { 0 , k } } \quad ( k = 2 , \cdots , n )ρk?=x0,k?x0,k?1??(k=2,?,n) - 再判斷ρk\rho_kρk? 是否均在可容性覆蓋區間?=(e?2/(n+1),e2/(n+1))\partial = ( e ^ { - 2 /( n + 1 )} , e ^ { 2 /( n + 1 )} )?=(e?2/(n+1),e2/(n+1))內。若是,則相應數據序列可以建立灰色GM(1,1)GM( 1, 1)GM(1,1)模型; 否則,應選取適當的常數 bbb對該組數據進行平移轉換處理,使處理后的數據序列 Y0=y0,1,y0,2,?,y0,nY_0 = { y _ { 0 , 1 } , y _ { 0 , 2 } , \cdots , y _ {0 , n} }Y0?=y0,1?,y0,2?,?,y0,n? 的級比落入可容性覆蓋區間內,其平移轉換過程為:
y0,k=x0,k+by _ { 0 , k } = x _ { 0 , k } + by0,k?=x0,k?+b
通過一次累加序列 X1X_1X1?,建立南四湖灰色GM(1,1)GM( 1,1)GM(1,1) 模型的一階微分方程:
dX1dt+αX1=q\frac { d X _ { 1 } } { d t } + \alpha X _ { 1 } = qdtdX1??+αX1?=q
式中:α,q\alpha, qα,q分別為發展系數和灰色作用量。 - 設a=(α,q)Ta = ( \alpha , q ) ^ { T }a=(α,q)T運用最小二乘法,求解:
a=(α,q)T=(BTB)?1BTDa = ( \alpha , q ) ^ { T } = ( B ^ { T } B ) ^ { - 1 } B ^ { T } Da=(α,q)T=(BTB)?1BTD
其中B=[?0.5(x1+x2)1??(?0.5xn?1+xn)1]D=[x0,2x0,0,2]B = \left[ \begin{array} { l l } { - 0.5 (x _ { 1 }+x_2) } & { 1 } \\ { \cdots } & \cdots \\ { (- 0.5 x _ { n-1 } +x _ { n} ) } & { 1 } \end{array} \right] \quad D = \left[ \begin{array} { l l } { x _ { 0 , 2 } } \\ { x _ { 0 , 0 , 2 } } \end{array} \right]B=????0.5(x1?+x2?)?(?0.5xn?1?+xn?)?1?1????D=[x0,2?x0,0,2??] - 得到灰色 GM( 1,1) 模型:
x^1,k+1=(x0,1?qα)e?ak+qα\hat{x}_ { 1 , k + 1 } = ( x _ { 0 , 1 } - \frac { q } { \alpha } ) e ^ { - a k } + \frac { q } { \alpha }x^1,k+1?=(x0,1??αq?)e?ak+αq? - 將累加值x^1,k+1\hat{x}_ { 1 , k + 1 }x^1,k+1?經過一次累減還原成預測值x^0,k+1\hat{x}_ { 0 , k + 1 }x^0,k+1?
x^0,k+1=x^1,k+1?x^1,k\hat{x}_ { 0 , k + 1 } = \hat{x} _ { 1 , k + 1 } - \hat{x}_ { 1 , k }x^0,k+1?=x^1,k+1??x^1,k?
模型檢驗
為了檢驗模型的可信度,需對預測值進行后驗差檢驗。建立一階殘差序列:
E0={e0,1,e0,2,?,e0,n}={x^0,2?x^0,2,x^0,3?x^0,3,?,x^0,k?x^0,k,x^0,k}E _ { 0 } = \{ e _ { 0 , 1 } , e _ { 0 , 2 } , \cdots , e _ { 0 , n } \} =\\ \{ \hat{x}_ { 0 , 2 } - \hat{x}_ { 0 , 2 } , \hat{x}_ { 0 , 3 } - \hat{x}_ { 0 , 3 } , \cdots , \hat{x}_ { 0 , k } - \hat{x}_ { 0 , k } , \hat{x}_ { 0 , k } \}E0?={e0,1?,e0,2?,?,e0,n?}={x^0,2??x^0,2?,x^0,3??x^0,3?,?,x^0,k??x^0,k?,x^0,k?}
原始數據序列的方差為 s1s_1s1?,殘差序列 E0E_0E0?的方差為 s2s_2s2?,分別計算后驗比 ccc 與小誤差概率 ppp:
c=s2s1p={140,k?A0∣<0.6745s1}c = \frac { s _ { 2 } } { s _ { 1 } }\\ p = \{ 14 _ { 0 , k } - A _ { 0 } | \lt 0.6745 s _ { 1 } \}c=s1?s2??p={140,k??A0?∣<0.6745s1?}
其中ppp和ccc的大小共同決定模型精度等級。表給出了 4 級好、合格、基本合格和不合格的模型精度等級。模型ccc越小,ppp越大,則模型精度高。ccc越小,則s1s_1s1?越大、s2s_2s2?越小,即原始數據序列離散程度大,殘差序列離散程度小,由模型所得預測值與原始數據相差小,ppp 值越大則表明預測值較為均勻。若檢驗精度等級符合要求,則建立的灰色 GM(1,1)GM( 1,1)GM(1,1) 模型可直接預測數據; 若精度等級不符合,則對預測數據進行修正。
灰色馬爾科夫預測模型
對E0E_0E0?建立灰色GM(1,1)GM( 1,1)GM(1,1)模型:
e^1,k+1=(e0,2?q′α′)e?α′t+q′α′(k=2,3,?,n)\hat{e} _ { 1 , k + 1 } = ( e _ { 0 , 2 } - \frac { q ^ { \prime } } { \alpha ^ { \prime } } ) e ^ { - \alpha ^ {{ \prime } t } } + \frac { q ^ { \prime } } { \alpha ^ { \prime } } \quad ( k = 2 , 3 , \cdots , n )e^1,k+1?=(e0,2??α′q′?)e?α′t+α′q′?(k=2,3,?,n)
將模型進行累減還原,得到殘差修正值 e^0,k+1\hat{e} _ { 0 , k + 1 }e^0,k+1?:
e^0,k+1=e^1,k+1?e^1,k\hat{e} _ { 0, k + 1 } = \hat{e} _ { 1 , k + 1 } - \hat{e} _ { 1 , k } e^0,k+1?=e^1,k+1??e^1,k?
采用殘差修正值 e^0,k+1\hat{e} _ { 0, k + 1 }e^0,k+1? 對傳統GM( 1,1) 模型預測值進行修正,得到修正后的:
x^0,k′=x^0,k+m0,ke^0,k+1\hat{x} _ { 0 , k } ^ { \prime }= \hat{x} _ { 0 , k } + m _ { 0 , k }\hat{e} _ { 0, k + 1 }x^0,k′?=x^0,k?+m0,k?e^0,k+1?
其中:
m0,k={1(x0,k?x0,k>0)?1(x0,k?x0,k<0)m _ { 0 , k } = \{ \begin{array} { l l } { 1 } & { ( x _ { 0 , k } - x _ { 0 , k } \gt 0 ) } \\ { - 1 } & { ( x _ { 0 , k } - x _ { 0 , k } \lt 0 ) } \end{array}m0,k?={1?1?(x0,k??x0,k?>0)(x0,k??x0,k?<0)?
引入灰色馬爾科夫模型判斷 m0,km _ { 0 , k }m0,k? 的正負。適用于預測隨機變化無規律的數據,彌補了傳統 GM(1,1)GM( 1,1)GM(1,1) 模型對波動性和趨勢性數據預測精度低的不足。其計算過程如下:
- 根據 E0E_0E0? 劃分狀態。本文劃分兩種狀態,狀態 1 表示殘差為正,狀態 2 表示殘差為負。
- . 求從狀態 iii 轉移到狀態 jjj 經過的次數所占的概率 pijp_{ij}pij?:
pij=MijMi(i=1,2;j=1,2)p _ { i j } = \frac { M _ { i j } } { M _ { i } } ( i = 1 , 2 ; j = 1 , 2 )pij?=Mi?Mij??(i=1,2;j=1,2)
式中:MijM_{ij}Mij?為狀態iii轉移到狀態jjj經過的次數;MiM_iMi?為狀態iii出現的總次數。根據式得到狀態轉移矩陣PPP
P=[P11P12P21p22]P = \left[ \begin{array} { l l } { P _ { 11 } } & { P _ { 12 } } \\ { P _ { 21 } } & { p _ { 22 } } \end{array} \right]P=[P11?P21??P12?p22??] - 選定殘差序列最后一個值的狀態作為初始狀態向量 μ0\mu_0μ0?。設 μ0=(μ0,1,μ0,2)\mu_0 = ( \mu_{0,1}, \mu_0,2 )μ0?=(μ0,1?,μ0?,2),其中 μ0,1,μ0,2\mu_{0,1}, \mu_{0,2}μ0,1?,μ0,2?分別代表處于狀態 1 和狀態 2 時的概率。即最后一個殘差值若為正,μ0=(1,0)\mu_0 = ( 1,0)μ0?=(1,0) ; 若為負,μ0=(0,1)\mu_0 = ( 0,1)μ0?=(0,1) 。
- 根據μt=μ0Pt\mu_ { t } = \mu _ { 0 } P ^ { t }μt?=μ0?Pt求出經過ttt次狀態轉移后,第ttt次的狀態概率。選取概率最大的狀態作為最終結果,若兩種狀態概率相等,取前一次計算的結果:
仿真結果
matlab源碼
https://mianbaoduo.com/o/bread/YpWWkphs源碼
總結
以上是生活随笔為你收集整理的灰色马尔科夫模型matlab实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3交互模式下 按上翻箭头显示
- 下一篇: Mysql之Innodb锁模式和死锁解析