QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3430|回复: 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年代提出的灰色系统理论。: M$ \) I% Y8 N" u: ~
    GM0.m
    5 f7 u  o; i0 \8 T! n; H%该函数为GM(1,1)模型返回还原值
    6 y5 g, W! U6 o1 Jfunction f=GM0(x0,t)  %数据数列 2 n: g4 [* b$ K4 ?% Y
    [M,N]=size(x0);        %算出数据数列的大小 ! t" [8 l! N3 U! d5 r
    x1(1)=x0(1);           %累加生成数列 6 @8 N* C5 X% Z9 `  |# ^' Q
    for i=2:N;     
    2 B7 q) x( E( e* f) M    x1(i)=x1(i-1)+x0(i); 1 P' j, b7 p3 w) Y" N% k) B
    end5 v9 Q, ~  y9 c1 H" b1 U# Q  P
    x2=[];              %累加生成数列均值生成数列 * g; y) M8 C. V1 x& @  Z/ k
    for j=1N-1);     
    $ v7 p( e1 v0 E% \    x2(j)=(x1(j)+x1(j+1))/2; & r( G& _. o. h, s$ C1 `
    end. F. B3 J& m3 c2 b* E8 N
    x=x0;              %数据数列镜像
    ; n. Z& O! l4 v1 [2 \. ~7 Ax(1)=[];           %删除第一个数据 ! n- P% @- |9 R& e( P
    Y=x';              %数据列向量
    6 S% l, ]* p+ K! O2 N* rglobal a; ! e9 J3 \3 d. o1 ]$ ]9 v6 W4 f
    global b; ; {# K" l: R. D$ m1 F# M* v
    B(:,1)=-x2';: k) ]5 E# i& E5 H/ e. I
    B(:,2)=1; " T% _! a# t& a5 P4 c4 }+ `2 f
    A=inv(B'*B)*B'*Y;   %求参量a,b组成的参数向量
    ) y4 A9 u7 n) i5 l# Wa=A(1,1);           %求参数a
    # T/ k2 L( p7 f2 W% a7 V; w7 ob=A(2,1);           %求参数b  3 ?5 O3 Y' U5 h2 v* Q1 _( Y! Y" z
    f=(1-exp(a))*(x0(1)-b/a)*exp(-a*(t-1));
    6 v$ I+ r/ b4 s$ [f* P2 z" ~  c6 N" Y8 n3 g

    & [: O4 g. L$ I- Y/ W6 ^/ V1 EGM1.m:
    . o9 M8 V3 n' {: o; O%该函数为GM(1,1)模型中数据数列进行光滑比检验
    - j. e* v9 w, b- p4 v/ b6 |3 qfunction f=GM1(x0)   %数据数列
    ) C' K, @; g* b: ~# T& P; g6 ^N=max(size(x0));       %算出数据数列的大小  ' M2 r0 y1 V" [: A
    x1=cumsum(x0);         %累加生成数列 $ Z$ y; O! q1 n
    global J;
    1 p) A" D5 i* B% pglobal J1;, _; A+ w# t: x0 P# R3 S( a4 u, u& _5 S
    global J2; % w$ C) n$ f" Y/ O
    x0(1)=[];
    7 y  a, `7 q5 ~: h8 J! Zx1(N)=[];
    $ i0 z0 U* \7 sglobal r;# g3 G3 ?# Y2 a. a7 O
    r=x0./x1;  4 \- w, C7 c" `' M5 ?% s( U2 Z
    for j=2N-1);           %判断数据数列是否满足准光滑条件1   * }* p$ V* v/ L% H+ K3 m1 g
       if(r(j)>=0.5||r(j)<0)         5 t" C) C* L6 Z* @2 {$ }4 d% Q
           J1=0;         ' S: X  {! Z8 p$ y
           break;     2 ]0 h/ l; W3 c! x
       else
    2 d' r& h! E0 y6 j& n       J1=1;     
    2 L0 S0 U3 V; w) M& H) O   end: X6 H* F/ l& k9 r2 M" y
    end/ a2 [0 d+ \3 z4 t2 z
    for l=1N-2);           %判断数据数列是否满足准光滑条件2     5 [8 X% s; w% v0 H
        if((r(l+1)/r(l))>=1)         7 J; q1 i: b, q' \
            J2=0;         - D" r6 {- G) c- |! r+ r& d
            break;     ) z1 t; t; p, Q  I3 l
        else
    ) n  U1 o  X4 e% `" }        J2=1;     
      h! h  S" O, v3 u& v4 Q    end: V7 w, e5 w: J$ f) d- N
    end
    ' D) S5 d1 }6 LJ=J1+J2;  5 b# o/ j. W: l9 y
    if(J==2)                 %判断数据数列是否为准光滑数列     
    1 [& M+ M# l7 @4 v& H+ c; C    disp('数据为准光滑数列')
    1 w4 ~& d! A, C0 q& M" H5 Kelse
    4 A2 J) b/ I4 a6 [( x) T    disp('数据不是准光滑数列') 6 A% {- F1 Z/ y+ g
    end; g  G6 g+ F+ J/ S& t7 c

    ' x/ d! f- K0 z. I: cGM2.m8 ]0 {' n; {( l- F# s
    %该函数为GM(1,1)模型还原值参数计算 . K( k) l& L' S
    function f=GM2(x0)  %数据数列8 ?4 ^# `' o1 y% a
    [M,N]=size(x0);      %算出数据数列的大小  # x$ o( L$ q) ~2 w( P9 f
    x1(1)=x0(1);         %累加生成数列 # S  h9 U$ t' l3 @
    for i=2:N;      
    % K  N! X4 N+ g8 }) D    x1(i)=x1(i-1)+x0(i);
    # A$ [7 Q  m& s( |1 vend* @7 t7 q. d- K: n  o
    x2=[];              %累加生成数列均值生成数列
    6 i- ]! c8 U6 j5 cfor j=1N-1);      : P# |# Y2 o3 L) ]$ k# D6 a' ?
        x2(j)=(x1(j)+x1(j+1))/2;
    0 k, N1 S. ~  L) ^9 L3 S7 y; }end6 {% h6 b- q# K2 K, N& x
      x=x0;              %数据数列镜像      
    3 Q* u- [; m% k! k1 P8 {  x(1)=[];           %删除第一个数据 8 ?0 Q; ~) t4 k6 H
      Y=x';              %数据列向量 7 W! W/ F7 D& K* {7 M# {
      global a; 0 e9 E( l7 S+ p/ H
      global b;
    $ ?+ H7 |. |7 @' K0 v1 F# f. v- z  B(:,1)=-x2'; 9 g9 ^( `* d9 d, s8 z' a1 U2 }
      B(:,2)=1;  # s. B8 y3 Y( |$ k  q
      A=inv(B'*B)*B'*Y;   %求参量a,b组成的参数向量 . K( [- Y; v0 m
      a=A(1,1);           %求参数a
    ( C8 f% X- B* w, F. u! f% V8 o  disp('参数a为:') 5 v, [, U- K9 A: e8 m) A9 ~9 G
      a
    0 ~) K4 R; e, u7 G5 [* E) x  b=A(2,1);           %求参数b 0 k4 @: Y  J2 ]$ F  f; a
      disp('参数b为:')
    8 f$ L4 c7 A6 P  y2 _  b3 I! @0 J1 h7 o5 R. J

    * O. u; j& _" A+ R# @0 SGM3.m% s5 d, f7 q1 {
    %该程序实现G(1,1)模型的精度检验
    + m, C/ S, J9 @9 ?, }%包括平均相对误差,绝对关联度,均方差比值,小误差概率检验. X( D" m; {4 I: U! X
    function f=GM3(x0) " ^8 b3 M) b- `1 j
    N=max(size(x0)); ) _" ]5 b/ [& s! s# e3 T9 Q
    x=GM0(x0,1:N);  %利用已有程序GM2得出数据列模型估计值
    % K" s2 ]  ?" m: n1 r  ?6 \. w0 P. ^x(1)=x0(1);     %更正第一个估计值
    & c* I3 f8 K6 Udisp('模型模拟估计值为')
    / ^9 P3 T0 O' P) Z, \6 ?- Ux
    * G! A/ @9 s7 B4 W0 mA=x-x0;         %计算绝对残差序列
    " \+ R) Q3 |( b9 v7 M. e6 Ldisp('模型估计值绝对残差序列为:')1 J* ?2 R5 O, a' j
    A % M: L/ x7 h4 s2 u( J' E
    G=abs(A); . H5 O# C$ e# q/ i* y
    Amin=min(G);    %计算最小绝对值绝对残差
    $ F, n( m9 E! W- m8 `3 c# t. ZAmax=max(G);    %计算最大绝对值绝对残差 0 l- ]* \) o; Q# w1 Z3 R# A5 U- Y' l
    B=A./x0;        %计算相对误差序列
    - Q3 l* X8 ?# L- r7 bdisp('模型估计值相对误差序列为:')
    6 k1 C$ B9 t6 kB  
    8 E6 L* }% i9 c3 G' J2 K7 |P=sum(abs(B))/N;     %计算平均相对误差 8 i! o& R! N( H, r0 [7 F0 _: X
    disp('模型估计值平均相对误差为:')6 k& D2 I, f5 d- U
    P  
    * L- u; _- N3 e2 }. u  J( Xfor i=1:1:N       %通过循环计算关联系数序列     , ]0 }1 t% p& T/ M! @
        D(i)=(Amin+0.5*Amax)/(G(i)+0.5*Amax);
    $ O1 W) l( r1 G# p7 z5 gend+ D/ G% X# W, {5 B
    R=sum(D)/N;  " B# f+ A0 g% M3 X/ Z
    disp('关联度为:')
    ; w0 J& x1 f$ H( v, g; b% vR  
    ) w. _& _8 \2 S% w+ e, _; zx_=sum(x0)/N;    %计算数据的均值  
    ' e+ ], a0 [7 `* GS1=(sum((x0-x_).^2)/(N-1))^0.5;   %计算数据序列方均差
    ; ^2 X8 O4 s: A) x# @9 b1 BA_=sum(A)/N;     %计算残差平均值  
    . g! V) Y0 }* kS2=(sum((A-A_).^2)/(N-1))^0.5;    %计算残差序列方均差( p4 v% T! v* F% V" O# Y
    C=S2/S1;         %计算方均差比值
    1 ?- J; I+ }$ @' W. Z  h- Vdisp('均方差比值为:') 1 A/ B$ V2 x8 v5 W" C/ Y6 S7 n
    C  
    + V3 a7 o# V: C/ y. HS0=0.6745*S1;& r8 _3 e, g( A5 \9 X2 g
    E=A-A_; 2 {$ V& t5 Z$ k7 w# |+ j! h: Z
    F=find(E<S0); / \2 z; Q4 O) ]' x& X' [/ f
    M=max(size(F)); %计算小残差个数% X' t0 B' ~, b8 `- e' t5 Z
    p=M/N;          %计算小误差概率 # h6 k. H* }  a, m. E
    disp('小误差概率为:')
    6 ^2 S7 S4 k" P0 J2 Qp
    ) t! E" c; o9 h  l" k. I8 ~2 D
    4 ~$ g% y  |) z% U1 d3 n/ r( t/ e! F, Y+ L- p' O
    ; [4 ?0 X/ m) x/ ^: k  L
    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-14 05:20 , Processed in 0.615739 second(s), 49 queries .

    回顶部