MATLAB伪随机数发生器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MATLAB伪随机数发生器.txt生活是过出来的,不是想出来的。放得下的是曾经,放不下的是记忆。无论我在哪里,我离你都只有一转身的距离。

均匀性较好的随机数生成

zz from /lanmuyd.asp?id=3379

随机数生成算法[1]是一类重要的算法,广泛应用于仿真技术等场合。然而,目前的伪随机数生成器(Pseudo-random number generator, PRNG)[2]存在一个重要缺陷,即样本分布与真实分布不一致,这主要发生在以下两种情况:①抽样代价过高,样本数目较少;②空间维数较高[3]。

因此,有必要寻找一类新的随机数发生器。准随机数发生器(Quasi-random number generator,QRNG)[4]能够生成稳定、低差异性的(low-discrepancy)样本,而与样本数目或空间维数无关[5]。故针对蒙特卡罗积分结果不稳定的情况,提出一种基于QRNG的蒙特卡罗积分,发现比传统方法性能有所提升。

伪随机数介绍

伪随机数是由确定的算法生成的,其分布函数与相关性均能通过统计测试。与真实随机数的差别在于,它们是由算法产生的,而不是一个真实的随机过程。一般地,伪随机数的生成方法主要有以下3种[6]:

(1)直接法(Direct Method),根据分布函数的物理意义生成。缺点是仅适用于某些具有特殊分布的随机数,如二项式分布、泊松分布。

(2)逆转法(Inversion Method),假设U服从[0,1]区间上的均匀分布,令X=F-1(U),则X的累计分布函数(CDF)为F。该方法原理简单、编程方便、适用性广。

(3)接受拒绝法(Acceptance-Rejection Method):假设希望生成的随机数的概率密度函数(PDF)为f,则首先找到一个PDF为g的随机数发生器与常数c,使得f(x)≤cg(x),然后根据接收拒绝算法求解。由于算法平均运算c次才能得到一个希望生成的随机数,因此c的取值必须尽可能小。显然,该算法的缺点是较难确定g与c。

因此,伪随机数生成器(PRNG)一般采用逆转法,其基础是均匀分布,均匀分布PRNG 的优劣决定了整个随机数体系的优劣[7]。下文研究均匀分布的PRNG。

伪随机数生成器的缺点

重复做N=10000次试验,每次产生S=20与S=100个随机分布的样本,同时采用Kolmogorov- Smirnov假设检验(hypothesis test)来确定样本是否满足均匀分布。规定:

① 0假设(null hypothesis)为样本服从均匀分布;② 1假设(alternative hypothesis)为样本不服从均匀分布。

采用P值(∈[0, 1])衡量,P值越趋近于0,表示越有理由拒绝0假设,即样本不服从均匀分布;P值越趋近于1,表示越有理由接受0假设,即样本服从均匀分布。

如图1与图2所示:随着P值下降,样本也越来越不服从均匀分布。实践中希望P值越大越好。然而统计学的结论显示,P值一定服从均匀分布,与N、S大小无关,这表明由于随机性,总会出现某次抽样得到的样本不服从、甚至远离均匀分布。另外,样本大小的不同,造成检验标准的不同,直观上看S=100对应的均匀分布普遍比S=20对应的更均匀。因此,小样本情况下均匀分布PRNG的差异性尤为严重。

准随机数发生器

上节讨论了造成差异性的两个情况:小样本与高维空间。本节讨论如何构建一类新的随机数发生器,使其具有较低的差异性。

PRNG缺陷的根源在于“随机性”与“均匀性”的矛盾。因此,不要求新的发生器模拟真实的均匀分布,而力求任意大小的样本(尤其是小样本)都能满足低差异性。换言之,以牺牲随机性为代价,换来均匀性的提高,称其为准随机数发生器(QRNG)。均匀分布QRNG的优势在于,其生成的样本更趋于均匀分布。在其基础上构建的各类分布(包括高斯分布)的QRNG,其生成的样本也更趋于服从对应的分布。

目前有3种准随机序列(Quasi-random sequency)可用来辅助生成均匀分布随机数,分别是Halton序列、Sobol序列、Latin超立方体序列。

/access/helpdesk/help/toolbox/stats/qrandstream.html matlab的方法:

qrandstream - Class: qrandstream

Construct quasi-random number stream

Syntax

q = qrandstream(type,d)

q = qrandstream(type,d,prop1,val1,prop2,val2,...)

q = qrandstream(p)

Description

q = qrandstream(type,d) constructs a d-dimensional quasi-random number stream q of the qrandstream class, of type specified by the string type. type is either 'halton' or 'sobol', and q is based on a point set from either the haltonset class or sobolset class, respectively, with default property settings.

q = qrandstream(type,d,prop1,val1,prop2,val2,...) specifies property name/value pairs for the point set on which the stream is based. Applicable properties depend on type.

q = qrandstream(p) constructs a stream based on the specified point set p. p must be a point set from either the haltonset class or sobolset class.

Examples

Construct a 3-D Halton stream, based on a point set that skips the first 1000 values and then retains every 101st point:

q = qrandstream('halton',3,'Skip',1e3,'Leap',1e2)

相关文档
最新文档