( @; }+ H* ^. a 7 p* y. F/ O) k H2 r! k9 h! k9 I- Y6 z5 y
1 }* B" v- u% f R9 e
一、蒙特卡罗算法 4 c+ I2 J9 a; c( v7 g4 J1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick Metropolis1 b0 G. s ]! d6 {% S; ?8 X! d
共同发明了,蒙特卡罗方法。 1 }+ l; b+ d X2 e A; Q/ r% B. e( P W
) k% R+ u6 a/ O. W
此算法被评为20世纪最伟大的十大算法之一,详情,请参见我的博文:1 L3 a x$ _9 U6 @& Z
http://blog.csdn.net/v_JULY_v/archive/2011/01/10/6127953.aspx ( l! O+ D, V4 h% c" F! n + e% T% U' h) a) H: M, h# q5 m' V" o3 F9 x: _, A* k( N* |
8 J4 ~7 j- |& l0 m蒙特卡罗方法(Monte Carlo method),又称随机抽样或统计模拟方法,是一种以概率统计理论为指导) F8 e8 p/ C) z7 X" K6 \0 W( y
u- j3 {; I* `. l+ X1 D1 q( r
的一类非常重要的数值计算方法。此方法使用随机数(或更常见的伪随机数)来解决很多计算问题的方 7 T- ?9 ^/ s- L 8 J* u8 m0 I) R0 X! C9 V$ s# P法。4 J& s! A, Z- h7 P. L, A; H
) ?0 ?2 h+ u6 O" X; \$ `$ |: g. {+ a/ [1 p" U" |% D) Q$ H
/ @. D& B! r& q& O
由于传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真0 c% B& [$ `9 G
- }+ l( X0 F, Y3 e实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结果。 & b+ p: V- i1 D9 i % W* u% [ S4 S4 C3 P# w& H1 h蒙特卡罗方法的基本原理及思想如下:8 ^+ l, A1 v) b
当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法 8 q! e, x* h1 k* P7 \+ G, {5 c2 t" N
,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作 # P5 p+ M9 \. C8 M8 \! w% n2 ~ 8 t! @* s7 A) h3 z1 i& ?6 U$ b- f ?为问题的解。& o- y4 }, C1 T. s6 L; {0 i" O
% z% B5 O( j4 T6 [) [) z6 S7 w3 L0 q E, u
: W" D* b! Y! K: _& q0 _
有一个例子可以使你比较直观地了解蒙特卡洛方法: $ i/ N$ X1 z# i假设我们要计算一个不规则图形的面积,那么图形的不规则程度和分析性计算(比如,积分)的复杂程 " r- l7 o1 S7 d& {" M+ ?; i. v7 s+ F- n1 r6 [! ?
度是成正比的。蒙特卡洛方法是怎么计算的呢?假想你有一袋豆子,把豆子均匀地朝这个图形上撒,然" [$ k- |# ^& Q) L
0 M8 O) g/ g0 J# a. X. A4 i
后数这个图形之中有多少颗豆子,这个豆子的数目就是图形的面积。当你的豆子越小,撒的越多的时候* U9 W! e: g( h" J/ z o
5 t& | X/ k7 m+ q( O4 J' g: P,结果就越精确。- m8 a% A9 ^8 J3 Y6 e: M
在这里我们要假定豆子都在一个平面上,相互之间没有重叠。0 g0 j- f$ ]' p' g, Q( f) s$ s
$ k9 x8 |7 G, P5 O9 z6 `9 L6 L ; b; E1 p9 ^1 \8 }2 m: q3 w2 J$ d蒙特卡罗方法通过抓住事物运动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模, _2 |3 u6 M9 |' A8 U
. y# [5 q- R5 g( q
拟实验。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的$ x5 T1 U4 e+ V
8 t4 F% x- {3 R a
近似解。 ; u8 H- V8 l) K }" W k4 } 9 a) C+ P' r- T : C( S$ R1 ^8 l2 y ) ]7 `' T7 \& s蒙特卡罗方法与一般计算方法有很大区别,一般计算方法对于解决多维或因素复杂的问题非常困难,而 + K3 i* w3 h5 x# R. P, P$ U% ~. Y; k& s% R
蒙特卡罗方法对于解决这方面的问题却比较简单。其特点如下: 3 e) Z+ p" D6 S# j: g c# P
I、 直接追踪粒子,物理思路清晰,易于理解。 ; i1 L a: A- |( G; f5 a
II、 采用随机抽样的方法,较真切的模拟粒子输运的过程,反映了统计涨落的规律。7 [& z& g) c/ N- V9 s; i
III、不受系统多维、多因素等复杂性的限制,是解决复杂系统粒子输运问题的好方法。; O' O0 M4 |4 B2 E
等等。 8 v3 i' [, r! s+ F( C! ~: D% h! O9 R
此算法,日后还会在本BLOG 内详细阐述。 o, ?2 d. d5 N# Z- s! X# {% Z$ e4 j5 N: @ m
# m5 }5 h4 ]' L* O1 a
" w0 w- C* v* Q
5 O2 c3 F* u, U/ z1 J% O
二、数据拟合、参数估计、插值等数据处理算法 ) ~3 |- o6 X3 m. o1 ` G; e( m4 O, O我们通常会遇到大量的数据需要处理, 而处理数据的关键就在于这些算法,通常使用Matlab作为工具。; g. r" d. _9 e3 x; c; g4 S _( y4 ~! D
- N; w' ?4 u6 ^ ]! N" }; `6 `数据拟合在数学建模比赛中中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是98年数 " p- ^# D' N) i" T; R# ^( u 8 Q- Y9 ]& L9 I0 W: n学建模美国赛A题,生物组织切片的三维插值处理,94年A题逢山开路,山体海拔高度的插值计算,还有 # t2 i# x+ F% E: t7 Z4 g! B) y, } 2 z. m1 y$ F& Y吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。 ' W; p/ H7 E4 d) d9 _% K9 A+ W0 _/ v1 g. L: `1 T8 L
5 ?5 c2 l# s4 z% L
7 q) k3 _' F; N8 W
此类问题在 MATLAB 中有很多现成的函数可以调用,熟悉MATLAB,这些方法都能游刃有余的用好。 / M! h( n; ~0 C% C ; k2 B$ v ?8 J, c1 ] & v1 \- a( j5 {3 k * H$ [7 M- L: W3 T9 R! n 6 X" c' v0 ?/ w4 J三、线性规划、整数规划、多元规划、二次规划等规划类问题 ) i3 f& |! ?- ^/ ^数学建模竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件: R. j! U L2 O8 `+ F& N+ w
7 s j2 D3 q, O, V. u& n' C、几个函数表达式作为目标函数的问题,遇到这类问题,求解就是关键了,比如98年B题,用很多不等式 1 S& ?2 b3 H# a7 M" r2 t, N9 |0 v3 P. F9 [' I& Z
完全可以把问题刻画清楚,因此列举出规划后用 Lindo 、 Lingo 等软件来进行解决比较方便,所以还- B$ Y8 @, T$ U X+ T' Z
9 B4 W& E8 p+ s: Z; @7 r需要熟悉这两个软件。8 |' t' R, N. \7 N' e+ X+ G' v
: Y- K9 h5 X( R: u
2 Q) P6 c9 i8 \& M1 m- e/ Q( m9 V7 s1 t0 c7 O
; t+ W9 C5 X/ k& C) s四、图论算法/ n* A8 a/ M! D% G9 E2 R5 d B
这类问题算法有很多, % X$ }; ], d h% e9 Z包括: Dijkstra 、 Floyd 、 Prim 、 Bellman-Ford ,最大流,二分匹配等问题。 6 e1 u ?' t* z: N, e# H5 o6 W* u6 W% Z