Skip to content

16.3.5 蒙特卡罗方法

16.3.5.1 模拟

模拟法立足于构建等价的数学模型. 通过计算机分析这些模型很容易. 在这种情形下, 可使用数字模拟. 当一定数量的模型被随机选取时, 蒙特卡罗方法给出了一个特殊案例. 这些随机元素可使用随机数选取.

16.3.5.2 随机数

随机数是满足特定分布的某些随机量的实现 (参见第 1061 页 16.2.2). 通过这种方式可区分不同类型的随机数.

1. 均匀分布的随机数

均匀分布于区间 [0,1] 的随机数,是密度函数为 f0(x) 、分布函数为 F0(x) 的随机变量 X 的实现:

(16.168)f0(x)={1,0x1,0, 其他,F0(x)={0,0x,x,0<x1,1,x1.

(1)平方取中法 冯・诺伊曼提出了一种产生随机数的简便方法, 也称为平方取中法,它从一个 2n 位小数 z(0,1) 开始. 首先构造 z2 ,得到一个 4n 位小数. 去掉其前 n 位数字和后 n 位数字,再次得到一个 2n 位数. 重复上述程序,进一步产生新数. 通过这种方式即产生了 [0,1] 区间上的 2n 位小数,可视为服从均匀分布的随机数. 根据计算机可表示的最大数选取 2n 的值,比如 2n=10 . 由于该程序产生了比它更小的数字, 故很少使用, 目前已发展了其他一些不同的方法.

2n=4

z=z0=0,1234,z02=0.01522756,z=z1=0,5227,z02=0.27321529,z=z2=0,3215等.

最初的三个随机数是 z0,z1z2 .

(2) 同余法 所谓的同余法应用广泛: 整数序列 zi(i=0,1,2,) 由递推公式

(16.169)zi+1czimodm

生成,其中, z0 是任意正数, cm 表示正整数,必须合理选取. 对于 zi+1 ,可取满足同余式 (16.169) 的最小非负整数. 数 zim 位于 0 到 1 之间,可作为均匀分布随机数.

(3) 注 a) 选取 m=2r ,其中 r 是计算机语言中的二进制数,例如 r=40 ,则依 m 的次序选取数 c .

b) 随机数生成器使用特定算法, 可产生所谓伪随机数.

c) 计算器以及计算机中的 “ran” 或 “rand” 键用于生成随机数.

2. 服从其他分布的随机数

为得到服从任意分布函数 F(x) 的随机数,可使用下述程序: 对于区间 [0,1] 上的均匀分布随机数序列 ξ1,ξ2, ,利用它们构造数 ηi=F1(ξi),i=1,2, ,其中 F1(x) 是分布函数 F(x) 的逆函数,则可得到

(16.170)P(ηix)=P(F1(ξi)x)=P(ξiF(x))=0F(x)f0(t)dt=F(x),

即随机数 η1,η2, 服从分布函数为 F(x) 的分布.

3. 随机数表及其应用

(1) 构造 可通过下述方式构造随机数表. 在 10 个完全相同的筹码上标注数字 0,1,2,,9 ,把它们放在一个盒子中并摇匀. 选取其中之一,将其对应的号码写到表格中, 然后把筹码再次放到盒子中摇匀, 选取第二个. 通过这种方式即产生一个随机数序列, 可作为一组记录到表格中 (使用更方便). 在 1464 页表 21.21 中, 4 位随机数形成一组.

在程序中,必须保证数字 0,1,2,,9 总是等概率出现.

(2)随机数表的应用 举例说明随机数表的应用.

  • 假设从 N=250 项的总体中随机选取 n=20 项. 总体中的对象记数为 000 到 249. 然后在 1464 页表 21.21 的任意列或行中选取一个数, 明确如何选取其余 19 个数的规则, 如纵向、横向或对角线方向. 只要最初的 3 个数字取自于随机数, 且生成的数小于 250 个, 该方法即可使用.

16.3.5.3 蒙特卡罗模拟举例

求积分

(16.171)I=01g(x)dx

的近似值是模拟中应用均匀分布随机数的一个实例. 下面讨论两种求解方法.

1. 运用频率

0g(x)1 . 通过积分变换总可保证该条件成立 (参见第 1103 页 (16.175)) 则积分 I 是单位正方形 E 内的区域面积 (图 16.16). 考虑区间 [0,1] 内均匀分布随机数序列的数值,把它们成对地作为单位正方形 E 内点的坐标,可得到 n 个点 Pi(i=1,2,,n) . 用 m 表示区域 A 内点的数量,则可使用频率把积分表示为 (参见第 1057 页 16.2.1.2)

(16.172)01g(x)dxmn.

使用 (16.172) 的比值, 欲得到较好的精确度, 需要大量随机数. 这正是人们探究有可能提高精度的原因. 方法之一是下述蒙特卡罗方法, 另外一些方法可查阅相关文献 (参见文献 [16.19]).

0193686d-91c3-7222-a100-f59d7e5e597d_100_581_1380_478_367_0.jpg

2. 利用均值逼近

为求解式 (16.171),可从 n 个均匀分布随机数 ξ1,ξ2,,ξn 出发,作为均匀分布随机变量 X 的实现. 则 gi=g(ξi)(i=1,2,,n) 是随机变量 g(X) 的实现, 根据第 1063 页的公式 (16.49a,16.49b), g(X) 的期望是

(16.173)E(g(X))=g(x)f0(x)dx=01g(x)dx1ni=1ngi.

这种方法使用样本得到均值, 也称为普通蒙特卡罗方法.

16.3.5.4 在数值数学中应用蒙特卡罗方法

1. 估计多重积分

首先说明如何把单变量的定积分 (16.174a) 变换为包含积分 (16.174b) 的式子.

(16.174a)I=abh(x)dx(16.174b)I=01g(x)dx 且 0g(x)1.

引入下述记号:

(16.175)x=a+(ba)u,m=minx[a,b]h(x),M=maxx[a,b]h(x),

即可使用 16.3.5.3 中给出的蒙特卡罗方法, 则 (16.174a) 变形为

(16.176)I=(Mm)(ba)01h(a+(ba)u)mMmdu+(ba)m,

其中被积函数 h(a+(ba)u)mMm=g(u) 满足 0g(u)1 .

通过双重积分

(16.177)V=Sh(x,y)dxdy 且 h(x,y)0

的例子,说明如何使用蒙特卡罗方法近似估计多重积分. S 表示由不等式 axbφ1(x)yφ2(x) 所围成的平面区域,其中 φ1(x)φ2(x) 表示已知函数. 则 V 可视为与 xy 平面垂直、上表面为 h(x,y) 的圆柱体的体积. 若 h(x,y)e ,则圆柱体位于由不等式 axb,cyd,0ze(a,b,c,d,e为常数) 所围成的立体 Q 内. 类似于 (16.175) 进行变换,由 (16.177) 可得到包含积分的表达式

(16.178)V=Sg(u,v)dudv 且 0g(u,v)1,

其中 V 是三维立方体内柱体 K 的体积. 利用蒙特卡罗方法按照下述方式可求积分 (16.178) 的近似值:

区间 [0,1] 内均匀分布随机数序列的三元数组,可视为立方体内点 Pi(i= 1,2,,n) 的坐标,查找 Pi 中位于柱体 K 内点的个数. 若 m 个点在 K 内,与 (16.172) 类似, 可得

(16.179)Vmn

注 当定积分中只有一个积分变量时, 可使用第 1252 页 19.3 中的方法. 若估计多重积分, 仍常推荐用蒙特卡罗方法.

2. 使用随机游动过程求解偏微分方程

借助随机游动过程, 蒙特卡罗方法可用于近似求解偏微分方程.

a) 边值问题举例 考虑下述边值问题作为例子:

(16.180a)Δu=2ux2+2uy2=0,(x,y)G,(16.180b)u(x,y)=f(x,y),(x,y)Γ.

Gxy 平面内的单连通区域; Γ 表示 G 的边界 (图 16.17). 与第 1268 页 19.5.1 中的差分法类似,用二次格覆盖 G ,不失一般性,此处可假定步长 h=1 .

0193686d-91c3-7222-a100-f59d7e5e597d_102_591_1181_453_339_0.jpg

通过这种方式可得到内部格点 P(x,y) 和边界点 Ri . 边界点 Ri 同时也是格点, 在下面的讨论中可视为 G 的边界 Γ 的点,即

(16.181)u(Ri)=f(Ri)(i=1,2,,N).

b) 求解原则 设想粒子从内部点 P(x,y) 开始随机游动,也就是说:

(1)粒子从 P(x,y) 向四个临近点中的某一个随机移动. 假设移向每一个格点的概率是 1/4 .

(2) 如果粒子到达边界点 Ri ,则随机游动以概率 1 终止.

可以证明,无论粒子从哪一内部格点 P 开始,经过一定步数后,都将以概率 1 到达边界点 Ri . 用

(16.182)p(P,Ri)=p((x,y),Ri)

表示始于 P(x,y) 、将在边界点 Ri 终止的随机游动的概率,则可得到

(16.183)p(Ri,Ri)=1,p(Ri,Rj)=0,ij,p((x,y),Ri)=14[p((x1,y),Ri)+p((x+1,y),Ri)+p((x,y1),Ri)+p((x,y+1),Ri)]

(16.184)

(16.184) 是关于 p((x,y),Ri) 的差分方程. 若 n 个随机游动从点 P(x,y) 开始. 其中 mi 个在 Ri(min) 终止,则

(16.185)p((x,y),Ri)min.

(16.185) 给出了差分方程 (16.180a) 的近似解, 其边界条件为 (16.181). 若进行替换

(16.186)v(P)=v(x,y)=i=1Nf(Ri)p((x,y),Ri),

则满足边界条件 (16.180b). 根据 (16.184),有 v(Rj)=i=1Nf(Ri)p(Rj,Ri)=f(Rj) .

为计算 v(x,y) ,用 f(Ri) 乘以(16.184),求和将得到下述关于 v(x,y) 的差分方程:

(16.187)v(x,y)=14[v(x1,y)+v(x+1,y)+v(x,y1)+v(x,y+1)].

n 个随机游动从点 P(x,y) 开始,其中 mj 个终止于边界点 Ri(i=1,2, , N) ,则在点 P(x,y) 处边值问题(16.180a,16.180b)的近似值为

(16.188)v(x,y)1ni=1nmif(Ri).

16.3.5.5 蒙特卡罗方法的进一步应用

作为随机模拟, 蒙特卡罗方法有时也称为统计试验方法 广泛应用于诸多不同领域. 例如:

  • 核技术: 穿过材料层的中子数.

  • 通信: 分离信号和噪声.

  • 运筹学: 排队系统, 过程设计, 库存控制, 服务系统.

对这些问题的细节讨论可参见文献 [16.19], [16.23].

version 1.24.0