MATLAB伪随机数发生器


均匀性较好的随机数生成


zz from https://www.360docs.net/doc/9015923503.html,/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超立方体序列。

https://www.360docs.net/doc/9015923503.html,/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)
q =
Halton quasi-random stream in 3 dimensions
Point set properties:
Skip : 1000
Leap : 100
ScrambleMethod : none

nextIdx = q.State
nextIdx =
1
Use qrand to generate two samples of size four:

X1 = qrand(q,4)
X1 =
0.0928 0.3475 0.0051
0.6958 0.2035 0.2371
0.3013 0.8496 0.4307
0.9087 0.5629 0.6166
nextIdx = q.State
nextIdx =
5

X2 = qrand(q,4)
X2 =
0.2446 0.0238 0.8102
0.5298 0.7540 0.0438
0.3843 0.5112 0.2758
0.8335 0.2245 0.4694
nextIdx = q.State
nextIdx =
9
Use reset to reset the stream, and then generate another sample:

reset(q)
nextIdx = q.State
n

extIdx =
1

X = qrand(q,4)
X =
0.0928 0.3475 0.0051
0.6958 0.2035 0.2371
0.3013 0.8496 0.4307
0.9087 0.5629 0.6166
See Also

haltonset | qrand | reset | sobolset


类别:默认分类 | | 添加到搜藏 | 分享到i贴吧 | 浏览(274) | 评论 (0)

上一篇:zz关于交叉验证

最近读者:

网友评论:
发表评论:
姓 名: habby1985
内 容:
插入表情

同时将此文章分享给好友
验证码: 请点击后输入四位验证码,字母不区分大小写




?2011 Baidu

相关文档
最新文档