当某些随机变量的分布函数不容易获取其反函数时,就不能使用反变换法产生该随机变量的随机数,这是可以考虑使用拒绝法产生随机数。
假设某随机变量的概率密度曲线如下图所示
对于随机变量的某一个取值x1,其概率密度为p(x1),其接受率即为x=x1的概率密度。
拒绝法产生随机数的步骤:
(1)对概率密度函数p(x)的值域做归一化处理(因为r1=(0,1),r1要反映r2=x1的概率密度—比重,所以p(x)必须在(0,1)范围),即确定一个常数C,使得:
C*p(x)<1
(2)根据x的取值范围,将其定义为r的线形函数:
x(r)=a+(b-a)r
(3)随机产生一对标准随机变量r1,r2;
(4)若r1,r2满足下式:
r1<=C*p(x(r2))
则取x=r2,否则返回(3)。
随机变量x的概率密度函数如下:
设计该随机变量的伪随机数产生方法,并产生随机变量x的10个随机数。
解:
(1) 概率密度取值归一化
要求: 令:
-àC=0.4822
(2)因为x取值范围已经是[0,1],所以不需进行处理
(3)随机产生随机数对(r1,r2)
(4)判断是否接受x=r2
使用拒绝法产生该随机变量数据的Excel实现表格如下。
E列红色数字为产生并选定的随机变量x的数值。其中A列和B列数字行使用了Excel提供的[0,1]均匀分布随机函数Rand(),C列数字行使用的表达式为:=0.4822*60*POWER(B3,3)*POWER(1-B3,2);D列使用自定义判定函数=Refuse(A3,C3);E列使用自定义判定函数=Getit(D3,B3);其中两个自定义函数体如下:
Public Function Refuse(r1 As Double, pr2 As Double) As Integer
If pr2 >= r1 Then
Refuse = 1
Else
Refuse = 0
End If
End Function
-----------------------------------------------------------------------------------------------------------
Public Function Getit(Decision As Integer, r2 As Double) As Double
If Decision = 1 Then
Getit = r2
Else
Getit = 0
End If
End Function
标准正态分布概率密度函数如下:
反变换过程如下:
设变量x,y分别为服从标准正态分布的随机变量,则
进行坐标变换:
————〉
其中:
故:
其中:
在对上述两个随机分布进行反变换:
则:
这种方法直观,推理明确,不过计算中出现了三角函数、对数运算,速度较低。
产生服从通用正态分布随机变量x的随机数步骤如下:
步骤:
令:
则:
à----->
步骤:
(1)概率密度值域归一化处理
---〉
(2)对x的取值范围进行设定
x=a+(b-a)*r2
令a=-b=-1000(一个足够大的负数)
(3)随机产生两个标准随机数r1,r2
(4)判断是否接受x= a+(b-a)*r2
判断条件为: