QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3447|回复: 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年代提出的灰色系统理论。2 i6 g/ O3 e" p9 |! E
    GM0.m- X. ~7 `/ q1 @4 R5 U
    %该函数为GM(1,1)模型返回还原值 5 J! X+ U& P9 K  U/ n. C; F( K$ b
    function f=GM0(x0,t)  %数据数列 6 R" ^1 q9 l% n$ [6 Y6 G
    [M,N]=size(x0);        %算出数据数列的大小
    - _5 u% H' w! r" tx1(1)=x0(1);           %累加生成数列 ( Z/ W# L- P( g$ k
    for i=2:N;     
    - J' R6 p9 j: F: z    x1(i)=x1(i-1)+x0(i);
    4 n1 |/ \9 R; Fend
    9 a) m9 K8 E3 E$ w0 F/ Zx2=[];              %累加生成数列均值生成数列
    % U% d3 c: {5 o9 Ofor j=1N-1);       x8 q. O4 S9 |
        x2(j)=(x1(j)+x1(j+1))/2;
    5 ]/ m# j5 T# Y% w% yend
    - B: F4 j( L6 |9 q7 h" hx=x0;              %数据数列镜像6 e1 o& C6 T( p( Y9 z
    x(1)=[];           %删除第一个数据
    ( u7 P7 j" ]8 iY=x';              %数据列向量 , m1 z9 j* F+ H# l. X; b
    global a;
    " ^/ [- a% J' z) Vglobal b; & G9 `5 X6 C- b6 j- I
    B(:,1)=-x2';$ A  t4 w0 L. Y; ^
    B(:,2)=1;
    6 L7 }7 K$ p: s- UA=inv(B'*B)*B'*Y;   %求参量a,b组成的参数向量 8 h3 a2 w  R/ p$ D5 |
    a=A(1,1);           %求参数a
    % m# j( [+ p7 Pb=A(2,1);           %求参数b  , h& L0 Y& K* |4 p
    f=(1-exp(a))*(x0(1)-b/a)*exp(-a*(t-1));
    6 y1 n( u& r1 Z( @( nf
    % Z& P4 W/ b/ q+ q) z2 ]. |. K) F3 F; i; Z% U- W5 v; c
    GM1.m:
    : L' P! `& R: z, \2 |%该函数为GM(1,1)模型中数据数列进行光滑比检验
    - m# h" b* M- d/ ]function f=GM1(x0)   %数据数列 4 a$ y0 a, f+ X9 S7 U% B
    N=max(size(x0));       %算出数据数列的大小  1 b9 y1 d9 V5 |  I5 I% {; F; k; ]
    x1=cumsum(x0);         %累加生成数列 4 i5 Q/ A/ i/ ]
    global J; % v$ T1 z  d5 p4 R7 `
    global J1;
    1 {, r3 R/ K$ nglobal J2;
    - w5 l7 {: `8 ?2 H3 `x0(1)=[]; $ p- x( [, b& e. W! z8 b" a
    x1(N)=[]; + q. ~- W2 h. d+ Y
    global r;
    6 i$ o& I8 u. k! c7 h: d0 U: a, ar=x0./x1;  2 W" C$ Z0 w4 f  ~) v; G: a% z
    for j=2N-1);           %判断数据数列是否满足准光滑条件1   4 L$ T. [  O3 \% L
       if(r(j)>=0.5||r(j)<0)         
    8 w9 [5 g" `: n7 x. @8 O0 S, R       J1=0;         
    ) @2 N2 M- F! \       break;     ( o1 ?$ L0 ]" Y" b2 Q" Z5 C
       else
    1 V7 F8 p$ _5 g% Z- y" a9 }4 |       J1=1;     + [  l) @1 U6 Y1 t+ K2 z6 d: y7 j$ F
       end& v- {& q, ?4 R& O* |5 F
    end
    # e( F! J$ _  X2 s2 A( _4 ?" mfor l=1N-2);           %判断数据数列是否满足准光滑条件2     + ^: [" M  J7 W% j+ ~  d! X
        if((r(l+1)/r(l))>=1)         
    - }5 y2 ?7 Q' K0 N' t: j" y        J2=0;         
    7 R$ ]0 J; M- j, V1 U0 V  Z3 p        break;     
    - i4 A5 H) U0 e) T( a' o    else# m" `/ B" o7 q/ I+ J
            J2=1;     
    & `5 \  W- l) U; i+ G+ c    end2 |: r" ~4 |$ s8 N9 L, T& ^2 p2 }
    end2 Q" v" u$ G' g9 H3 V) i
    J=J1+J2;  
    7 S; Z# s6 {: |2 O, Wif(J==2)                 %判断数据数列是否为准光滑数列     4 k% o0 g- B6 e/ z! K/ a
        disp('数据为准光滑数列')
    ; m9 J! b# n" N# c9 Z* `6 Z! ~9 nelse
    % O7 ?, q2 R4 W1 n5 s    disp('数据不是准光滑数列')
    ' ~1 X  J2 Q+ g' W. hend
    , m* }# E2 P3 L) [, D' Y  n# \* e- g; P$ d% ~
    GM2.m
    ( k: Y! A2 Z2 w; V! ~' F1 w%该函数为GM(1,1)模型还原值参数计算
    ) E  A; j$ @6 w4 ofunction f=GM2(x0)  %数据数列
    / f" A" N( _  G7 V" U: C! H( z3 f- ^[M,N]=size(x0);      %算出数据数列的大小  ! S' V1 k) `" k. U/ U. q
    x1(1)=x0(1);         %累加生成数列
    6 D3 m9 W  B- B) B- Sfor i=2:N;      3 g0 t* ^$ V% b+ a1 |4 }  [
        x1(i)=x1(i-1)+x0(i); 6 p, `, F. F  L) b. c# G
    end& t; I% ~' v, U5 r! A) ^$ s8 `/ Y
    x2=[];              %累加生成数列均值生成数列 % ]: s  i  t$ c" d7 ?+ X- `: C
    for j=1N-1);      ( |1 m- A' t- p; Z2 ]% h5 J  z+ n
        x2(j)=(x1(j)+x1(j+1))/2;8 m* j9 k( P; Z
    end
    + l; Y" S+ \. p* L  x=x0;              %数据数列镜像      " g3 Q$ L* m  E  N$ W+ P. M
      x(1)=[];           %删除第一个数据 % x% n1 t- V4 O5 w9 ^
      Y=x';              %数据列向量
    ( [7 U; z: I- r' z  global a;
    5 M' p9 W: W* @9 _% Z5 J  global b;
    6 C; d/ K7 y: H% |  B(:,1)=-x2'; ! Q3 G% B9 e/ D  L6 k7 c
      B(:,2)=1;  
    ( I- n) D, {: {  H; Q! e  A=inv(B'*B)*B'*Y;   %求参量a,b组成的参数向量 ; |3 O' ]) l' e3 W7 B4 n- j- N
      a=A(1,1);           %求参数a 9 t$ p: G. U' b; _# z  V8 h8 v" }
      disp('参数a为:')
    7 Z1 f1 o1 J0 {  a
    * a8 |% G6 ?2 ~/ u0 r; Z  b=A(2,1);           %求参数b $ ?8 L8 j  E- s3 u/ P
      disp('参数b为:') 7 L' Y/ O4 A% ?' Z
      b
    0 g! i/ G, k# T$ l; l
      f: T% m) |0 EGM3.m
    ( e9 \8 Z0 B9 ]%该程序实现G(1,1)模型的精度检验 + Q( n0 h$ X7 P! R" J1 Q
    %包括平均相对误差,绝对关联度,均方差比值,小误差概率检验
      V* m2 o( H7 G: Wfunction f=GM3(x0)
      m2 R' X% P( F+ ?2 B( g& l' H) _N=max(size(x0));
    : Q4 z2 t) r9 |$ Nx=GM0(x0,1:N);  %利用已有程序GM2得出数据列模型估计值
    3 ~9 L7 L9 y) E, C% Ox(1)=x0(1);     %更正第一个估计值
    . p9 K8 V& S1 pdisp('模型模拟估计值为') + l( l" V4 j: `
    x
    * M( g9 w9 g' U( D/ [! T5 [. jA=x-x0;         %计算绝对残差序列
    / z8 A0 a- D0 a1 |3 }; rdisp('模型估计值绝对残差序列为:')
    5 L# O" |7 q6 {8 F) dA
    % d# o- U3 W! }* o1 kG=abs(A); 9 f4 D/ J) h, q' {
    Amin=min(G);    %计算最小绝对值绝对残差
    9 }8 h4 K: S2 w. W: @! yAmax=max(G);    %计算最大绝对值绝对残差
    - |( V' _" U- ^0 ~9 HB=A./x0;        %计算相对误差序列
    $ X) W: [. H  q9 R0 `2 Ydisp('模型估计值相对误差序列为:') . X; e% O5 {. g9 T, Z
    B  ; G% Z9 O7 g$ v! K: a
    P=sum(abs(B))/N;     %计算平均相对误差
    + k8 g/ C% ]; b6 ~$ u5 ^) @disp('模型估计值平均相对误差为:')
    3 ]- R: ~2 l6 m" X5 {+ [1 Z' p# EP  6 A" [; i# ^# w) W& \9 Q
    for i=1:1:N       %通过循环计算关联系数序列     $ R3 J' H& M) @- @* X) |3 m9 U# M
        D(i)=(Amin+0.5*Amax)/(G(i)+0.5*Amax); ( x( M3 D7 R0 s: X# b
    end
    1 w+ t4 o: V0 d0 t. xR=sum(D)/N;  / N) @+ t( A5 e4 N4 G  o
    disp('关联度为:')
    8 R. V& N$ o6 A7 F4 g& P. A2 P5 AR  4 O4 }5 `' Q$ b) x) O% X
    x_=sum(x0)/N;    %计算数据的均值  - Y7 N& s0 B% l% D( S/ q; H( r
    S1=(sum((x0-x_).^2)/(N-1))^0.5;   %计算数据序列方均差/ O! ?  Q) \( s) \
    A_=sum(A)/N;     %计算残差平均值  + y% o* }" _& b7 l: T% M0 t+ r, R
    S2=(sum((A-A_).^2)/(N-1))^0.5;    %计算残差序列方均差6 R' B: G8 b- [+ w
    C=S2/S1;         %计算方均差比值
    ! e9 m3 M8 y/ Z! v9 S1 e* F/ fdisp('均方差比值为:')
    2 V! e1 s8 R' b) ]C  1 V, V) w' e( \: p/ C0 L% |
    S0=0.6745*S1;
    5 I0 |7 A& M) ?6 C8 q) s1 XE=A-A_; * B; A0 ]8 q. W% s$ u0 D, r$ j
    F=find(E<S0); 1 s6 x0 ?! y6 A* j; K& k
    M=max(size(F)); %计算小残差个数
    8 {. c1 C$ `& h2 K5 ]0 Zp=M/N;          %计算小误差概率
    + |* j' K* ]/ Y- R, `+ N6 ^disp('小误差概率为:')$ _; D% w' j9 H" `$ Q
    p, `/ Y* q3 w% j$ x

    7 P, J, X. o2 g' L( l  j, a% {" D; g, e7 L8 ]3 `3 h) t: n

    5 D& u- b# G' h4 @) A
    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-7-30 08:15 , Processed in 0.313822 second(s), 50 queries .

    回顶部