数学建模社区-数学中国

标题: 数学建模方法(一)预测与预报 [打印本页]

作者: 杨利霞    时间: 2020-3-15 15:57
标题: 数学建模方法(一)预测与预报
数学建模方法(一)预测与预报
5 y  H8 B% Q4 I+ }6 g( `- o(一)预测与预报5 y. _+ H, ^- J+ _

1 d# Y: }' |2 S' w; [灰色预测模型(必须掌握): H( ?1 k! b8 C, X4 f. p
& ^; _! H* V8 [2 D- k5 r' e. p
满足两个条件可用:
' |7 ^  m# H8 \0 w①数据样本点个数少,6-15个0 a( q) V3 `7 f( @
②数据呈现指数或者曲线的形式& ~: y/ z4 b* h0 f) {# D: Y
' p7 Q+ W/ u6 H
概述5 j1 O8 k1 ?3 T! N; `3 u, T- f* Y. `
关于所谓的“颜色”预测或者检测等,大致分为三色:黑、白、灰,在此以预测为例阐述。6 |$ {1 l, ~" B) L$ |
其中,白色预测是指系统的内部特征完全已知,系统信息完全充分;黑色预测指系统的内部特征一无所知,只能通过观测其与外界的联系来进行研究;灰色预测则是介于黑、白两者之间的一种预测,一部分已知,一部分未知,系统因素间有不确定的关系。细致度比较:白>黑>灰。
6 Y! S  z" C+ b8 h% g: i8 h2 B& s  H1 y: \
原理8 ]" ?$ Z& i" {* m3 `/ E
灰色预测是通过计算各因素之间的关联度,鉴别系统各因素之间发展趋势的相异程度。其核心体系是灰色模型(Grey Model,GM),即对原始数据做累加生成(或者累减、均值等方法)生成近似的指数规律在进行建模的方法。) n4 G/ Y2 f8 y6 X% b$ q5 t

# Y) E. Q" j+ q; B$ x7 p分类及求解步骤
; X1 _) [$ }7 C' {/ {2 p" O1、GM(1,1)与GM(2,1)、DGM、Verhulst模型的分类比较:4 h% s) [$ l+ J, K, @

! W& G% j5 r0 T+ ?2 j' R
# S, P+ m# n# t, e* w% z9 A' j6 ?. }8 I/ k" a, A( @. T6 R( y
2.求解步骤思维导图:
* _! o; O2 J' R  D3 q& E 1.png 8 v2 L- m/ [( ~; N% V% g- ^! o. |
% i% h" }4 s4 P2 \! X

见下图:


! M; E( U3 |  J+ T$ }* p! ^5 t4 ~! }
$ t6 O1 H/ X$ S$ B- R# l$ R3 B 2.png , }  n9 o9 f! M$ d. ^7 z
2.使用GM(2,1)的MATLAB实例:
, ]+ u* ?4 J& Q. e 3.png
; ?- T7 W! |, I  J: z: g( D& ?3.灰色预测模型GM(1,1)
/ `" W" {; c& ?GM(1,1).m! ^( y. x: P' N
* S( w# N  {' ~( y6 i. p4 E
%建立符号变量a(发展系数)和b(灰作用量)- K. x$ f: X# C% h  N7 u( K
syms a b;+ s8 a5 ?- b: O; S/ Q$ ?, D
c = [a b]';$ }6 Z6 V9 j, v+ V
+ U0 ?/ m; l9 j! I
%原始数列 A
# X9 d# w# N0 Y6 a" GA = [174, 179, 183, 189, 207, 234, 220.5, 256, 270, 285];%填入已有的数据列!
* Q* T5 V8 v/ K% gn = length(A);% a9 O1 D) j. f+ J* z9 O
. y. A" N( y6 V6 H
%对原始数列 A 做累加得到数列 B
7 P% J9 u$ ~+ Y* G! b; }B = cumsum(A);
: |- o4 Q) G7 g: \. ]. b8 m
7 `5 j3 P9 |8 I+ O1 g/ a7 }, A%对数列 B 做紧邻均值生成
  D( L* a+ d6 `2 h% y. Jfor i = 2:n
3 a7 @. a/ u. `    C(i) = (B(i) + B(i - 1))/2;9 ~' ~5 M6 R8 z! C" ?9 B
end
4 ?1 x1 v. j; x1 `C(1) = [];+ V4 z) I: h  u% F0 {: a9 I
8 L! Z( ~9 ~/ v  }8 M, [7 A# s
%构造数据矩阵
  [  H. J1 i- S$ ]: i: SB = [-C;ones(1,n-1)];! x% _  o* x' x$ Q. k
Y = A; Y(1) = []; Y = Y';
2 ]) y1 |% S( @. K7 T. a9 P
; b! M% G. u$ H8 D/ G- D# p; i4 k%使用最小二乘法计算参数 a(发展系数)和b(灰作用量)
4 L' p5 T4 K( t- V% Rc = inv(B*B')*B*Y;
( i8 r& o2 @. e& {8 q& R1 S3 S: Kc = c';
0 G8 }" L! J. k/ P8 ~a = c(1); b = c(2);8 {1 k4 I/ _( `) g

2 N; f2 @& Q0 f! x%预测后续数据9 S% [  ^% ?' j( ^, `' V
F = []; F(1) = A(1);
( ~3 Y' J$ y& n4 ^7 }% H2 qfor i = 2:(n+10) %这里10代表向后预测的数目,如果只预测一个的话为1, }$ Y7 a3 v" _+ m* o1 {( X
    F(i) = (A(1)-b/a)/exp(a*(i-1))+ b/a;
5 i/ L+ T$ |, l6 V/ Zend
, d- @* L0 n/ s1 W# Z2 N' ]* a. B  g& p6 Z. i
%对数列 F 累减还原,得到预测出的数据
9 S2 b' `$ F6 K  \2 GG = []; G(1) = A(1);
, U) ]4 h- _, Z/ \1 I- {7 \for i = 2:(n+10) %10同上
. l5 X9 h9 ^- A$ M4 j" N! _    G(i) = F(i) - F(i-1); %得到预测出来的数据1 C- F# e* ~5 d2 m/ d
end' z( t$ E( t7 f+ J3 R: p3 ]9 u, ~

/ p8 w7 s( O- n/ S; V; e" l; adisp('预测数据为:');4 h$ }1 a5 T# f! C% v# T& Q
G" Y+ |( ~4 H( Q) |
+ T8 V* W& R8 ?7 ?  J
%模型检验, \0 @, [! D5 k
& |& J+ V; Z- m* e6 s5 Z& g% r
H = G(1:10); %这里的10是已有数据的个数8 _3 Y% W6 J' x1 v- \3 g
%计算残差序列5 y7 Q0 b2 B. L+ m" m
epsilon = A - H;# D- ]7 d- H& g# i  B" \
: U9 K& Q7 }) R6 [
%法一:相对残差Q检验" Z' C* T& I5 H5 k; Y% S
%计算相对误差序列
$ ]1 E1 h$ }5 k: G! ]9 M: A: jdelta = abs(epsilon./A);
  {2 n$ c/ x# }7 z%计算相对误差Q
8 N1 `2 H4 ~& _) f" Ddisp('相对残差Q检验:')# {" f1 I# y% u8 D- I: H
Q = mean(delta)6 m* O: K* [6 N& u; N
) M7 R6 c. [$ r  X
%法二:方差比C检验
% O& W! `% y6 ndisp('方差比C检验:')) _9 |& Z% u. S: c
C = std(epsilon, 1)/std(A, 1)1 Z& P8 v& R$ j4 E8 r

1 i- ]- B/ T4 y5 X# H%法三:小误差概率P检验, b5 W. S. P; N3 X7 o- x
S1 = std(A, 1);
- W, a) z* z5 e9 [tmp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1);
5 E2 c. U0 D5 {2 m2 K3 J$ V3 Vdisp('小误差概率P检验:')7 t* [3 H0 Q# Q; \& m+ C- p
P = length(tmp)/n
: @# v+ s2 Z9 e% z/ D
2 [# z2 V. P6 J. u' Y& `4 i! e%绘制曲线图
$ I2 O/ Y9 p8 `( St1 = 1995:2004;%用自己的,如1 2 3 4 5...
; G4 s* _- e5 A3 X0 S4 wt2 = 1995:2014;%用自己的,如1 2 3 4 5...6 N# y( Z- P; }- D8 P" L& q4 R
: ~3 G/ e4 m8 |( y
plot(t1, A,'ro'); hold on;- ?0 G  }! |- P. [2 l( w+ \/ d
plot(t2, G, 'g-');
3 N& k$ G* [) ]/ Q- [xlabel('年份'); ylabel('污水量/亿吨');
/ F8 P6 \; I2 Mlegend('实际污水排放量','预测污水排放量');( [* a* F+ H  R
title('长江污水排放量增长曲线'); %都用自己的
0 n8 Z; c4 T4 x$ _% Hgrid on;5 x8 p5 [" w, \6 J2 @: Y9 x

, u0 [0 V7 W5 U4 ^
! J0 U4 O5 C8 ?9 T  x% \! @, C
9 U7 o' G% i, K2 L0 t8 {
# K9 q" ]0 k* }# b9 B
+ d" v- b+ c& Y




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5