zoukankan      html  css  js  c++  java
  • 灰色理论预测模型

    灰色理论

    通过对原始数据的处理挖掘系统变动规律,建立相应微分方程,从而预测事物未来发展状况。 
    优点:对于不确定因素的复杂系统预测效果较好,且所需样本数据较小; 
    缺点:基于指数率的预测没有考虑系统的随机性,中长期预测精度较差。

    灰色预测模型

    在多种因素共同影响且内部因素难以全部划定,因素间关系复杂隐蔽,可利用的数据情况少下可用,一般会加上修正因子使结果更准确。 
    灰色系统是指“部分信息已知,部分信息未知“的”小样本“,”贫信息“的不确定系统,以灰色模型(G,M)为核心的模型体系。

    灰色预测模型建模机理

    灰色系统理论是基于关联空间、光滑离散函数等概念,定义灰导数与会微分方程,进而用离散数据列建立微分方程形式的动态模型。

    灰色预测模型实验

    以sin(pi*x/20)函数为例,以单调性为区间检验灰色模型预测的精度 
    这里写图片描述
    这里写图片描述

    通过实验可以明显地看出,灰色预测对于单调变化的序列预测精度较高,但是对波动变化明显的序列而言,灰色预测的误差相对比较大。究其原因,灰色预测模型通过AGO累加生成序列,在这个过程中会将不规则变动视为干扰,在累加运算中会过滤掉一部分变动,而且由累加生成灰指数律定理可知,当序列足够大时,存在级比为0.5的指数律,这就决定了灰色预测对单调变化预测具有很强的惯性,使得波动变化趋势不敏感。

    本文所用测试代码:

      1 clc
      2 clear all
      3 % 本程序主要用来计算根据灰色理论建立的模型的预测值。
      4 % 应用的数学模型是 GM(1,1)。
      5 % 原始数据的处理方法是一次累加法。
      6 x=[0:1:10];
      7 x1=[10:1:20];
      8 x2=[0:1:20];
      9 y=sin(pi*x/20);
     10 n=length(y);
     11 yy=ones(n,1);
     12 yy(1)=y(1);
     13 for i=2:n
     14     yy(i)=yy(i-1)+y(i);
     15 end
     16 B=ones(n-1,2);
     17 for i=1:(n-1)
     18     B(i,1)=-(yy(i)+yy(i+1))/2;
     19     B(i,2)=1;
     20 end
     21 BT=B';
     22 for j=1:n-1
     23     YN(j)=y(j+1);
     24 end
     25 YN=YN';
     26 A=inv(BT*B)*BT*YN;
     27 a=A(1);
     28 u=A(2);
     29 t=u/a;
     30 t_test=5;  %需要预测个数
     31 i=1:t_test+n;
     32 yys(i+1)=(y(1)-t).*exp(-a.*i)+t;
     33 yys(1)=y(1);
     34 for j=n+t_test:-1:2
     35     ys(j)=yys(j)-yys(j-1);
     36 end
     37 x=1:n;
     38 xs=2:n+t_test;
     39 yn=ys(2:n+t_test);
     40 det=0;
     41 for i=2:n
     42     det=det+abs(yn(i)-y(i));
     43 end
     44 det=det/(n-1);
     45 
     46 subplot(2,2,1),plot(x,y,'^r-',xs,yn,'b-o'),title('单调递增' ),legend('实测值','预测值');
     47 disp(['百分绝对误差为:',num2str(det),'%']);
     48 disp(['预测值为: ',num2str(ys(n+1:n+t_test))]);
     49 
     50 
     51 %递减
     52 y1=sin(pi*x1/20);
     53 n1=length(y1);
     54 yy1=ones(n1,1);
     55 yy1(1)=y1(1);
     56 for i=2:n1
     57     yy1(i)=yy1(i-1)+y1(i);
     58 end
     59 B1=ones(n1-1,2);
     60 for i=1:(n1-1)
     61     B1(i,1)=-(yy1(i)+yy1(i+1))/2;
     62     B1(i,2)=1;
     63 end
     64 BT1=B1';
     65 for j=1:n1-1
     66     YN1(j)=y1(j+1);
     67 end
     68 YN1=YN1';
     69 A1=inv(BT1*B1)*BT1*YN1;
     70 a1=A1(1);
     71 u1=A1(2);
     72 t1=u1/a1;
     73 t_test1=5;  %需要预测个数
     74 i=1:t_test1+n1;
     75 yys1(i+1)=(y1(1)-t1).*exp(-a1.*i)+t1;
     76 yys1(1)=y1(1);
     77 for j=n1+t_test1:-1:2
     78     ys1(j)=yys1(j)-yys1(j-1);
     79 end
     80 x21=1:n1;
     81 xs1=2:n1+t_test1;
     82 yn1=ys1(2:n1+t_test1);
     83 det1=0;
     84 for i=2:n1
     85     det1=det1+abs(yn1(i)-y1(i));
     86 end
     87 det1=det1/(n1-1);
     88 
     89 subplot(2,2,2),plot(x1,y1,'^r-',xs1,yn1,'b-o'),title('单调递增' ),legend('实测值','预测值');
     90 disp(['百分绝对误差为:',num2str(det1),'%']);
     91 disp(['预测值为: ',num2str(ys1(n1+1:n1+t_test1))]);
     92 
     93 %整个区间
     94 y2=sin(pi*x2/20);
     95 n2=length(y2);
     96 yy2=ones(n2,1);
     97 yy2(1)=y2(1);
     98 for i=2:n2
     99     yy2(i)=yy2(i-1)+y2(i);
    100 end
    101 B2=ones(n2-1,2);
    102 for i=1:(n2-1)
    103     B2(i,1)=-(yy2(i)+yy2(i+1))/2;
    104     B2(i,2)=1;
    105 end
    106 BT2=B2';
    107 for j=1:n2-1
    108     YN2(j)=y2(j+1);
    109 end
    110 YN2=YN2';
    111 A2=inv(BT2*B2)*BT2*YN2;
    112 a2=A2(1);
    113 u2=A2(2);
    114 t2=u2/a2;
    115 t_test2=5;  %需要预测个数
    116 i=1:t_test2+n2;
    117 yys2(i+1)=(y2(1)-t2).*exp(-a2.*i)+t2;
    118 yys2(1)=y2(1);
    119 for j=n2+t_test2:-1:2
    120     ys2(j)=yys2(j)-yys2(j-1);
    121 end
    122 x22=1:n2;
    123 xs2=2:n2+t_test2;
    124 yn2=ys2(2:n2+t_test2);
    125 det2=0;
    126 for i=2:n2
    127     det2=det2+abs(yn2(i)-y2(i));
    128 end
    129 det2=det2/(n2-1);
    130 
    131 subplot(2,1,2),plot(x2,y2,'^r-',xs2,yn2,'b-o'),title('全区间' ),legend('实测值','预测值');
    132 disp(['百分绝对误差为:',num2str(det2),'%']);
    133 disp(['预测值为: ',num2str(ys2(n2+1:n2+t_test2))]);
  • 相关阅读:
    内网其他服务器节点连接Mysql数据库很慢的解决方案
    MongoDB分片技术原理和高可用集群配置方案
    Hive事务原理和Datax同步事务表问题解决
    Mysql使用存储过程创建测试数据
    Hive的原生部署方式
    ByteArray的操作总结(复制、打印、位运算)
    句柄
    C# 使用指针将不同值类型赋值到字节数组中
    对象、字节流转换
    ASP.NET Core学习日志1
  • 原文地址:https://www.cnblogs.com/ECJTUACM-873284962/p/6721913.html
Copyright © 2011-2022 走看看