• 数学建模算法与应用:预测模型(2)灰色预测模型


    目录

    前言

             GM(1,1)预测模型

    1.GM(1,1)模型预测方法 

    2.GM(1,1)模型预测步骤

            (1)数据的检验与处理 

            (2)建立模型 

            (3)检验预测值 

    3.GM(1,1)模型预测实例

     (1)级比检验:建立交通噪声平均声级数据时间序列如下:

     (2)GM(1,1)建模

    (3)模型检验 

    4.MATLAB模型程序 


    前言

            灰色预测的主要特点是模型使用的不是原始数据序列,而是生成的数据序列。其核心体系是灰色模型( Grey Model ,简称 GM ),即对原始数据作累加生成(或其它方法生成)得到近似的指数规律再进行建模的方法。优点是不需要很多的数据,一般只需要4个数据就够,能解决历史数据少、序列的完整性及可靠性低的问题;能利用微分方程来充分挖掘系统的本质,精度高;

             能将无规律的原始数据进行生成得到规律性较强的生成序列,运算简便,易于检验,具有不考虑分布规律,不考虑变化趋势。缺点是只适用于中短期的预测,只适合指数增长的预测。

             GM(1,1)预测模型

            GM(1,1)表示模型是一阶微分方程,且只含1个变量的灰色模型。 

    1.GM(1,1)模型预测方法 

            定义1:已知参考数据列: x^{(0)}=(x^{(0)}(1),x^{(0)}(2),...,x^{(0)}(n)),一次累加生成序列(1-AGO)

    x^{(1)}=(x^{(1)}(1),x^{(1)}(2),...,x^{(1)}(n))=(x^{(0)}(1),x^{(0)}(1)+x^{(0)}(2),...,x^{(0)}(1)+...+x^{(0)}(n))

    2.GM(1,1)模型预测步骤

            (1)数据的检验与处理 

            (2)建立模型 

            (3)检验预测值 

    3.GM(1,1)模型预测实例

     (1)级比检验:建立交通噪声平均声级数据时间序列如下:

    x^{0}=(x^{0}(1),x^{0}(2),...,x^{0}(7))=(71.1,72.4,72.4,72.1,71.4,72.0,71.6)

     (2)GM(1,1)建模

    1)对原始数列x^{(0)}作一次累加,得x^{(1)}=(71.1,143.5,215.9,288,359.4,431.4,503)

             5)求生成序列预测值\widehat{x}^{(1)}(k+1)及模型还原值\widehat{x}^{(0)}(k+1),令k=1,2,3,4,5,6;

    由式(15.7)的时间响应函数可计算得\widehat{x}^{(1)},其中取\widehat{x}^{(1)}(1)=\widehat{x}^{(0)}(1)=x^{(0)}(1)=71.1,

    \widehat{x}^{(0)}(k+1)=\widehat{x}^{(1)}(k+1)-\widehat{x}^{(1)}(k),取k=1,2,3,4,5,6,得

            \widehat{x}^{(0)}=(\widehat{x}^{(0)}(1),\widehat{x}^{(0)}(2),...,\widehat{x}^{(0)}(7))=(71.1,72.4,72.2,72.1,71.9,71.7,71.6) 

    (3)模型检验 

             经验证,该模型的精度较高,可以进行预测和预报。

    4.MATLAB模型程序 

     代码如下,所示:

    1. x0=[71.1 72.4 72.4 72.1 71.4 72.0 71.6]'; %注意这里为列向量
    2. n=length(x0);
    3. lamda=x0(1:n-1)./x0(2:n) %计算级比
    4. range=minmax(lamda') %计算级比的范围
    5. x1=cumsum(x0) %累加运算
    6. B=[-0.5*(x1(1:n-1)+x1(2:n)),ones(n-1,1)];
    7. Y=x0(2:n);
    8. u=B\Y %拟合参数u(1)=a,u(2)=b
    9. syms x(t)
    10. x=dsolve(diff(x)+u(1)*x==u(2),x(0)==x0(1)); %求微分方程的符号解
    11. xt=vpa(x,6) %以小数格式显示微分方程的解
    12. yuce1=subs(x,t,[0:n-1]); %求已知数据的预测值
    13. yuce1=double(yuce1); %符号数转换成数值类型,否则无法作差分运算
    14. yuce=[x0(1),diff(yuce1)] %差分运算,还原数据
    15. epsilon=x0'-yuce %计算残差
    16. delta=abs(epsilon./x0') %计算相对误差
    17. rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda' %计算级比偏差值,u(1)=a

     结果:

    1. lamda =
    2. 711/724
    3. 1
    4. 724/721
    5. 103/102
    6. 119/120
    7. 180/179
    8. range =
    9. 711/724 103/102
    10. x1 =
    11. 711/10
    12. 287/2
    13. 2159/10
    14. 288
    15. 1797/5
    16. 2157/5
    17. 503
    18. u =
    19. 50/21333
    20. 15476/213
    21. xt =
    22. 31000.0 - 30928.9*exp(-0.00234379*t)
    23. yuce =
    24. 15
    25. 711/10 4996/69 9174/127 10738/149 9203/128
    26. 67
    27. 4519/63 13239/185
    28. epsilon =
    29. 15
    30. 0 -29/5051 1523/9300 121/3681 -472/947
    31. 67
    32. 790/2927 89/2353
    33. delta =
    34. 15
    35. 0 13/163931 89/39347 18/39481 67/9598
    36. 67
    37. 17/4535 41/77612
    38. rho =
    39. 15
    40. 62/3061 25/10679 -11/6077 -61/8199 171/16049
    41. 6
    42. -36/11137
    43. >>
  • 相关阅读:
    深度学习基础知识 nn.Sequential | nn.ModuleList | nn.ModuleDict
    【2022年11月22日提高A组】数论计算【SPFA】【数学】
    vue3+elementplus+flask 文件夹上传
    网络安全(黑客)自学
    好久不见!OneFlow 1.0全新版本上线
    Java面试题第八天
    链表-LRU缓存
    SVN服务备份
    Go语言高级编程:深度挖掘
    数据库系列:MySQL索引优化总结(综合版)
  • 原文地址:https://blog.csdn.net/weixin_69250798/article/details/125536539