|
蒙特卡罗(Monte Carlo)方法,或称计算机随机模拟方法,是一种基于“随机数”的计算方法。这一方法源于美国在第一次世界大战进研制原子弹的“曼哈顿计划”。该计划的主持人之一、数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘色彩。
' I) Y5 _7 A% Q( o Monte Carlo方法的基本思想很早以前就被人们所发现和利用。早在17世纪,人们就知道用事件发生的“频率”来决定事件的“概率”。19世纪人们用投针试验的方法来决定圆周率π。本世纪40年代电子计算机的出现,特别是近年来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。
$ |" [8 c* ?3 X7 P" L# l. Z+ k 考虑平面上的一个边长为1的正方形及其内部的一个形状不规则的“图形”,如何求出这个“图形”的面积呢?Monte Carlo方法是这样一种“随机化”的方法:向该正方形“随机地”投掷N个点落于“图形”内,则该“图形”的面积近似为M/N。 ) s* V; w m6 {
可用民意测验来作一个不严格的比喻。民意测验的人不是征询每一个登记选民的意见,而是通过对选民进行小规模的抽样调查来确定可能的优胜者。其基本思想是一样的。 . f) w3 D- b0 }9 j
科技计算中的问题比这要复杂得多。比如金融衍生产品(期权、期货、掉期等)的定价及交易风险估算,问题的维数(即变量的个数)可能高达数百甚至数千。对这类问题,难度随维数的增加呈指数增长,这就是所谓的“维数的灾难”(Course Dimensionality),传统的数值方法难以对付(即使使用速度最快的计算机)。Monte Carlo方法能很好地用来对付维数的灾难,因为该方法的计算复杂性不再依赖于维数。以前那些本来是无法计算的问题现在也能够计算量。为提高方法的效率,科学家们提出了许多所谓的“方差缩减”技巧。 $ }% ^: }6 q* P( Q9 x: z
另一类形式与Monte Carlo方法相似,但理论基础不同的方法—“拟蒙特卡罗方法”
0 C' P; @- e( f* N' z(Quasi-Monte Carlo方法)—近年来也获得迅速发展。我国数学家华罗庚、王元提出的“华—王”方法即是其中的一例。这种方法的基本思想是“用确定性的超均匀分布序列(数学上称为Low Discrepancy Sequences)代替Monte Carlo方法中的随机数序列。对某些问题该方法的实际速度一般可比Monte Carlo方法提出高数百倍,并可计算精确度。 具体实现的matlab代码:
% u B* T$ R5 c2 H. A---------------------------------------------------------------------------------------------------
" r4 R8 n2 P. u9 h' A/ B5 i! Mfunction val = ballvol(n, m)
1 I9 ^1 B& S4 ?6 q$ W+ R% BALLVOL Compute volume of unit ball in R^n
, W" C1 @% w5 c4 S%1 O: I9 P6 O6 _3 u6 f) u
% Computes the volume of the n-dimensional unit ball
- p( q5 A; [5 g9 V- s% using monte-carlo method.3 k$ n( |2 [: H' G8 A
% usage: val = BallVol(n, m)8 P8 K1 v* W- ~
% where: n = dimension 2 X% C8 R; d# Q! c3 c# f% [
% m = number of realisations! ? r6 C5 @ a. S3 }
% If the second argument is omitted, 1e4 is taken as default for m.9 f4 h) Q6 b* M" F
, O- @/ R6 }+ @# |; c! H* P% (c) 1998, Rolf Krause, krause@math.fu-berlin.de
$ X) L& ~; _; f6 c7 b! Q9 J1 M3 a0 h5 N/ i' L
M = 1e4;
: z1 f# h5 @! a7 u& a3 e0 ]* T) merror = 0;8 S$ } s: j; s! t6 [ h& b
if(nargin <1 | nargin > 2), error('wrong number of arguments'); end
8 d: s T( D8 O9 ?if nargin == 2, M = m; end + Q8 w2 e: W5 X9 L
7 K/ f! c* ?4 m- t' B, ~: L3 HR = rand(n, M);
# u$ P0 ?2 a6 l7 R9 X9 Gin = 0;
3 t" z' t3 U. xfor i=1:M& R( E9 p, @& J1 t& _6 n8 b" K
if(norm(R(:,i),2) <= 1.0), in = in+1; end
5 G& d* F! |) x3 e- G& u$ F9 i' P+ Nend' Y" p; Y3 b) W7 P
! @6 u, v: f9 |1 tval = 2^n*in/M;
: v' f2 z3 y7 C6 {6 J; A0 h' l--------------------------------------------------------------------------------------------------
! H" g6 W& J$ Z5 H- A |