数学建模社区-数学中国

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

作者: 杨利霞    时间: 2020-3-15 15:57
标题: 数学建模方法(一)预测与预报
数学建模方法(一)预测与预报" l" T& ^  U4 B1 Y6 [0 C' F2 W
(一)预测与预报
  V, Q( ~1 l3 M* d3 ]' Y$ Y" C, p8 ?( L0 o7 P" J) P7 z  r: {
灰色预测模型(必须掌握)
2 F5 d% L6 Z0 G' H7 _( m! J! r) S' Q3 e2 d
满足两个条件可用:
; s) `; H9 A" G/ _. n' w& i①数据样本点个数少,6-15个
$ {* z6 j0 B# Y" L②数据呈现指数或者曲线的形式# H5 `* a1 L6 J
2 r  v1 H# Y5 G3 }. ~1 h
概述
  Z' N" |6 s$ j: ~7 n关于所谓的“颜色”预测或者检测等,大致分为三色:黑、白、灰,在此以预测为例阐述。
5 M& s7 A9 u1 v- e其中,白色预测是指系统的内部特征完全已知,系统信息完全充分;黑色预测指系统的内部特征一无所知,只能通过观测其与外界的联系来进行研究;灰色预测则是介于黑、白两者之间的一种预测,一部分已知,一部分未知,系统因素间有不确定的关系。细致度比较:白>黑>灰。
. s, U8 f; d: ^" a' ?2 ], a9 l' |9 r1 _" f9 Y
原理
, j8 x" u9 s8 q4 O2 p+ Z& o% Z灰色预测是通过计算各因素之间的关联度,鉴别系统各因素之间发展趋势的相异程度。其核心体系是灰色模型(Grey Model,GM),即对原始数据做累加生成(或者累减、均值等方法)生成近似的指数规律在进行建模的方法。
! e5 ^% U' N% L) m8 D
  K2 G/ T1 k9 U% n分类及求解步骤8 R& k) Q# d" a5 x& L
1、GM(1,1)与GM(2,1)、DGM、Verhulst模型的分类比较:
* _# I- B/ t* O% f- v$ N0 [6 x+ M, |/ K! I. Q8 m

9 w7 Z) ?7 \6 q. f; N' k5 [! r" H3 y1 g& T
2.求解步骤思维导图:4 }9 N/ _  j! V1 c
1.png
. f2 T( u( d8 O( J' x! G; D
% ^* p- @, J3 d6 S# {+ X! ~$ k

见下图:

+ a2 Y* k1 U, _, p. L
+ O, s5 y9 r9 t! c7 E
2.png $ w$ U: V' m7 ]9 A
2.使用GM(2,1)的MATLAB实例:* ^# k. h$ X7 o% G$ C$ j8 r
3.png ' c  Z5 E% b  o0 W: I9 ~, i5 l
3.灰色预测模型GM(1,1)0 y+ ]/ s7 B  n  i, E7 s
GM(1,1).m. n8 I0 {. t0 q, g

+ g6 o3 H# H; \0 x0 @%建立符号变量a(发展系数)和b(灰作用量)
2 t: t" }+ c# X+ ]syms a b;" l* D' s& ^( y( m; f5 G% {% m
c = [a b]';1 E8 N$ [" K, g3 D9 U- L1 Q

/ k) b0 [) |1 g0 F/ b%原始数列 A# F' X2 B- v) O" V* h- d2 J* ^
A = [174, 179, 183, 189, 207, 234, 220.5, 256, 270, 285];%填入已有的数据列!3 X; w9 [# {% Q; J
n = length(A);4 a1 F5 I' t9 i5 p

% J" s" E" l% q1 S, Q% j" u9 M- Z%对原始数列 A 做累加得到数列 B2 m7 ]" u# [  `- a" t5 F$ A6 g. P) a
B = cumsum(A);( ?* e( U2 d) c' z4 ]
+ S7 A+ j, n# h- H0 r
%对数列 B 做紧邻均值生成. j9 f! h8 C, w$ G
for i = 2:n4 B1 |# ~+ v4 v' D
    C(i) = (B(i) + B(i - 1))/2;
0 }8 \- f$ R/ E" V! E$ mend  u4 @/ }. m; C0 q8 H. O# C+ D+ s( |. _
C(1) = [];- k. X$ B4 x. |* {4 H3 v

5 P  E6 |" Y7 ~* g%构造数据矩阵
6 y6 G* t. a# iB = [-C;ones(1,n-1)];
1 ~1 N  U7 z3 U; W/ S/ bY = A; Y(1) = []; Y = Y';
! K- l8 A& V6 `) l  R, \' |$ a' Y3 C
# ?+ {( z) H+ {- @4 S0 |%使用最小二乘法计算参数 a(发展系数)和b(灰作用量)  H( Y7 X- H: [: [8 C4 G7 j+ z
c = inv(B*B')*B*Y;1 ~0 ]( R6 f5 s. g
c = c';9 V* g6 y; U- r9 W+ B
a = c(1); b = c(2);
) r6 F  x7 @  P$ j6 y5 x, G! O/ L+ |; o$ T
%预测后续数据
3 b* h  t# r' V' X1 c0 a$ q$ gF = []; F(1) = A(1);
: Z* e5 y5 L! S% wfor i = 2:(n+10) %这里10代表向后预测的数目,如果只预测一个的话为11 J- `/ o  j( A! o3 A
    F(i) = (A(1)-b/a)/exp(a*(i-1))+ b/a;
/ g% l5 g' F4 _7 e- dend
) w' g  i- f: Z$ j0 Q& C
" B1 o: A* c1 J. D* o" U4 H- B% {# E%对数列 F 累减还原,得到预测出的数据$ }7 C  W) C2 ~, p8 I
G = []; G(1) = A(1);
% {1 ~1 t8 |1 C0 j" l. e. ?/ |* jfor i = 2:(n+10) %10同上3 u" A! V! f* o. i: O
    G(i) = F(i) - F(i-1); %得到预测出来的数据
; V1 Y/ V+ e' E, G. tend% P& k( g* b( k. Z. v/ Q) L6 @* F
9 l% T$ v. D2 B; R7 r, X) ]# v
disp('预测数据为:');
& Z, q7 n, W. R: j$ s3 a' q+ U: BG
; m1 p) q8 m8 n/ ~2 S, c5 `9 r; {4 g7 t2 H- m/ f
%模型检验
' P8 d) \7 l& F. m6 O) P# k8 q! p, ]& b7 L
H = G(1:10); %这里的10是已有数据的个数: A2 P$ M2 s2 W0 W
%计算残差序列
0 j- t4 _5 W" W2 cepsilon = A - H;# `6 y$ C/ @  _- ~% T8 I3 {
9 l: l* y9 D! u
%法一:相对残差Q检验
& t! B4 e2 l8 o1 I%计算相对误差序列' c6 R' |- p) O: ^
delta = abs(epsilon./A);+ `5 j- e; a+ l1 ]8 g% S1 {, r
%计算相对误差Q
, M2 p4 V- `' U) z1 Wdisp('相对残差Q检验:')6 ?. D$ e8 u4 \4 z- d- k# s* F& c
Q = mean(delta)
$ }% u, J  @  R3 N$ h9 s. ~+ g$ U5 q& y1 S0 @1 J0 x
%法二:方差比C检验2 r9 R+ R  `8 L& ^
disp('方差比C检验:')8 a8 I9 x9 q3 k; A2 b
C = std(epsilon, 1)/std(A, 1). e7 e0 |1 h5 ^, O1 q, M, ^* X5 T

# s8 E* I- u1 ]& l1 Y* R3 b%法三:小误差概率P检验( [  V) }! D* f; H
S1 = std(A, 1);
6 H: V7 W) h0 Q7 o. Ltmp = find(abs(epsilon - mean(epsilon))< 0.6745 * S1);1 e. X9 \! v; w& e7 I  e, w- P. {
disp('小误差概率P检验:')2 T4 d5 w- m7 m! M) \8 y
P = length(tmp)/n1 E% c. U# _# K: m, u: M' Y

( b  ~5 |; I9 j- a$ W( Z/ H%绘制曲线图
3 Y2 L6 J( O4 b, z  U7 Ot1 = 1995:2004;%用自己的,如1 2 3 4 5...
0 l; K& B; y. E9 Z% `+ Y$ U5 Nt2 = 1995:2014;%用自己的,如1 2 3 4 5...& X9 l* z8 S9 B8 d) Q8 l: T7 C& L
# G& z7 m2 W, O
plot(t1, A,'ro'); hold on;
' Z7 u/ |4 R: |7 O" `plot(t2, G, 'g-');
4 B( W5 B0 C8 D, axlabel('年份'); ylabel('污水量/亿吨');
! G( g) a% k2 `4 j7 _: W1 o* P+ L5 Nlegend('实际污水排放量','预测污水排放量');2 K! _2 G  p6 S3 q1 `- P6 `5 ?
title('长江污水排放量增长曲线'); %都用自己的
; ?$ C' }/ X: ~" K$ y# mgrid on;
+ K0 \# t3 c0 f- I4 m1 p
/ F' ?! m. n- n. L1 |& r; Q! x  A& ]& W+ K0 G9 y5 i
& g' E1 f3 F5 ^  S  m( C

6 m0 p$ y7 T* ]* i1 n+ F" ~8 A  d4 @' e; m; `: h7 E$ s





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