8 g% C) \, Y/ Z: w 6 P k* i8 o9 e% B6 R. P等等 3 G, ]& G0 c$ Y7 L9 E, F! ?) a) T6 [( M1 C% ^
3 P6 x0 X( n' n( a
02 数据拟合、参数估计、插值等数据处理算法 , u3 N: V- i1 N" k我们通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用 Matlab 作为工具。% F( T/ y" f$ K& J D& z0 l
' v* P* C1 C3 ]9 Y# r3 N1 O* k% ?/ P+ `' O8 [. U0 B3 r
数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是 98 年数学建模美国赛 A 题,生物组织切片的三维插值处理,94 年 A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。6 W+ c# \: I$ {2 y2 u" ?2 V
( A ~, {8 ^: {+ k. b
" Z x6 G# h# k) R& ~' [1 ?6 p; R
9 C0 `- y7 O. d
T. Z J( J5 c( t9 {# ] / n* l2 Y5 Z; p1 v 8 P+ o$ i+ ^% H此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉 MATLAB,这些方法都能游刃有余的用好。 8 e6 }8 J4 G+ D0 O* ~1 ]5 r% y0 C1 u7 T' R* b
$ Q! Z: W0 ]" E d: r% G 03 线性规划、整数规划、多元规划、二次规划等规划类问题9 I2 Z! m) S# ?* m9 H' V
数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件、几个函数表达式作为目标函数的问题。* D! t+ b9 E0 Q% [' s4 Y7 Y
f8 h) a8 f) s/ P3 X # `* ~! ?, g/ ^; g3 L! j& S9 R遇到这类问题,求解就是关键了,比如 98 年 B 题,用很多不等式完全可以把问题刻画清楚,因此列举出规划后用 Lindo、Lingo 等软件来进行解决比较方便,所以还需要熟悉这两个软件。 6 p: l" o# p' @* l% }/ o' x$ c- s. q ?- H) C
! x, x* h! ?$ ~8 `2 s0 L 04 图论算法 5 J; J. f& s ~, S, m+ J* v2 ^这类问题算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等问题。 $ Q) J2 P9 e, K8 t9 o ! ?4 W7 G2 A& Z7 O- F & y3 ?# p6 M/ s关于此类图论算法,可参考 IntroductiontoAlgorithms--算法导论,关于图算法的第22章-第26章。) E p/ x s' _
0 @* T% B: N+ @4 t
1 {- e! m6 E+ V* G# _
, Z { j) M3 t& O5 ?
% Q# `2 ]/ m7 c3 c9 x x7 c$ Z8 B8 q5 s% S. I; ^5 O
1 a3 Q- }. k1 r 05 动态规划、回溯搜索、分治算法、分支定界等计算机算法& D+ G7 f" ?- Q) G5 U. I, x( q
在数学建模竞赛中,如:92 年 B 题用分枝定界法,97年 B 题是典型的动态规划问题,此外 98 年 B 题体现了分治算法。 " k5 O3 x: {( Z$ y* g2 {2 l 3 x9 O$ C+ z% X; D; Y: I ! y9 U$ z" X) v' n# m9 d. I+ e; _% Q2 `$ Q4 W& x; C' d; B; p
- c9 D/ p/ Z) Z* a' a8 N# l
+ f( Y6 @% O2 ?# S2 s
7 g/ @0 l R7 f( A# ]这方面问题和 ACM 程序设计竞赛中的问题类似,推荐看一下算法导论,与《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。 ; {( I9 V* ~2 A, s3 H( k% o; \8 g! M: V* ^; }/ s8 O
1 J2 c1 m$ b: B( X: E" D4 v! W' U 06 最优化理论的三大经典算法:模拟退火法、神经网络、遗传算法. s$ ?5 P. z; O9 O% v
这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。 % L4 h3 R7 _# G0 y. O% H" E / ~: M+ g0 K1 } 8 v- K3 O: W2 l4 R) ?# j在数学建模竞赛中:比如 97 年 A 题的模拟退火算法,00 年 B 题的神经网络分类算法,01 年 B 题这种难题也可以使用神经网络。, _9 M4 y" O. e$ o, p. n
( Q9 i% J' w; W7 J5 o# I N+ b* v; A4 [: _' y
还有美国竞赛 89 年 A 题也和 BP 算法有关系,当时是 86 年刚提出 BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。+ T3 o6 b1 `* ~- h7 x9 J# L
* h1 ^$ d) v8 G5 C% I9 A/ e! s9 ]+ D8 _, k
03 年 B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。 - v9 w/ Z) E r- A, x 2 Y& @* T5 d! A f4 j 2 r1 L. |9 k) B* W- o$ a! }& B . k A" ?; V$ y! C ( W" x, q6 J2 f' Y9 F; s2 Q* W) ~" h) X
. ^$ z0 [" t" b1 u % Y1 h! C( M2 ^% v
8 n" f6 a6 P) Y* T; ?; u3 A! B& _: c x( i1 [% {$ M0 N
07 网格算法和穷举法 / e6 T$ [8 x1 G0 E网格算法和穷举法一样,只是网格法是连续问题的穷举。0 k( v; g5 Q8 v( U
% ^! z! h% Y" J* {; ^1 V
* Y) a1 K' A0 M
比如要求在 N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在 [a;b] 区间内取 M+1 个点,那么这样循环就需要进行 (M+1)N 次运算,所以计算量很大。7 W: N1 C# z5 I. o
K+ t6 p5 {! {) k9 j: E; Y% O8 ^' O( P) p* ?0 G: V }
在数学建模竞赛中:比如 97 年 A 题、99 年 B 题都可以用网格法搜索,这种方法最好在运算速度较快的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久。# V& q& b- h3 ^- ?0 m; U' M
: H2 T3 P* y9 j. `7 m , n0 R: a: b4 J: F6 w8 L: D穷举法大家都熟悉,自不用多说了。/ g6 Q8 ^' w3 o
0 ?4 a$ f6 s! c) U7 M. b7 d, z8 ^8 i% _* G n. q
08 一些连续离散化方法 + M+ H# o9 u9 l4 _( o大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。 8 ~9 x0 ?$ E0 e4 K- R! K 1 S0 D0 t, K6 \5 T1 E 9 s4 [( p# y2 {. A7 M0 I0 O z/ V: |) c: j这种方法应用很广,而且和上面的很多算法有关。事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。' E) Q, ~# ]- h; n9 Q9 ]! N( N
( E2 J! m/ o6 _8 e+ B; G9 g3 W- O0 j. o1 b* u- U
09 数值分析算法+ B$ a' P& u4 \( _0 I" s z$ s v
数值分析(numericalanalysis),是数学的一个分支,主要研究连续数学(区别于离散数学)问题的算法。) K9 c- Y; ?; e w: e
3 A1 t! B+ U* h l/ `7 J 4 Y( r# x5 k4 c% y, P& w如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。 . E8 {% j4 q8 K: Q3 L8 z! \; p' P5 E% X$ ?- }% N
+ Q z; d: `9 p
这类算法是针对高级语言而专门设的,如果你用的是 MATLAB、Mathematica,大可不必准备,因为像数值分析中有很多函数一般的数学软件是具备的。" g+ z% e$ d) Z# c9 h3 G
) X6 P) _$ P# t/ ~2 I; e/ l( H* q2 d! D5 g) z; b6 M
10 图象处理算法/ H0 u, E; Q* Z7 u5 d8 @
在数学建模竞赛中:比如 01 年 A 题中需要你会读 BMP 图象、美国赛 98 年 A 题需要你知道三维插值计算,03 年 B 题要求更高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,因此图象处理就是关键。做好这类问题,重要的是把 MATLAB 学好,特别是图象处理的部分。% `5 Z; |: x2 y; J Z2 H4 G