数学建模社区-数学中国

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

作者: 杨利霞    时间: 2020-3-15 15:57
标题: 数学建模方法(一)预测与预报
数学建模方法(一)预测与预报( ^/ {3 z5 C1 C0 p0 B: \$ y1 I' O4 k
(一)预测与预报
  @/ P' }4 w! q6 Z0 n( a4 {2 C: J5 R4 v0 ]3 T6 f
灰色预测模型(必须掌握)0 ~! Z7 q0 R# K+ Q: [5 p" `

  Z1 G% l. F: S2 C/ _+ z- n满足两个条件可用:- ^9 `& r( b3 ?/ l
①数据样本点个数少,6-15个8 N2 I9 I" r( y+ k" J. v
②数据呈现指数或者曲线的形式  ?. ~0 v2 f% j

+ E: d; A% l: ^概述# m5 Q! ]6 y  E& ^
关于所谓的“颜色”预测或者检测等,大致分为三色:黑、白、灰,在此以预测为例阐述。2 l. U) X+ W2 K0 K
其中,白色预测是指系统的内部特征完全已知,系统信息完全充分;黑色预测指系统的内部特征一无所知,只能通过观测其与外界的联系来进行研究;灰色预测则是介于黑、白两者之间的一种预测,一部分已知,一部分未知,系统因素间有不确定的关系。细致度比较:白>黑>灰。. Q9 y: s6 ?7 J2 y" `

; Y9 M" {- F& W/ S+ [* u$ e" b3 v原理8 j3 D$ H& \" D
灰色预测是通过计算各因素之间的关联度,鉴别系统各因素之间发展趋势的相异程度。其核心体系是灰色模型(Grey Model,GM),即对原始数据做累加生成(或者累减、均值等方法)生成近似的指数规律在进行建模的方法。
% F1 [* h* d" K) e
" |3 }& r  ~7 F2 l+ ?分类及求解步骤
- w5 F" L) m+ s( k) i$ X1、GM(1,1)与GM(2,1)、DGM、Verhulst模型的分类比较:  y# ]5 u( }1 N3 ^9 ]) c# m0 i
$ x# W( S" r& Q4 Y/ C4 M$ X0 s
* `/ f% l$ j/ x5 w) d
0 J) V! A9 ~) [
2.求解步骤思维导图:
, S9 d) S: z3 ]7 q* F: i& Z& B 1.png ) v4 x' u' K; o3 T

4 v2 G2 s$ b' C

见下图:


# Z, S1 P; d& u2 [. N
5 G, S; h( z9 n  A( f8 t 2.png
" G6 q! z5 r& [( k" @2 [+ o, w# }2.使用GM(2,1)的MATLAB实例:! q, q7 q& z' q! x. e) i
3.png
# j0 h* [2 K0 V1 i& k3.灰色预测模型GM(1,1)
9 K7 v& s/ O" e$ I( L3 z+ oGM(1,1).m
/ Z. z" {6 N5 L1 Q& |8 `% J' p, o% D
%建立符号变量a(发展系数)和b(灰作用量)
( E" Q  D$ c  v  F9 e# S$ s( z% Fsyms a b;
6 a/ `' r( m& ]# r* pc = [a b]';
  k+ W! H. L' j; W  i
1 j4 V# p: G& m- T%原始数列 A
; U2 `* X6 J+ [4 @A = [174, 179, 183, 189, 207, 234, 220.5, 256, 270, 285];%填入已有的数据列!# H* q3 B0 D- |6 C
n = length(A);
8 u. H: u6 l0 c  L1 P
9 N# |/ Q1 O- D. F%对原始数列 A 做累加得到数列 B
: p( Y, B" z& h4 A' lB = cumsum(A);" x" }5 n/ b& q$ a: z' l# Q+ y
) N) q) s; I) Y7 _9 _
%对数列 B 做紧邻均值生成
! O# W: D/ i3 f! z5 s6 ffor i = 2:n
0 p3 [, c5 R' A8 ~    C(i) = (B(i) + B(i - 1))/2;
+ Z$ S! f! k" ^end
& G+ p2 T: I# Y: S+ F+ P/ {& X+ RC(1) = [];' t9 |" I8 R8 t& G8 |
. M% K# j* G! ~, X9 s
%构造数据矩阵) \, x8 ]+ f0 u( T) k
B = [-C;ones(1,n-1)];2 R0 {. ]  d- i  l
Y = A; Y(1) = []; Y = Y';
. Q% P  Z# d% c( L6 r8 [
1 U2 g+ \! g2 s8 H0 M+ ^%使用最小二乘法计算参数 a(发展系数)和b(灰作用量)
8 m! P0 G6 I0 D, Dc = inv(B*B')*B*Y;' d$ e9 v( L( i6 U8 _$ H9 a2 ?) K0 `& L
c = c';
7 X+ q1 E, d( M* y/ _# K0 F% V# }a = c(1); b = c(2);1 l0 b, q: c6 M* S& j
5 n" U( i: S% C! N  D/ e% U
%预测后续数据
/ Y7 n% T/ O5 {" b  X( Y0 vF = []; F(1) = A(1);
6 a. k+ H$ o8 J# Ofor i = 2:(n+10) %这里10代表向后预测的数目,如果只预测一个的话为1
8 z; O$ q$ K9 s) e: p! U: P    F(i) = (A(1)-b/a)/exp(a*(i-1))+ b/a;
! ~5 f6 S2 m* H6 N& rend
: C9 D4 \1 v- n% i( Y0 l: L: L; O1 T) f! K4 E# B! \/ x
%对数列 F 累减还原,得到预测出的数据
8 K5 y; r; s; p7 z6 f. x% A) BG = []; G(1) = A(1);7 V, \' e) I) [& w
for i = 2:(n+10) %10同上1 C2 G: b6 W) D6 a
    G(i) = F(i) - F(i-1); %得到预测出来的数据1 E5 |3 [4 s3 S
end, a  s! L$ @0 y- P% g' G

% [: }6 }0 u" p3 C* e& i, e/ L# vdisp('预测数据为:');
/ m5 l+ @1 }; O: F  _( s( p) _G
7 }# o: E6 C0 Q; F- D, P% ~5 N. t$ M4 C. Z; Q- K
%模型检验
% p' Z7 k1 V( i5 p$ g( {9 X9 I
. O, p" H! N0 i, q, iH = G(1:10); %这里的10是已有数据的个数
" e0 g; ]  F. y) K# m3 c%计算残差序列
' G& s  H( e2 ]6 P4 Y' Fepsilon = A - H;* c- L: p5 s$ L. Z) w7 p# x

; ?0 `' z+ ?0 V: z; X% U%法一:相对残差Q检验
6 a) S6 P3 q& @6 D4 o%计算相对误差序列
. U8 h+ o  l' n2 Cdelta = abs(epsilon./A);
3 ^( C* Y) R6 u7 k* U7 v%计算相对误差Q
3 f2 D, N# h* z8 C- Qdisp('相对残差Q检验:')
- K. @' X) u/ r: r6 G6 O5 W! j, t3 TQ = mean(delta)
1 E! M- n) {3 b, f8 `& i5 m1 \
6 S! A% P  }" w9 G9 [%法二:方差比C检验
: P  I, z9 @5 T2 N+ B. K" {disp('方差比C检验:')# D) F0 q5 y+ d! z% O
C = std(epsilon, 1)/std(A, 1)6 P* C8 y  I. ]0 H+ k; n* U

. X3 _% v# Q* _) }/ c% t* g%法三:小误差概率P检验
0 F9 V# A  o6 K1 D2 p2 {0 T; q. nS1 = std(A, 1);
* {0 O) X7 I7 Q3 n* ?tmp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1);
1 R: j0 I2 E7 W. W3 ^+ g6 N/ `disp('小误差概率P检验:'), C+ i' }  g2 Y/ A0 N8 ?9 k  ^
P = length(tmp)/n
. c2 b" |+ V  T  N  S: r  F  a
* Y  T2 Q. E1 \- ^) U0 e$ H%绘制曲线图
4 p* m5 ~) f8 _1 g. }t1 = 1995:2004;%用自己的,如1 2 3 4 5...( v) H9 u# k4 A
t2 = 1995:2014;%用自己的,如1 2 3 4 5...
2 w4 r6 r  a) Q8 c% u* w/ {) i% E* N2 u& t4 C# |; Q# A
plot(t1, A,'ro'); hold on;; U3 W- z1 ^, @# O
plot(t2, G, 'g-');
/ e" D7 D; ?$ g/ I2 V: t6 n3 fxlabel('年份'); ylabel('污水量/亿吨');
6 p4 v+ E4 a* Flegend('实际污水排放量','预测污水排放量');
4 q, Y) k. Q7 }2 v. n% dtitle('长江污水排放量增长曲线'); %都用自己的- k! |9 m- d2 J- @$ d
grid on;
  a( a3 D& ]' N( P! y& Q/ B2 d
3 C/ ?4 U& ^; W; J- d
' o6 f. ?: ~, z, h# d, ~0 V1 c7 ?% h$ y$ ?- Z

; L0 T* d+ q$ h4 \
  ?+ E) W0 C7 p  Q! p




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