|
蒙特卡罗(Monte Carlo)方法,或称计算机随机模拟方法,是一种基于“随机数”的计算方法。这一方法源于美国在第一次世界大战进研制原子弹的“曼哈顿计划”。该计划的主持人之一、数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘色彩。 ; K* b2 I# f: R) M- C1 N. o( @5 L
Monte Carlo方法的基本思想很早以前就被人们所发现和利用。早在17世纪,人们就知道用事件发生的“频率”来决定事件的“概率”。19世纪人们用投针试验的方法来决定圆周率π。本世纪40年代电子计算机的出现,特别是近年来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。
1 z/ t- `6 o& ^9 \2 M' ~1 K$ [& l 考虑平面上的一个边长为1的正方形及其内部的一个形状不规则的“图形”,如何求出这个“图形”的面积呢?Monte Carlo方法是这样一种“随机化”的方法:向该正方形“随机地”投掷N个点落于“图形”内,则该“图形”的面积近似为M/N。
) @ j( D- S7 E 可用民意测验来作一个不严格的比喻。民意测验的人不是征询每一个登记选民的意见,而是通过对选民进行小规模的抽样调查来确定可能的优胜者。其基本思想是一样的。
' m2 N( I A2 r2 _/ y 科技计算中的问题比这要复杂得多。比如金融衍生产品(期权、期货、掉期等)的定价及交易风险估算,问题的维数(即变量的个数)可能高达数百甚至数千。对这类问题,难度随维数的增加呈指数增长,这就是所谓的“维数的灾难”(Course Dimensionality),传统的数值方法难以对付(即使使用速度最快的计算机)。Monte Carlo方法能很好地用来对付维数的灾难,因为该方法的计算复杂性不再依赖于维数。以前那些本来是无法计算的问题现在也能够计算量。为提高方法的效率,科学家们提出了许多所谓的“方差缩减”技巧。 2 I. K' ?1 O! J9 _, T
另一类形式与Monte Carlo方法相似,但理论基础不同的方法—“拟蒙特卡罗方法”
K% L( c4 h* ]/ W8 A(Quasi-Monte Carlo方法)—近年来也获得迅速发展。我国数学家华罗庚、王元提出的“华—王”方法即是其中的一例。这种方法的基本思想是“用确定性的超均匀分布序列(数学上称为Low Discrepancy Sequences)代替Monte Carlo方法中的随机数序列。对某些问题该方法的实际速度一般可比Monte Carlo方法提出高数百倍,并可计算精确度。 具体实现的matlab代码:
1 D$ `, r) L9 \! m9 m---------------------------------------------------------------------------------------------------8 _8 g( C, D; D$ V& i- g5 v
function val = ballvol(n, m)
+ J$ O8 E3 j+ ~ X+ e% BALLVOL Compute volume of unit ball in R^n
0 _; ^* L; T0 E* a4 I: t%
, I, N7 B/ q$ o: R/ o( M% Computes the volume of the n-dimensional unit ball
3 o4 g: J) t/ n$ F% using monte-carlo method.6 G8 N, t0 g' _ j1 [& G0 q
% usage: val = BallVol(n, m)
2 M: }9 ^ I6 n+ ]+ y% where: n = dimension
4 z& ~# F6 ^7 V& b/ U+ U% m = number of realisations4 C: J% ~& n: \5 v) _6 k' f1 R: \9 b, s
% If the second argument is omitted, 1e4 is taken as default for m. X( M/ C/ `( x" [1 K6 ~
& j' G9 S2 F" l( X8 L
% (c) 1998, Rolf Krause, krause@math.fu-berlin.de( x0 v; x2 K7 c: T8 E
: L- i: A2 @% h( Z# L l. L) ^. w6 G; ZM = 1e4;& H r, ?: l: Y2 \
error = 0;
1 F* ^- u+ S4 v z: yif(nargin <1 | nargin > 2), error('wrong number of arguments'); end
z. ?- R/ B7 }2 H7 `8 jif nargin == 2, M = m; end " [: Y4 c2 {: s% i6 y
0 H* T& f: \- H( Y$ U6 nR = rand(n, M);+ T6 g$ z; q) c1 t7 q& |) k
in = 0;2 O: s/ X5 u1 G
for i=1:M: L# [( V; S i6 [5 c% k
if(norm(R(:,i),2) <= 1.0), in = in+1; end4 s1 A x8 S) ]. B
end/ {; U0 K& e- G4 k
# R+ {) [, O& |% {. o0 E
val = 2^n*in/M;/ e: i( u4 u r z; M- E) K- |- u v' L8 V
--------------------------------------------------------------------------------------------------
" Q' t" B5 E5 s4 J9 } |