|
蒙特卡罗(Monte Carlo)方法,或称计算机随机模拟方法,是一种基于“随机数”的计算方法。这一方法源于美国在第一次世界大战进研制原子弹的“曼哈顿计划”。该计划的主持人之一、数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘色彩。 ' j9 I( `) S3 A0 K
Monte Carlo方法的基本思想很早以前就被人们所发现和利用。早在17世纪,人们就知道用事件发生的“频率”来决定事件的“概率”。19世纪人们用投针试验的方法来决定圆周率π。本世纪40年代电子计算机的出现,特别是近年来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。
0 h1 z' L' U/ I 考虑平面上的一个边长为1的正方形及其内部的一个形状不规则的“图形”,如何求出这个“图形”的面积呢?Monte Carlo方法是这样一种“随机化”的方法:向该正方形“随机地”投掷N个点落于“图形”内,则该“图形”的面积近似为M/N。
1 m z& e. `% L6 m 可用民意测验来作一个不严格的比喻。民意测验的人不是征询每一个登记选民的意见,而是通过对选民进行小规模的抽样调查来确定可能的优胜者。其基本思想是一样的。
( f3 s) H6 z0 M 科技计算中的问题比这要复杂得多。比如金融衍生产品(期权、期货、掉期等)的定价及交易风险估算,问题的维数(即变量的个数)可能高达数百甚至数千。对这类问题,难度随维数的增加呈指数增长,这就是所谓的“维数的灾难”(Course Dimensionality),传统的数值方法难以对付(即使使用速度最快的计算机)。Monte Carlo方法能很好地用来对付维数的灾难,因为该方法的计算复杂性不再依赖于维数。以前那些本来是无法计算的问题现在也能够计算量。为提高方法的效率,科学家们提出了许多所谓的“方差缩减”技巧。 : g2 R6 W0 Q" [1 t0 O* ~5 x
另一类形式与Monte Carlo方法相似,但理论基础不同的方法—“拟蒙特卡罗方法” * t0 m, P. c8 @. p* ?
(Quasi-Monte Carlo方法)—近年来也获得迅速发展。我国数学家华罗庚、王元提出的“华—王”方法即是其中的一例。这种方法的基本思想是“用确定性的超均匀分布序列(数学上称为Low Discrepancy Sequences)代替Monte Carlo方法中的随机数序列。对某些问题该方法的实际速度一般可比Monte Carlo方法提出高数百倍,并可计算精确度。 具体实现的matlab代码:/ n' Q- L Y2 O+ Y- @; W3 @% y
---------------------------------------------------------------------------------------------------" K) h- \9 s B- F; T
function val = ballvol(n, m)
7 q- p% O* Z& Y* Q7 z" P. g" P1 a% BALLVOL Compute volume of unit ball in R^n
8 F( M" g* f: g7 u%8 z* l1 _2 K: m h9 i3 J
% Computes the volume of the n-dimensional unit ball 9 Y7 I( _% P3 e) f$ P# l
% using monte-carlo method.
3 F' c* C8 j9 x% ?5 c7 i% usage: val = BallVol(n, m)
6 \# C& D! M; Z' m1 f9 E1 ]5 I% where: n = dimension 6 m" u7 A3 J, y' {1 \
% m = number of realisations5 p# `' B1 {- j6 c8 i
% If the second argument is omitted, 1e4 is taken as default for m.; }2 Y/ G- i. W6 a& ~& m" D/ _2 E
, z2 e, V8 Z: o8 @% `; a* T$ F; y% (c) 1998, Rolf Krause, krause@math.fu-berlin.de- z' U1 G* s1 C. F" c! o7 Z
- [% ?( n1 A; z V& p
M = 1e4;; D% K3 i- {$ _# L% R" [
error = 0;
* [& S" @8 j. `6 C2 Sif(nargin <1 | nargin > 2), error('wrong number of arguments'); end) k0 q/ D8 \6 Z) J
if nargin == 2, M = m; end
7 e0 X1 P4 s" R4 b, H5 l( ~$ R( P6 n. x* f* v' e/ G6 z
R = rand(n, M);( a; x0 K2 ]& K: U, b. D
in = 0;
$ B+ K: c$ E x" d* I) ?for i=1:M
$ x/ f0 [" @& w7 m) w6 k: [if(norm(R(:,i),2) <= 1.0), in = in+1; end
. P6 R9 h/ ^0 S6 B( ?' Qend
. }8 u, _/ k. v/ P4 I) W! F0 ? c& P; O. u
val = 2^n*in/M;
& v1 V- L* b% K& D' ]--------------------------------------------------------------------------------------------------
6 _: a1 x2 ~- ?, f- E8 I f8 u |