![785ac335b556854ea353ea77a9d2243a.png](https://i-blog.csdnimg.cn/blog_migrate/adb241ddd6f8abbe10f874d4cba01184.jpeg)
我们前面已经讲过可以用逆变换法对连续型随机变量进行模拟。该方法必须保证分布函数的逆函数有一个显式的表达。这在大多数情况下是很难做到的。比如正态分布的分布函数就没有显式的表达,更不说其逆函数了。这样用拒绝法对正态分布的随机变量的模拟就无法实现了。如何解决这个问题呢?拒绝法是一种解决方法,其思想与离散型随机变量拒绝法类似,见离散型随机变量模拟-拒绝法。下面具体地给出拒绝法的思想、算法及其实现步骤。
令
拒绝法步骤
- 生成
;
- 生成随机数
;
- 若
,则令
. 否则,返回步骤1.
定理 (1)由拒绝法生成的
(2) 拒绝法迭代次数
由该定理可以看出,c越小,平均迭代的次数就越少。因此一般地取
例子1 用拒绝法模拟一个密度函数为
解:因为
算法步骤:
- 生成随机数
;
- 生成随机数
,若
,则令
结束。否则返回步骤1。
执行步骤1的平均次数为
生成一个
y<-runif(1)
u<-runif(1)
while (u>(256*y*(1-y)^3)/27){
y<-runif(1)
u<-runif(1)
}
x<-y
x
运行结果:
> x
[1] 0.4946905
作业:
1.用拒绝变换法产生一个随机变量
2.用拒绝变换法产生一个随机变量
3.用拒绝变换法产生一个随机变量
参考答案:
1.密度函数为
令
这样便可以得到模拟
- 生成随机数
;
- 生成随机数
;
- 若
,则令
;否则返回到步骤1
R语言实现
u<-runif(1)
u1<-runif(1)
while (u1>=2*u+1)/3){
u<-runif(1)
u1<-runif(1)
}
x<-u
x
2. 令
那么
y<-rexp(1,0.5)
u<-runif(1)
while (u>=y*exp(-y/2+1)/2){
y<-rexp(1,0.5)
u<-runif(1)
}
x<-y
x