数学建模社区-数学中国

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

作者: 杨利霞    时间: 2020-3-15 15:57
标题: 数学建模方法(一)预测与预报
数学建模方法(一)预测与预报
$ G( J* ]. g- j6 @2 I8 ^(一)预测与预报* C/ R) |6 Q: S/ k
( s5 w: ^/ e, y) ~3 L5 V
灰色预测模型(必须掌握)
/ `% B# ^- E6 H0 \8 p; u8 F9 _1 n8 H7 L$ V9 o7 H' _+ }$ k
满足两个条件可用:4 U# U8 c) O8 V5 t* I8 e
①数据样本点个数少,6-15个, L0 m7 @) f1 u: G- q) K
②数据呈现指数或者曲线的形式2 _3 F: k: G' s+ {, ~
7 D, }* J% b$ _$ |# D
概述
$ t& N; q" K% _. k关于所谓的“颜色”预测或者检测等,大致分为三色:黑、白、灰,在此以预测为例阐述。
/ X6 R4 N# ^, R/ b: p( C其中,白色预测是指系统的内部特征完全已知,系统信息完全充分;黑色预测指系统的内部特征一无所知,只能通过观测其与外界的联系来进行研究;灰色预测则是介于黑、白两者之间的一种预测,一部分已知,一部分未知,系统因素间有不确定的关系。细致度比较:白>黑>灰。: r5 n" h  k  c

1 `) V! h) u& F0 q+ N. F9 V6 S原理! q( U9 P% f" x' [% l
灰色预测是通过计算各因素之间的关联度,鉴别系统各因素之间发展趋势的相异程度。其核心体系是灰色模型(Grey Model,GM),即对原始数据做累加生成(或者累减、均值等方法)生成近似的指数规律在进行建模的方法。4 f7 Y( a9 `; d& u. F( G& w
. z( W- P! Y. O$ e# d) y0 @, m
分类及求解步骤
+ b/ O% L! m" d1 g2 Q0 R, b1、GM(1,1)与GM(2,1)、DGM、Verhulst模型的分类比较:1 l5 @7 B8 a( j, D  U

( o7 h5 n5 B& R1 ]9 v
( g. t" X% A) P0 l* O) i
7 p6 D% U2 n  t. K' H2.求解步骤思维导图:0 L' \9 P0 e" S" W
1.png * d, R6 e  F0 T" r/ L

. F7 J$ u  @! {. ^

见下图:


5 z# V) {( }% U
: G6 C4 Z7 x. N& q) }6 {& Y4 @ 2.png 4 u; A; C( R4 R
2.使用GM(2,1)的MATLAB实例:
+ `! e9 N. f$ u! O4 ? 3.png
0 P* n4 g: ~% I/ f3 t+ H: H  d, L3.灰色预测模型GM(1,1)4 |, d1 M; O4 |4 P+ E- N( x: m
GM(1,1).m: U" d  U. G4 R- [  M! }

8 t. U) o0 W$ p+ p%建立符号变量a(发展系数)和b(灰作用量)
4 z$ \6 l% z5 u# rsyms a b;7 `2 @/ d7 O6 ^* l" f
c = [a b]';, y, b" A$ N5 Y2 a6 u& C  o
' m' W- x- c$ Q% }
%原始数列 A
" [9 r" l/ G/ ?+ d1 vA = [174, 179, 183, 189, 207, 234, 220.5, 256, 270, 285];%填入已有的数据列!
  G4 @2 y7 F, R. e0 E# Y) m6 Nn = length(A);
$ {. ~/ U! W% ?& E& F! |$ a! E9 H
) O4 f* e. M$ i# A- b1 A+ ~0 d2 J%对原始数列 A 做累加得到数列 B
. m% t  @1 |  |0 z5 W5 \B = cumsum(A);
' m4 [& L, d* @: C0 B+ H9 h6 T
( e! ]1 y$ A7 r) R! M%对数列 B 做紧邻均值生成' t/ O3 G8 T: g  K; W( f  A
for i = 2:n# ]4 G0 ^' t! c6 b# ?4 _
    C(i) = (B(i) + B(i - 1))/2;
3 w: i- N! P9 |( m3 I: [1 cend
2 S% k- @! T8 O6 z7 EC(1) = [];
2 o5 `: v2 K& t; \+ v* B; \
8 D9 V( X# H4 S; k" k: m# M%构造数据矩阵
' ?; O# D( z: I2 XB = [-C;ones(1,n-1)];$ u9 J- Q* Q) K) _. x( c# u! ^
Y = A; Y(1) = []; Y = Y';$ `; v$ b3 k! k1 _: ~' v, r- l
8 u- ~2 Q- @0 ?
%使用最小二乘法计算参数 a(发展系数)和b(灰作用量)
# o- x8 m$ u" ]# ^9 Uc = inv(B*B')*B*Y;
. a) s6 P( g+ }, uc = c';7 ^& a& X$ e0 ~
a = c(1); b = c(2);
0 Z8 k" X* }, l( l& L
! I; N3 O- w: j2 t% s% A/ @, K( H: c! R%预测后续数据" X$ `& {, V4 ^/ L/ V
F = []; F(1) = A(1);
% }( x+ ~2 J' t# P" _0 P7 Hfor i = 2:(n+10) %这里10代表向后预测的数目,如果只预测一个的话为1
# m# g3 o( O- A( m) f( [8 w    F(i) = (A(1)-b/a)/exp(a*(i-1))+ b/a;& Z: F2 A! e& @3 d7 E0 T
end
4 @5 @) ?0 f2 j% s9 ~7 D% v5 j
% f+ w0 Q( c- }) v6 @) Y% ~%对数列 F 累减还原,得到预测出的数据! l# O  {: P8 }: _
G = []; G(1) = A(1);. d, s6 |2 p+ t, r, g: ]. F$ c' b
for i = 2:(n+10) %10同上: \. g( R( K  t# b7 X  U
    G(i) = F(i) - F(i-1); %得到预测出来的数据
6 u+ q0 O! h' ~' t; ^end
- M" S- K4 K  U0 O9 X  v  e8 v3 w% X6 e
disp('预测数据为:');6 C. ~" v* f  v
G( y8 e6 k$ ~* H6 k& f# v* a
; |% X& q, N! g& C, r& D# Q, f# F
%模型检验8 @8 I8 r  c, z+ G
4 f7 V- P# n$ }' D
H = G(1:10); %这里的10是已有数据的个数
5 V; U$ y2 K4 t2 I1 e5 `# {%计算残差序列9 ?: ~5 S4 O* J. {/ U* d  i
epsilon = A - H;
8 }: Q* Y2 G: g% t/ ^
& o3 Z7 l7 ?3 f$ Z3 v6 O%法一:相对残差Q检验' x9 ?! x0 d' e  U
%计算相对误差序列
( L9 d- P0 g$ `9 u) i6 _9 C! a/ rdelta = abs(epsilon./A);
4 d/ p0 _. h! R! k* J; E' f%计算相对误差Q
8 ~! ^3 ~6 E7 E, |1 b0 cdisp('相对残差Q检验:'), e: N2 i5 r! z& @& Z
Q = mean(delta)
7 s6 ?) Y  [( f9 |2 e" C+ n5 B, m$ N, u6 F
%法二:方差比C检验
/ Z+ y) m$ u% ddisp('方差比C检验:')
3 h* i. b2 G& p) HC = std(epsilon, 1)/std(A, 1)( g: T! {' l6 }. t
# d; U+ U0 D0 P* a# ]
%法三:小误差概率P检验
" i4 a  X" v7 o5 a9 m1 x; lS1 = std(A, 1);6 x! d7 B5 i& A
tmp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1);
# g7 h. w$ w: o5 \disp('小误差概率P检验:')
2 _+ I8 X& H8 Q! J" [P = length(tmp)/n
+ M' o. ~# \. Q4 U& b# m$ f, F4 R7 Z( X
%绘制曲线图6 h  g) Z1 q% O# z
t1 = 1995:2004;%用自己的,如1 2 3 4 5...$ ]' c, z) Y3 k2 n) d( X
t2 = 1995:2014;%用自己的,如1 2 3 4 5...
* }& Q; ^4 a; U; J8 W+ H
+ ?# Z6 Z$ g* {2 Qplot(t1, A,'ro'); hold on;" @: W# o3 O5 ~7 X4 @% q# n9 D0 }
plot(t2, G, 'g-');
. N$ G2 ]& q8 J1 Z! s7 e1 d( Hxlabel('年份'); ylabel('污水量/亿吨');5 U% ?/ x- E, p: A' H2 z* N7 p
legend('实际污水排放量','预测污水排放量');
6 ]! w% k' ?8 A* G) ktitle('长江污水排放量增长曲线'); %都用自己的
2 L) R, r$ }% k- n* Ngrid on;5 P) |  ~; q# R! h
8 v: m/ ?$ E1 }7 Y5 W
; G; R2 w' j, U& _$ X. [

# D  w7 Q) z) z% u: i( \% B
% ?0 j. G4 V! f& s& E% n/ }7 x- s% x* K: {1 ~





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