随机数流
MATLAB中的伪随机数®来自一个或多个随机数字流。生成随机数数组最简单的方法是使用兰德
,randn
,或兰迪
.这些函数都依赖于相同的均匀随机数流,称为全球流.您可以创建与全局流分开操作的其他流,并且可以使用它们的兰德
,兰迪
,或randn
生成随机数阵列的方法。您还可以创建一个随机数流并使其成为全局流。
要创建单个随机数流,请使用RandStream
构造函数。要创建多个独立随机数流,请使用RandStream.create
.这RNG.
函数提供了一个简单的界面来创建新的全局流。
流= RandStream.getGlobalStream
返回全局随机数流,即当前由兰德
,兰迪
, 和randn
职能。
prevstream = RandStream.setGlobalStream(流)
指定随机数流溪流
类使用的新全局流兰德
,兰迪
, 和randn
函数,并返回前一个全局流。
随机数流年代
具有控制其行为的属性。使用访问或分配属性p = s.property.
或者s.Property = p
.下表列出了定义的属性:
财产 | 描述 |
---|---|
类型 |
(只读)流使用的生成器算法。可能的发电机列表是给出的RandStream.list . |
种子 |
(只读)用于创建流的种子值。 |
NumStreams |
(只读)当前流所在组的流数。 |
StreamIndex |
(只读)当前流在与其一起创建的流组中的索引。 |
状态 |
发电机的内部状态。您不应该依赖于此属性的格式。你赋值的值 随机数流产生的随机数序列 |
Substream |
流当前设置的子流的索引。默认值是1。不是所有生成器类型都支持多个子流;万博1manbetx乘法滞后的斐波那契生成函数(mlfg6331_64 )和组合多个递归发生器(MRG32K3A su万博1manbetxbstreams)支持。 |
NormalTransform |
使用转换算法Randn(s,...) 生成正常的伪随机数值。可能的值是“神” ,“极地” ,或“反转” . |
对立的 |
逻辑值指示是否年代 生成对置伪随机值,即通常值减去1。默认为false。 |
FullPrecision |
逻辑值指示是否年代 使用它的全精度生成值。有些生成器可以更快地创建伪随机值,但使用更少的随机位FullPrecision 是假的。默认为true。 |
方法 | 描述 |
---|---|
RandStream |
创建随机数流。 |
RandStream.create |
创建多个独立的随机数流。 |
得到 |
获取随机流对象的属性。 |
列表 |
列出可用的随机数生成器算法。 |
集 |
设置随机流属性。 |
randstream.getglobalstream. |
获取全局随机数流。 |
RandStream.setGlobalStream |
设置全局随机数流。 |
重置 |
将流重置为其初始内部状态 |
兰德 |
来自均匀分布的伪随机数 |
randn |
标准正态分布的伪随机数 |
兰迪 |
均匀离散分布的伪随机整数 |
randperm |
一组值的随机排列 |
创建单个流并将其指定为当前的全局流:
s = randstream('mt19937ar','种子',1);RandStream.setGlobalStream(年代);
创建三个独立流:
(s1, s2、s3) = RandStream.create(‘mrg32k3a’,‘NumStreams’,3);r1 =兰德(s1, 100000, 1);r2 =兰德(s2, 100000, 1);r3 =兰德(s3, 100000, 1);corrcoef ((r1, r2, r3))
仅从一组三个独立流创建一个流,并将其指定为当前的全局流:
s2 = RandStream.create(‘mrg32k3a’,‘NumStreams’,3,…2)“StreamIndices”;RandStream.setGlobalStream (s2);
重置全局随机数流兰德
,兰迪
, 和randn
回到它的开始,重现以前的结果:
流= RandStream.getGlobalStream;重置(流);
保存并恢复当前全局流的状态,以重新生成的输出兰德
:
流= RandStream.getGlobalStream;savedState = stream.State;U1 = rand(1,5)状态= savedState;U2 = rand(1,5) U2 = 0.8147 0.9058 0.1270 0.9134 0.6324
u2
包含完全相同的值u1
.
将全局随机数流重置为其初始设置。这将导致兰德
,兰迪
, 和randn
重新开始,就像在新的MATLAB会话中一样:
s = RandStream(“mt19937ar”、“种子”,0);RandStream.setGlobalStream(年代);
使用基于当前时间的种子重新初始化全局随机数流。这将导致兰德
,兰迪
, 和randn
返回不同的值在不同的MATLAB会话。通常不希望在每个MATLAB会话中这样做超过一次,因为它可能会影响MATLAB产生的随机数的统计属性:
s = RandStream(“mt19937ar”、“种子”,“洗牌”);RandStream.setGlobalStream(年代);
更改转换算法randn
用于从统一值创建正常的伪随机值。这不会替换或重置全局流。
流= RandStream.getGlobalStream;流。不rmalTransform = 'inversion'