|
蒙特卡罗(Monte Carlo)方法,或称计算机随机模拟方法,是一种基于“随机数”的计算方法。这一方法源于美国在第一次世界大战进研制原子弹的“曼哈顿计划”。该计划的主持人之一、数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘色彩。 " A- h3 P$ ~# p% L& T, X. Y) O
Monte Carlo方法的基本思想很早以前就被人们所发现和利用。早在17世纪,人们就知道用事件发生的“频率”来决定事件的“概率”。19世纪人们用投针试验的方法来决定圆周率π。本世纪40年代电子计算机的出现,特别是近年来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。 3 p9 V* j* Z, Y/ p7 i0 n& N
考虑平面上的一个边长为1的正方形及其内部的一个形状不规则的“图形”,如何求出这个“图形”的面积呢?Monte Carlo方法是这样一种“随机化”的方法:向该正方形“随机地”投掷N个点落于“图形”内,则该“图形”的面积近似为M/N。 + v" V8 c5 d- y* u
可用民意测验来作一个不严格的比喻。民意测验的人不是征询每一个登记选民的意见,而是通过对选民进行小规模的抽样调查来确定可能的优胜者。其基本思想是一样的。
/ R9 P1 u, H; ^/ } 科技计算中的问题比这要复杂得多。比如金融衍生产品(期权、期货、掉期等)的定价及交易风险估算,问题的维数(即变量的个数)可能高达数百甚至数千。对这类问题,难度随维数的增加呈指数增长,这就是所谓的“维数的灾难”(Course Dimensionality),传统的数值方法难以对付(即使使用速度最快的计算机)。Monte Carlo方法能很好地用来对付维数的灾难,因为该方法的计算复杂性不再依赖于维数。以前那些本来是无法计算的问题现在也能够计算量。为提高方法的效率,科学家们提出了许多所谓的“方差缩减”技巧。 0 `& T! S5 }8 r( e: h% c% r. a$ A; ?
另一类形式与Monte Carlo方法相似,但理论基础不同的方法—“拟蒙特卡罗方法”
& M, c1 @5 ]9 ` e) T7 ^(Quasi-Monte Carlo方法)—近年来也获得迅速发展。我国数学家华罗庚、王元提出的“华—王”方法即是其中的一例。这种方法的基本思想是“用确定性的超均匀分布序列(数学上称为Low Discrepancy Sequences)代替Monte Carlo方法中的随机数序列。对某些问题该方法的实际速度一般可比Monte Carlo方法提出高数百倍,并可计算精确度。 具体实现的matlab代码:: h1 A7 y' W& p- p
---------------------------------------------------------------------------------------------------4 Q5 a4 q+ m: S' H; v
function val = ballvol(n, m)5 r* D3 q }, Q, F/ I T
% BALLVOL Compute volume of unit ball in R^n% A& I" E+ c0 u& q5 P- x4 Y4 X
%
( E8 \/ n9 R/ a1 j- u4 W1 h% Computes the volume of the n-dimensional unit ball ) P$ b# a, x$ Q& k
% using monte-carlo method.5 H e1 o9 J( f0 f
% usage: val = BallVol(n, m)
W) n7 P' h1 {$ z% M. }8 r% where: n = dimension , l4 x5 H+ C, n o9 D- J
% m = number of realisations, M5 L6 H% U$ l/ s! b, M4 ]0 \
% If the second argument is omitted, 1e4 is taken as default for m.
1 n5 A! W( w" j
' A0 N- X8 s5 u f- ~% (c) 1998, Rolf Krause, krause@math.fu-berlin.de/ `* S" B7 a" m" m- t
% {' W% k6 {; w; w8 ?1 E
M = 1e4;
, a1 F/ L' h2 s w* b5 V8 rerror = 0;; [; U7 O( b8 b' d1 g2 _
if(nargin <1 | nargin > 2), error('wrong number of arguments'); end8 g3 n: z1 t3 C2 W$ J
if nargin == 2, M = m; end
) s3 \' Y( J6 `1 L; s- {- |2 |4 h: h( i
R = rand(n, M);5 z& Q {6 g/ J7 Z; [7 J8 X0 G
in = 0;9 Z) E6 I+ a, m1 M
for i=1:M
" B8 g# v! {( u) N: Xif(norm(R(:,i),2) <= 1.0), in = in+1; end
4 W7 I3 v) r0 j' O- N5 Uend& M/ Y1 G: w b$ V" F+ P6 _" _
$ ?; w* o- l' w/ e& a; J' tval = 2^n*in/M;
: C! p8 m/ @/ |; U1 x- t) ]0 k--------------------------------------------------------------------------------------------------& q4 A+ O8 X9 g- e1 o; b! c
|