1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Matlab与灰色模型预测

Matlab与灰色模型预测

时间:2021-05-30 20:04:41

相关推荐

Matlab与灰色模型预测

文章目录

引入1 GM (1, 1)模型2 程序框架

引入

灰色模型,又称灰色理论,具有实用性强、预测结果较稳定的优点;用于大数据量的预测,数据量较小时 (多于3个)也能取得较准确的结果。

灰色预测以灰色模型为基础,其中以单序列一阶线性微分方程模型,即GM (1, 1)最为常用。

1 GM (1, 1)模型

设有原始数据序列x0=(x01,x02,⋯,x0,n)\boldsymbol{x}_0=\left(x_{01}, x_{02}, \cdots, x_{0, n}\right)x0​=(x01​,x02​,⋯,x0,n​),nnn为数据个数,则以GM (1, 1)模型进行预测的基本步骤如下:

1)x0\boldsymbol{x}_0x0​累加,以降低原始序列的波动性和随机性,获得新序列x1=(x11,x12,⋯,x1,n)\boldsymbol{x}_1=\left(x_{11}, x_{12}, \cdots, x_{1, n}\right)x1​=(x11​,x12​,⋯,x1,n​),其中x1tx_{1t}x1t​的计算如下:

x1,t=∑k=1tx0,k,t=1,2,⋯,nx_{1, t} = \sum_{k = 1}^t x_{0, k},\ \ \ \ t = 1, 2, \cdots, n x1,t​=k=1∑t​x0,k​,t=1,2,⋯,n2)建立x1,tx_{1, t}x1,t​的一阶线性微分方程:

dx1dt+ax1=u\frac{\mathrm{d} \bm{x}_1}{\mathrm{d} t} + a \bm{x}_1 = u dtdx1​​+ax1​=u其中a∈[−2,2]a \in [-2, 2]a∈[−2,2]、uuu为待定系数,称为发展系数和灰色作用量,且将aaa、uuu构成的矩阵记作a^=(au)\bm{\hat{a}} = \left( \begin{array}{l}a\\u \end{array}\right)a^=(au​)

3)按以下方式生成B\boldsymbol{B}B矩阵和Yn\boldsymbol{Y}_nYn​向量:

B=[0.5(x11+x12)0.5(x12+x13)⋯0.5(x1,(n−1)+x1,n)]Yn=(x02,x03,⋯,x0,n)T\begin{array}{l} \boldsymbol{B} = \left[ \begin{array}{c} 0.5(x_{11} + x_{12})\\ 0.5(x_{12} + x_{13})\\ \cdots\\ 0.5(x_{1, (n - 1)} + x_{1, n})\\ \end{array} \right]\\ \\ \boldsymbol{Y}_n = (x_{02}, x_{03}, \cdots, x_{0, n})^{\mathrm{T}} \end{array} B=⎣⎢⎢⎡​0.5(x11​+x12​)0.5(x12​+x13​)⋯0.5(x1,(n−1)​+x1,n​)​⎦⎥⎥⎤​Yn​=(x02​,x03​,⋯,x0,n​)T​4)使用最小二乘法求a^\bm{\hat{a}}a^:

a^=(BTB)−1BTYn\bm{\hat{a}} = (\boldsymbol{B}^{\mathrm{T}}\boldsymbol{B})^{-1} \boldsymbol{B}^T \boldsymbol{Y}_n a^=(BTB)−1BTYn​5)将a^\bm{\hat{a}}a^带入微分方程,求得:

x^1,(t+1)=(x11−ua)e−at+ua\hat{x}_{1, (t + 1)} = (x_{11} - \frac{u}{a}) e^{-at} + \frac{u}{a} x^1,(t+1)​=(x11​−au​)e−at+au​这里写作x^1,(t+1)\hat{x}_{1, (t + 1)}x^1,(t+1)​是因为该值是一个近似值。

6)对函数表达式x^1,(t+1)\hat{x}_{1, (t + 1)}x^1,(t+1)​及x^1,t\hat{x}_{1, t}x^1,t​进行离散,并通过以下方式还原x0x_0x0​原序列:

x^0,(t+1)=x^1,(t+1)−x^1,t\hat{x}_{0, (t + 1)} = \hat{x}_{1, (t + 1)} - \hat{x}_{1, t} x^0,(t+1)​=x^1,(t+1)​−x^1,t​7)对建立的灰色模型进行检验,步骤如下:

7.1)计算x0,tx_{0, t}x0,t​与x^0,t\hat{x}_{0, t}x^0,t​之间的残差e0,te_{0, t}e0,t​和相对误差q(x)q (x)q(x):

e0,t=x0,t−x^0,tq(x)=e0,tx0,t\begin{array}{c} e_{0, t} = x_{0, t} - \hat{x}_{0, t}\\ q (x) = \frac{e_{0, t}}{x_{0, t}} \end{array} e0,t​=x0,t​−x^0,t​q(x)=x0,t​e0,t​​​

7.2)求原始数据x0x_0x0​的均值和方差s1s_1s1​;

7.3)求e0,te_{0, t}e0,t​的均值qˉ\bar{q}qˉ​以及方差s2s_2s2​;

7.4)计算方差比C=s2s1C = \frac{s_2}{s_1}C=s1​s2​​

7.5)求小误差概率P=P{∣e0,t∣<0.6745s1}P = P \{ |e_{0, t}| < 0.6745 s_1 \}P=P{∣e0,t​∣<0.6745s1​};

7.6)灰色模型精度检验表如下:

8)利用模型进行预测:

x^0=[x^01,x^02,⋯,x^0,n,⏟原数据的模拟x^0,(n+1),⋯,x^0,(n+m)⏟数据预测]\bm{\hat{x}}_0 = \left[ \underbrace{\hat{x}_{01}, \hat{x}_{02}, \cdots, \hat{x}_{0, n}, }_{_{_{\rm 原数据的模拟}}}\ \underbrace{\hat{x}_{0, (n + 1)}, \cdots, \hat{x}_{0, (n + m)} }_{_{_{\rm 数据预测}}}\right] x^0​=[原数据的模拟​​x^01​,x^02​,⋯,x^0,n​,​​数据预测​​x^0,(n+1)​,⋯,x^0,(n+m)​​​]

2 程序框架

代码实现,使用时只需给定序列和待预测数据个数:

function [hat_x] = test(x, n_pre)syms a u; % 创建符号变量hat_a = [a, u]'; % 待定系数x1 = cumsum(x); % 原始数据累加n = length(x);%% 生成B矩阵B = zeros(1, n - 1);for i = 1 : n - 1B(i) = (x1(i) + x1(i + 1)) / 2; endB = [-B; ones(1, n - 1)];%% 生成Y_n矩阵Y_n = x;Y_n(1) = [];Y_n = Y_n';%% 求解hat_ahat_a = inv(B * B') * B * Y_n;a = hat_a(1);u = hat_a(2);%% 预测hat_x1 = [];hat_x1(1) = x(1);for i = 2 : (n + n_pre)hat_x1(i) = (x(1) - u /a) / exp(a * (i - 1)) + u / a;endhat_x = [];hat_x(1) = x(1);for i = 2 : (n + n_pre)hat_x(i) = hat_x1(i) - hat_x1(i - 1);endend

参考文献:

[1]:MATLAB在数学建模中的应用,卓金武等。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。