QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3426|回复: 0
打印 上一主题 下一主题

matlab 灰色系统预测 GM(1,1) 数学建模

[复制链接]
字体大小: 正常 放大

100

主题

17

听众

7546

积分

升级  50.92%

  • TA的每日心情
    开心
    2018-6-4 15:01
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    群组2018年大象老师国赛优

    群组高考备战

    群组2018中小学数学建模冬

    跳转到指定楼层
    1#
    发表于 2018-10-31 09:23 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    本文代码主要是基于邓聚龙教授在20实际80年代提出的灰色系统理论。
    - D% D% K- M; u+ |0 _; p) V; RGM0.m* m$ O+ t0 J; Z" f- o5 @2 Z
    %该函数为GM(1,1)模型返回还原值
    " ?& K. `9 y9 B2 {function f=GM0(x0,t)  %数据数列
    ) r! M4 G4 Q. \4 G7 n) w  o[M,N]=size(x0);        %算出数据数列的大小 $ {/ K  R3 N- j* K7 x  l
    x1(1)=x0(1);           %累加生成数列
    $ y" e" @. F: f3 |  L5 _for i=2:N;     ; U7 b' e- u3 M3 `
        x1(i)=x1(i-1)+x0(i);
    . ?/ h  ?9 M! O" h- Q9 C' @end/ a4 I% l' L5 N
    x2=[];              %累加生成数列均值生成数列 : \4 m8 I8 m+ P# V- e  E. T
    for j=1N-1);     ! r( Z5 ~# H7 S& I  l' a7 A2 _
        x2(j)=(x1(j)+x1(j+1))/2;
    0 Z; t. [6 d# q/ ^end
    , q  J0 c# U4 S$ O& ]x=x0;              %数据数列镜像( ~6 d7 w5 J9 \8 x" g# O
    x(1)=[];           %删除第一个数据 # K! ^8 n  h8 N) z
    Y=x';              %数据列向量
    $ b# w$ a& l6 B" {9 `5 @global a;
      V) r% O  r9 o3 D5 yglobal b; 6 d& P* B% J; f5 O( F1 E
    B(:,1)=-x2';% Z$ z8 q* b3 d3 m6 t7 B+ D
    B(:,2)=1; 5 v2 E0 V+ `# ^. l4 h8 M" n; u. ]
    A=inv(B'*B)*B'*Y;   %求参量a,b组成的参数向量 ) {' ]5 M5 b- a( X0 |5 f
    a=A(1,1);           %求参数a
    : V4 Y  }. p! {b=A(2,1);           %求参数b  
    3 n5 r, K* Q* x0 m7 V; t) Ff=(1-exp(a))*(x0(1)-b/a)*exp(-a*(t-1));1 n: o6 t. z5 l! h% H: _& f4 s
    f( \( Q! R1 U6 I% q  l# F$ l
    & U& j7 ?) [' M7 D
    GM1.m:
    $ a# h3 k; A" g- ?%该函数为GM(1,1)模型中数据数列进行光滑比检验 & B8 C& y) S( B3 T* \+ P3 Q
    function f=GM1(x0)   %数据数列 & {' ?" N6 K4 i( I2 T
    N=max(size(x0));       %算出数据数列的大小  
    , W8 @5 \7 ]% V( D7 k: u- Hx1=cumsum(x0);         %累加生成数列 ! |) O! h) C0 C) m* o2 c  W& L
    global J;
    5 I: ^8 x0 k- H; j. l& Xglobal J1;8 T8 m! s; D( c; Y  x. }
    global J2;
    * e5 q4 o+ ~' q( W5 Wx0(1)=[];
    6 y; g; m, J1 k" d# m# e" a- ox1(N)=[]; # T$ _$ x% E! \9 R+ _. w7 F
    global r;* [  w& D3 u, w2 v! Z8 A6 a, i
    r=x0./x1;  8 I8 [. [$ a* X% R5 n# {3 Y
    for j=2N-1);           %判断数据数列是否满足准光滑条件1   
    * ~& G' s; S& u( q; h& U   if(r(j)>=0.5||r(j)<0)         
    5 L" f% E1 ~1 M       J1=0;         
    / i# [2 l+ Y! J       break;     
    8 m, O# S2 W8 i   else
    8 O$ D4 R# G" e6 Y. q( Q* G       J1=1;     . N7 t! k( Y% \. k  d
       end
    5 }5 t8 o8 K3 w- G) Y& B) D* Q" \end
    * E% I. L* t! hfor l=1N-2);           %判断数据数列是否满足准光滑条件2     - v7 ]: A1 @8 S5 L
        if((r(l+1)/r(l))>=1)         ! h* s5 K1 Z& v1 w5 p" z$ {
            J2=0;         
    % z: `. R0 u8 z: X9 T: w! X        break;     
    : x- |& \5 v# t4 ]* L9 o    else4 T' f9 u8 D$ @2 k& q  ?
            J2=1;     
    * \0 ^  \* c+ }    end
    & d6 U( M% R6 W" r, aend. _  f5 m! w$ N( z1 U1 s% _4 V
    J=J1+J2;  
    ! H. t/ c/ k6 N5 r& eif(J==2)                 %判断数据数列是否为准光滑数列     , t8 |6 P% I  M9 d
        disp('数据为准光滑数列')1 c; h) X5 C) }$ s8 P' ?5 }+ U
    else
    2 `% |0 G8 q5 t* {+ v+ W    disp('数据不是准光滑数列') # @5 j- d" i# n: w1 D8 A
    end4 a, k# h/ |4 O- i0 A

    - I! N" B7 M& M+ ?$ G% ?# F5 }. g. l1 XGM2.m
    6 h( Q" y4 h, R%该函数为GM(1,1)模型还原值参数计算
    1 o$ I( |" O+ h0 kfunction f=GM2(x0)  %数据数列+ N0 A, S' z$ p4 O* {; ?4 C
    [M,N]=size(x0);      %算出数据数列的大小  ( W3 w0 n+ ]- R
    x1(1)=x0(1);         %累加生成数列 2 q  [; ]" r  m; _( j( w
    for i=2:N;      
    3 c# z9 t, K1 T  L6 @    x1(i)=x1(i-1)+x0(i); % `( U( [6 ]! z$ ~9 Z7 P# c8 }
    end9 q$ H1 H0 t& I/ ]( |! z% S1 v
    x2=[];              %累加生成数列均值生成数列 8 ]6 [# D# S5 H7 Y
    for j=1N-1);      
    1 G8 T" d7 B9 S1 X! V) q    x2(j)=(x1(j)+x1(j+1))/2;+ s! w! T5 d" k6 ^! t  \
    end9 z7 h3 c, w7 j6 m
      x=x0;              %数据数列镜像      
    3 V8 W3 K9 N, X) n2 A& b  x(1)=[];           %删除第一个数据 ( k# q2 S, A" i/ s1 q# o
      Y=x';              %数据列向量
    6 W3 k0 v% M6 k  global a;
    ( @' k2 h( u% K3 z: @, ]  global b;
    6 d' V/ ~# X  ?9 c0 ^2 b  B(:,1)=-x2';
    ! Z( ?7 f" P. \. i0 P  B(:,2)=1;  
    ( u- E( A4 H6 O5 o6 p4 G! I  A=inv(B'*B)*B'*Y;   %求参量a,b组成的参数向量 ! Z, C% _4 U7 D+ d, l
      a=A(1,1);           %求参数a
    ) ?6 }. z; o8 v# _  disp('参数a为:')
    ) o7 ?7 o9 x1 x  a
    2 W4 n( A- }3 d  b=A(2,1);           %求参数b % g+ p8 i- f! h) ^3 }6 `$ U
      disp('参数b为:')
      Q0 D2 f) \  h3 G5 e" T3 d1 W  b
    6 y/ f2 J  _- {2 c& S
    ( \7 H$ m+ d6 b5 ^  F: qGM3.m# v4 [+ Z6 i: _! w
    %该程序实现G(1,1)模型的精度检验
    / s7 }( s# F" C- I% @$ p8 N%包括平均相对误差,绝对关联度,均方差比值,小误差概率检验+ k$ a- s5 M* F* a; V1 h6 W- O/ w2 F$ C
    function f=GM3(x0)
    7 q1 G3 ^4 S/ k$ t" a* x& pN=max(size(x0)); ( o/ k4 {  ^5 V! K' E
    x=GM0(x0,1:N);  %利用已有程序GM2得出数据列模型估计值
    * T. V8 ^- i8 Wx(1)=x0(1);     %更正第一个估计值
    3 v3 g% [. u1 {* H0 M8 wdisp('模型模拟估计值为') . r8 W' l% H& P& ?2 ~/ U$ m
    x
    + J( ?1 J6 }8 C/ x8 S; a4 eA=x-x0;         %计算绝对残差序列
    : ?0 ^7 I' I) D! mdisp('模型估计值绝对残差序列为:')6 W6 i  z( W8 X! Z1 X3 M
    A
    8 L3 V- x- L. |G=abs(A);
    7 A4 V5 h: D8 {Amin=min(G);    %计算最小绝对值绝对残差 ! x1 o, o; K9 p2 n, B
    Amax=max(G);    %计算最大绝对值绝对残差
    ' q4 c( g2 M; l. t9 }. G6 W& cB=A./x0;        %计算相对误差序列
    $ K) c9 x0 }  U8 mdisp('模型估计值相对误差序列为:')
    4 k7 q! v; h$ D3 _4 e) GB  
    , I2 c. w$ V, W, N8 G" lP=sum(abs(B))/N;     %计算平均相对误差 ) m7 G% y! `, R$ J3 l3 ]
    disp('模型估计值平均相对误差为:')
    , s$ f% p. ~) f* m* c3 aP  6 Y; X  l. \' a4 Q6 \, m
    for i=1:1:N       %通过循环计算关联系数序列     3 C& a$ m: p' k; F* _) v! D
        D(i)=(Amin+0.5*Amax)/(G(i)+0.5*Amax); + [+ M& c8 }' i" f' c1 d
    end
    3 I- D- W* t+ r  u8 a0 OR=sum(D)/N;  
    % `* M- d3 f" m. y. x; k. kdisp('关联度为:') 9 F9 T1 Z+ e' V" x+ A7 p
    R  8 g/ J: ]/ h& Z: o
    x_=sum(x0)/N;    %计算数据的均值  : Q+ |* {& |8 m: n; A! E
    S1=(sum((x0-x_).^2)/(N-1))^0.5;   %计算数据序列方均差
    # ^; }5 B' r; J6 S4 V1 Y( iA_=sum(A)/N;     %计算残差平均值  
    / {  Q% j3 U5 y0 ?# h6 aS2=(sum((A-A_).^2)/(N-1))^0.5;    %计算残差序列方均差
    3 }/ e+ A( e% B/ nC=S2/S1;         %计算方均差比值
      G# P5 u( ]" b1 N- v4 y2 S  n, ?disp('均方差比值为:')
    . V8 O$ _3 ]$ R7 K+ ^! a/ z& oC  
    ( t, g9 t% [! p  k- O+ u. E" ~% Q, _S0=0.6745*S1;$ c8 H* A6 r4 a$ W# s+ w
    E=A-A_; . t- b" \+ @8 w5 W/ E2 Z, z
    F=find(E<S0);
    ; [) ?' q. Z" x. J2 q* TM=max(size(F)); %计算小残差个数
    # h0 D% {9 v+ L9 X* i& N( Kp=M/N;          %计算小误差概率 & T$ n2 Q' i) Q* W
    disp('小误差概率为:')* M0 Y. D3 Y0 }; a$ r) w$ i
    p, a; |( L7 G! N" E0 x- H! z1 h, t4 @

    / ^5 y6 r1 o0 R8 @+ b- j8 g; n8 H' x/ W* a8 P7 [* Y% c. x

    " B. K: z8 s- r+ y9 z
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-12 20:33 , Processed in 0.406150 second(s), 50 queries .

    回顶部