非均匀分布随机数的产生及其在计算机模拟研究中的应用△
作者:胡性本 刘向明 方积乾
单位:胡性本(湖北职工医学院 荆州434000); 刘向明(湖北职工医学院 荆州434000 现为华中理工大学生物工程系博士研究生); 方积乾(湖北职工医学院 荆州434000 中山医科大学)
关键词:非均匀分布随机数;计算机模拟;程序设计
数理医药学杂志000134
摘 要:非均匀分布随机数在进行计算机模拟研究中有重要作用,但计算机高级语言通常都只提供产生均匀分布随机数的函数,给研究工作带来困难。该文提出的方法,较好地解决了这一问题,有很强的适用性。
中图分类号:O 242.1
文章编号:1004-4337(2000)01-0059-02▲
, http://www.100md.com
1 问题的提出
常用的计算机高级程序设计语言,大多提供了产生在[0,1]区间内连续均匀分布的独立随机数r的函数。若将产生的随机数作简单的变换X=a+(b-a)r,就能得到在区间[a,b]上均匀分布的随机数X。如果与取整或舍入函数结合运用,还可得到离散均匀分布的随机数,给计算机模拟提供了方便。但在很多情况下进行计算机模拟需要用到按某些特定规律分布的非均匀随机数。例如,在离子通道门控模型的模拟研究中,就经常要用到服从指数分布、对数分布、正态分布、普畦松分布等非均匀分布的随机数。这时可以在源程序中编写一个函数或过程来产生。我们在近年来所进行的计算机模拟研究工作[1,2]中,大量使用了非均们分布的随机数,获得成功。由于离散随机数可以由连续随机数通过取整或舍入等途径转换而得,本文只侧重介绍非均匀分布连续随机数的产生原理和应用实例,并给出了用类PASCAL语言[3]编写的相应的函数和过程。掌握了任何一种计算机高级语言编程技术和数据结构知识的人,都能很方便地转换成能上机运行的程序,有很大的灵活性与很强的实用性。
, 百拇医药
2 产生原理
假定连续随机变量X是连续随机变量R的函数
x=
(r) (1)
由概率统计知识可知,X与R在对应点的分布函数的数值应当相等,即产生R的反变换
F(x)=F(r) (2)
其中,r为(1)式的解,即r=
-1(x)=Ψ(x)
在特殊情况下,若R是在[0,1]区间内的均匀分布的连续随机变量,那么R , 百拇医药
F(x)=F(r)=r (3)
其反函数
x=F-1(r) (4)
具有分布函数F,现予以证明:因为分布函数是单调递增函数,其反函数存在。由概率知识可知,对任意实数X,有
P(X-1(R)
因为R是在[0,1]区间上的均匀分布的连续随机变量,故P(R-1(r)具有分布函数F。
(4)式表明,要产生一个服从某种分布的随机数,可以先求出其分布函数的反函数的解析式,再将一个在[0,1]区间内的均匀随机数的值代入其中计算就可以了。
, 百拇医药
3 应用实例
例1 产生密度函数满足指数分布
的随机数,其中α>0。
因为
,故分布函数为:
由(4)式可得
(5)
当r为[0,1]区间内的均匀随机数时,1-r也是[0,1]区间内的均匀随机数,故(5)式还可以简化为:
(6)
, 百拇医药
假定计算机高级语言已提供了产生在[0,1]区间内均匀分布的随机数的函数RND(0),则根据(6)式可以写出产生服从指数分布的随机数的类PASCAL语言的函数如下:
FUNC get_exp_random(alpha:real):real;
{产生服从指数分布的随机数,值参alpha为比例参数}
get_exp_random=-ln(RND(0))/alpha;
ENDF; {get_exp_random}
例2 产生服从正态分布的随机数
正态分布X~N(a,σ)都可以由标准的正态分布X′~N(0,1)经过变换X=a+σX′得到,在此只讨论服从标准正态分布的随机数的产生方法。标准正态分布的密度函数为:
(7)
, 百拇医药
但其分布函数不能用有限的解析形式来表示,给转换带来困难,但可以用以下的变换来产生随机数。
假定r1与r2是[0,1]区间的两个独立的均匀分布随机数,现将其作如下的变换,令
(8)
再将其反变换为:
(9)
(9)式中的C为常数。由此可导出其密度函数为:
(10)
比较(10)式与(7)式,可知X1与X2是两个相互独立的服从正态分布的随机变量,因而(8)式是与(4)相当的据以产生随机数的表达式。由此可以写出产生服从标准正态分布随机数的类PASCAL语言的过程如下:
, 百拇医药
PROC gauss(VAR x1,x2:real);
{产生服从正态分布的随机数对,用变量参数x1与x2传递随机数}
pi:=3.14159265; {赋π值}
r1:=RND(0); r2:=RND(0);
s:=SQRT(-2*ln(r1)); {中间变量赋值}
x1:=s*cos(2*pi*r2);
x2:=s*sin(2*pi*r2);
{正态分布随机数赋给变量参数}
ENDP; {gauss}
, 百拇医药
此过程每调用一次能产生两个相互正交的标准正态分布随机数。■
△本文得到国家自然科学基金和广东省自然科学基金资助
参考文献:
[1] 刘向明等.离子通道开放状态检测法的计算机模拟研究(Ⅰ).生物数学学报,1996,11(2):60~64.
[2] 胡性本等.离子通道开放状态检测法的计算机模拟研究(Ⅱ).生物数学学报,1997,11(5):450~454.
[3] 严蔚敏等.数据结构.第二版.北京:清华大学出版社,1995,13~15.
收稿日期:1999-03-10, http://www.100md.com
单位:胡性本(湖北职工医学院 荆州434000); 刘向明(湖北职工医学院 荆州434000 现为华中理工大学生物工程系博士研究生); 方积乾(湖北职工医学院 荆州434000 中山医科大学)
关键词:非均匀分布随机数;计算机模拟;程序设计
数理医药学杂志000134
摘 要:非均匀分布随机数在进行计算机模拟研究中有重要作用,但计算机高级语言通常都只提供产生均匀分布随机数的函数,给研究工作带来困难。该文提出的方法,较好地解决了这一问题,有很强的适用性。
中图分类号:O 242.1
文章编号:1004-4337(2000)01-0059-02▲
, http://www.100md.com
1 问题的提出
常用的计算机高级程序设计语言,大多提供了产生在[0,1]区间内连续均匀分布的独立随机数r的函数。若将产生的随机数作简单的变换X=a+(b-a)r,就能得到在区间[a,b]上均匀分布的随机数X。如果与取整或舍入函数结合运用,还可得到离散均匀分布的随机数,给计算机模拟提供了方便。但在很多情况下进行计算机模拟需要用到按某些特定规律分布的非均匀随机数。例如,在离子通道门控模型的模拟研究中,就经常要用到服从指数分布、对数分布、正态分布、普畦松分布等非均匀分布的随机数。这时可以在源程序中编写一个函数或过程来产生。我们在近年来所进行的计算机模拟研究工作[1,2]中,大量使用了非均们分布的随机数,获得成功。由于离散随机数可以由连续随机数通过取整或舍入等途径转换而得,本文只侧重介绍非均匀分布连续随机数的产生原理和应用实例,并给出了用类PASCAL语言[3]编写的相应的函数和过程。掌握了任何一种计算机高级语言编程技术和数据结构知识的人,都能很方便地转换成能上机运行的程序,有很大的灵活性与很强的实用性。
, 百拇医药
2 产生原理
假定连续随机变量X是连续随机变量R的函数
x=
由概率统计知识可知,X与R在对应点的分布函数的数值应当相等,即产生R的反变换
F(x)=F(r) (2)
其中,r为(1)式的解,即r=
在特殊情况下,若R是在[0,1]区间内的均匀分布的连续随机变量,那么R
F(x)=F(r)=r (3)
其反函数
x=F-1(r) (4)
具有分布函数F,现予以证明:因为分布函数是单调递增函数,其反函数存在。由概率知识可知,对任意实数X,有
P(X
因为R是在[0,1]区间上的均匀分布的连续随机变量,故P(R
(4)式表明,要产生一个服从某种分布的随机数,可以先求出其分布函数的反函数的解析式,再将一个在[0,1]区间内的均匀随机数的值代入其中计算就可以了。
, 百拇医药
3 应用实例
例1 产生密度函数满足指数分布
的随机数,其中α>0。
因为
由(4)式可得
当r为[0,1]区间内的均匀随机数时,1-r也是[0,1]区间内的均匀随机数,故(5)式还可以简化为:
, 百拇医药
假定计算机高级语言已提供了产生在[0,1]区间内均匀分布的随机数的函数RND(0),则根据(6)式可以写出产生服从指数分布的随机数的类PASCAL语言的函数如下:
FUNC get_exp_random(alpha:real):real;
{产生服从指数分布的随机数,值参alpha为比例参数}
get_exp_random=-ln(RND(0))/alpha;
ENDF; {get_exp_random}
例2 产生服从正态分布的随机数
正态分布X~N(a,σ)都可以由标准的正态分布X′~N(0,1)经过变换X=a+σX′得到,在此只讨论服从标准正态分布的随机数的产生方法。标准正态分布的密度函数为:
, 百拇医药
但其分布函数不能用有限的解析形式来表示,给转换带来困难,但可以用以下的变换来产生随机数。
假定r1与r2是[0,1]区间的两个独立的均匀分布随机数,现将其作如下的变换,令
再将其反变换为:
(9)式中的C为常数。由此可导出其密度函数为:
比较(10)式与(7)式,可知X1与X2是两个相互独立的服从正态分布的随机变量,因而(8)式是与(4)相当的据以产生随机数的表达式。由此可以写出产生服从标准正态分布随机数的类PASCAL语言的过程如下:
, 百拇医药
PROC gauss(VAR x1,x2:real);
{产生服从正态分布的随机数对,用变量参数x1与x2传递随机数}
pi:=3.14159265; {赋π值}
r1:=RND(0); r2:=RND(0);
s:=SQRT(-2*ln(r1)); {中间变量赋值}
x1:=s*cos(2*pi*r2);
x2:=s*sin(2*pi*r2);
{正态分布随机数赋给变量参数}
ENDP; {gauss}
, 百拇医药
此过程每调用一次能产生两个相互正交的标准正态分布随机数。■
△本文得到国家自然科学基金和广东省自然科学基金资助
参考文献:
[1] 刘向明等.离子通道开放状态检测法的计算机模拟研究(Ⅰ).生物数学学报,1996,11(2):60~64.
[2] 胡性本等.离子通道开放状态检测法的计算机模拟研究(Ⅱ).生物数学学报,1997,11(5):450~454.
[3] 严蔚敏等.数据结构.第二版.北京:清华大学出版社,1995,13~15.
收稿日期:1999-03-10, http://www.100md.com