Monte Carlo 模拟

20
22/6/8 3.5 舍舍舍舍舍 1 第第第 第第第第第第第第第第 (Sampling from Probability Distribution Functions) Monte Carlo Monte Carlo 第第 第第 3.5 第第第第第 (acceptance-rejection sampling)

description

Monte Carlo 模拟. 3.5 舍选抽样法 (acceptance-rejection sampling). 第三章 从概率分布函数的抽样 (Sampling from Probability Distribution Functions ). 3.5 舍选抽样法( acceptance-rejection sampling). 直接抽样法的困难:. 许多随机变量的累积分布函数无法用解析函数给出 ; 有些随机变量的累积分布函数的反函数不存在或难以求出; 即使反函数存在,但计算困难. 舍选抽样法 (von Neumann) :. - PowerPoint PPT Presentation

Transcript of Monte Carlo 模拟

Page 1: Monte Carlo 模拟

23/4/21 3.5 舍选抽样法 1

第三章 从概率分布函数的抽样(Sampling from Probability Distribution Functions)

Monte CarloMonte Carlo 模拟模拟

3.5 舍选抽样法

(acceptance-rejection sampling)

Page 2: Monte Carlo 模拟

3.5 3.5 舍选抽样法(舍选抽样法( acceptance-rejection acceptance-rejection sampling)sampling)

直接抽样法的困难:

• 许多随机变量的累积分布函数无法用解析函数给出 ;• 有些随机变量的累积分布函数的反函数不存在或难以求出;

• 即使反函数存在,但计算困难

舍选抽样法 (von Neumann) :

抽取随机变量 x 的一个随机序列 xi, i=1,2,…, 按一定的舍选规则从中选出一个子序列,使其满足给定的概率分布 .

23/4/21 23.5 舍选抽样法

Page 3: Monte Carlo 模拟

23/4/21 3.5 舍选抽样法 3

第三章 从概率分布函数的抽样(Sampling from Probability Distribution Functions)

Monte CarloMonte Carlo 模拟模拟

3.5 舍选抽样法

(acceptance-rejection sampling)

3.5.1 3.5.1 简单舍选抽样法简单舍选抽样法3.5.2 3.5.2 改进的舍选抽样法改进的舍选抽样法3.5.3 3.5.3 典型的例子典型的例子

Page 4: Monte Carlo 模拟

舍选法抽样步骤:1. 产生 [a, b] 区间内均匀分布的随机

数 x: x = (b-a)r1+a, r1 U[0, 1];

2. 产生 [0,c] 区间内均匀分布的随机数 y: y = cr2, r2 U[0,1];

3. 当 y f(x) 时,接受 x 为所需的随机数,否则,返回到第一步重新抽取一对 (x,y).

Von Neumann rejection method or Hit-and-miss method

设随机变量 x 的取值区间为 x[a,b], 其概率密度函数f(x) 有界,即

cbxaxf |)(max

抽取 r1,r2 U[0,1]

x = a + (b-a)r1

y = cr2

y f(x)

X = x

>

23/4/21 43.5 舍选抽样法

3.5.1 3.5.1 简单舍选抽样法简单舍选抽样法

Page 5: Monte Carlo 模拟

a b x

f(x)

c

),( 111 yxt

),( 222 yxt

几何解释 :

• 在二维图上,随机选取位于矩形 abef 内的点 [x,y] ;• 选取位于曲线 f(x) 下的那些点,则这些点将服从概率密度为 f(x) 的分布

e f

23/4/21 53.5 舍选抽样法

3.5.1 3.5.1 简单舍选抽样法简单舍选抽样法

Page 6: Monte Carlo 模拟

证明 :

按舍选抽样法抽出的随机数 d 的概率:

a b x

f(x)

c

),( 111 yxt

),( 222 yxt

e fx 和 y 的概率密度函数分别为

联合概率密度函数为c

ygab

xg ss

1)(,

1)(

cabygxgyxg ss )(

1)()(),(

)()(),(

),())(|( )(

0

)(

0 dFdxxfdxdyyxg

dxdyyxgxfydxp

d

ab

a

xf

d

a

xf

即 d 的概率函数为 f(x)

d

23/4/21 63.5 舍选抽样法

3.5.1 3.5.1 简单舍选抽样法简单舍选抽样法

Page 7: Monte Carlo 模拟

抽样效率 :

对舍选抽样法:欲产生 m 个随机变量 x 的值需产生 n 对(x,y) ,显然, m n

如果选出某特定分布的一个随机数平均地需要 n 个随机数 r1 U[0, 1] ,则抽样效率定义为

cabcab

dxxf

n

mE

b

a

)(2

1

)(2

)(

2

a b x

f(x)

c

),( 111 yxt

),( 222 yxt

e f

d

nE

1

23/4/21 73.5 舍选抽样法

3.5.1 3.5.1 简单舍选抽样法简单舍选抽样法

Page 8: Monte Carlo 模拟

23/4/21 3.5 舍选抽样法 8

第三章 从概率分布函数的抽样(Sampling from Probability Distribution Functions)

Monte CarloMonte Carlo 模拟模拟

3.5 舍选抽样法

(acceptance-rejection sampling)

1.1. 简单舍选抽样法简单舍选抽样法2.2. 改进的舍选抽样法改进的舍选抽样法3.3. 典型的例子典型的例子

Page 9: Monte Carlo 模拟

改进的舍选抽样法

简单舍选抽样法的问题:

如果 f(x) 曲线下的面积占矩形面积的比例很小,则抽样效率很低,这是因为随机数 x 和 y 是在区间 [a, b] 和[0, c] 内均匀分布,所产生的大部分投点不会落在 f(x) 曲线下

x

c

f(x)改进方法:

构造一个新的概率密度函数 g(x) ,使它的形状接近 f(x), 且有

式中 Cg 为常数,而 g(x) 的抽样相对比较容易。

],[),()( baxxfxgCg

Cgg(x)

23/4/21 93.5 舍选抽样法

3.5.2 3.5.2 改进的舍选抽样法改进的舍选抽样法

Page 10: Monte Carlo 模拟

抽样方法:

1. 产生两个随机数• 产生分布为 g(x) 的随机数 x , x[a,b];• 产生 [0, Cgg(x)] 区间上均匀分布的随机数

y , y= Cgg (x) , U[0,1].

2. 接收或舍弃取样值 x.

• 如果 y > f(x) ,舍弃,返回到 1, 重复上述过程 ;

• 否则,接受 ;

23/4/21 103.5 舍选抽样法

3.5.2 3.5.2 改进的舍选抽样法改进的舍选抽样法

Page 11: Monte Carlo 模拟

几何解释 :

• 在二维图上,随机选取位于曲线 Cgg(x) 下的点 [x,y] ;

• 选取位于曲线 f(x) 下的那些点,则这些点将服从概率密度为 f(x) 的分布

x

c

f(x)

Cgg(x)

23/4/21 113.5 舍选抽样法

3.5.2 3.5.2 改进的舍选抽样法改进的舍选抽样法

Page 12: Monte Carlo 模拟

证明 :

按舍选抽样法抽出的随机数 d 的概率:d

x 和 y 的概率密度函数分别为

联合概率密度函数为

)(

1)(),()(

xgCygxgxg

gss

ggss CxgC

xgygxgyxg

1

)(

)()()(),(

)()(),(

),())(|( )(

0

)(

0 dFdxxfdxdyyxg

dxdyyxgxfydxp

d

ab

a

xf

d

a

xf

即 d 的概率函数为 f(x)

x

c

f(x)

Cgg(x)

23/4/21 123.5 舍选抽样法

3.5.2 3.5.2 改进的舍选抽样法改进的舍选抽样法

Page 13: Monte Carlo 模拟

抽样效率 :

gb

ag

b

a

CdxxgC

dxxfE

1

)(

)(

x

c

f(x)

Cgg(x)

常数 Cg 的选取

• 常数 Cg 应尽可能地小 , 因为抽样效率与 Cg 成反比 ;

• Cg=max{f(x)/g(x)}, x [a,b]

23/4/21 133.5 舍选抽样法

3.5.2 3.5.2 改进的舍选抽样法改进的舍选抽样法

Page 14: Monte Carlo 模拟

23/4/21 3.5 舍选抽样法 14

第三章 从概率分布函数的抽样(Sampling from Probability Distribution Functions)

Monte CarloMonte Carlo 模拟模拟

3.5 舍选抽样法

(acceptance-rejection sampling)

1.1. 简单舍选抽样法简单舍选抽样法2.2. 改进的舍选抽样法改进的舍选抽样法3.3. 典型的例子典型的例子

Page 15: Monte Carlo 模拟

2/2

2

1)( xexf

21

11)(

xxg

52.12

)1(2

max)(/)(max 2/2 2

eexxgxfC x

g

)arctan(arctanarctan2

1)()(

1

1

arctan2

1)(/)()(

2

axa

xdxgxF

xadxxgxgxg

x

ag

a

a

例 1: 标准正态分布的抽样 ,x[-a,a]

无法用直接抽样法 , 累积分布函数无解析表达式

Breit-wigner or Cauchy 分布

23/4/21 153.5 舍选抽样法

3.5.3 3.5.3 典型的例子典型的例子

Page 16: Monte Carlo 模拟

)arctan(arctan2tan

]1,0[

aax

U

Qu

Ux

xgCQ g

]1,0[1

152.1)(

2

由 g(x) 抽取 x 直接抽样法

抽取 u

计算 f(x), 如果 u<= f(x), 接受 x

23/4/21 163.5 舍选抽样法

3.5.3 3.5.3 典型的例子典型的例子

Page 17: Monte Carlo 模拟

float gaussian_reject(double a){ const float c = 1.52; while(true) { float eta = randac(); float x = tan(eta * 2.0 * atan(a)+atan(-a)); float q = c * 1/3.1415926*1.0/(1+x*x); float ksi = randac(); float u = ksi*q; float p = 1/sqrt(2*3.1415926)*exp(-x*x/2.0); if(u <= p) break; } return x;}

23/4/21 173.5 舍选抽样法

3.5.3 3.5.3 典型的例子典型的例子

Page 18: Monte Carlo 模拟

void test()

{

SetSeed(9,11);

c1 = new TCanvas("c1","Histogram Drawing Options",200,10,700,900);

c1->Divide(1,2);

TH1F * h1 = new TH1F("h1","h1",100,-5.0,5.0);

for(int i=0; i < 5000; i++) {

double x = gaussian_reject(5.0);

h1->Fill(x);

}

c1->cd(2);h1->Draw();

}

23/4/21 183.5 舍选抽样法

3.5.3 3.5.3 典型的例子典型的例子

Page 19: Monte Carlo 模拟

2cos

2sin2sin

2sin

2coscos 22 SC

AB/2

2222

22

2222

2sin,cos

2sin,

2cos

BA

ABS

BA

BAC

BA

B

BA

A

例 2 :利用舍选法产生随机数 C=cos, S=sin, 其中为 [0, 2]区间内均匀分布的随机数

方法 1 :先产生 [0, 2] 间均匀分布的随机数: = 2 r , rU[0,1], 然后直接计算 C 和 S 因需要计算三角函数,故此方法运算速度慢

方法 2 :利用舍选法可避免三角函数运算

令 A 和 B 为单位圆内直角三角形的两个边,则有

23/4/21 193.5 舍选抽样法

3.5.3 3.5.3 典型的例子典型的例子

Page 20: Monte Carlo 模拟

因此,只要产生单位圆内的随机坐标 A和 B,就可用代数运算求出 C和 S,算法为

1. 产生两个 [0,1]区间上均匀分布的随机数 u1 和 u2;

2. 令 v1=2u1-1, v2=u2, 则 v1U[-1,1],v2U[0,1];

3. 计算 r2=v12+v2

2, 如果 r2 > 1,转到 1,重新产生;

4. 令 A=v1, B=v2, 计算 C和 S

23/4/21 203.5 舍选抽样法

3.5.3 3.5.3 典型的例子典型的例子