文档

RandStream

随机数流

构造函数

RandStream

描述

MATLAB中的伪随机数®来自一个或多个随机数字流。生成随机数数组最简单的方法是使用兰德randn,或兰迪.这些函数都依赖于相同的均匀随机数流,称为全球流.您可以创建与全局流分开操作的其他流,并且可以使用它们的兰德兰迪,或randn生成随机数阵列的方法。您还可以创建一个随机数流并使其成为全局流。

要创建单个随机数流,请使用RandStream构造函数。要创建多个独立随机数流,请使用RandStream.create.这RNG.函数提供了一个简单的界面来创建新的全局流。

流= RandStream.getGlobalStream返回全局随机数流,即当前由兰德兰迪, 和randn职能。

prevstream = RandStream.setGlobalStream(流)指定随机数流溪流类使用的新全局流兰德兰迪, 和randn函数,并返回前一个全局流。

随机数流年代具有控制其行为的属性。使用访问或分配属性p = s.property.或者s.Property = p.下表列出了定义的属性:

属性

财产 描述
类型 (只读)流使用的生成器算法。可能的发电机列表是给出的RandStream.list
种子 (只读)用于创建流的种子值。
NumStreams (只读)当前流所在组的流数。
StreamIndex (只读)当前流在与其一起创建的流组中的索引。
状态

发电机的内部状态。您不应该依赖于此属性的格式。你赋值的值S.State必须是一个读取的值S.State之前。用重置将流返回到可预测状态而不先前读取状态财产。

随机数流产生的随机数序列年代由随机数发生器的内部状态决定。使用中保存和恢复发电机的内部状态状态属性允许您重现一系列随机数。

Substream 流当前设置的子流的索引。默认值是1。不是所有生成器类型都支持多个子流;万博1manbetx乘法滞后的斐波那契生成函数(mlfg6331_64)和组合多个递归发生器(MRG32K3Asu万博1manbetxbstreams)支持。
NormalTransform 使用转换算法Randn(s,...)生成正常的伪随机数值。可能的值是“神”“极地”,或“反转”
对立的 逻辑值指示是否年代生成对置伪随机值,即通常值减去1。默认为false。
FullPrecision 逻辑值指示是否年代使用它的全精度生成值。有些生成器可以更快地创建伪随机值,但使用更少的随机位FullPrecision是假的。默认为true。

方法

方法 描述
RandStream 创建随机数流。
RandStream.create 创建多个独立的随机数流。
得到 获取随机流对象的属性。
列表 列出可用的随机数生成器算法。
设置随机流属性。
randstream.getglobalstream. 获取全局随机数流。
RandStream.setGlobalStream 设置全局随机数流。
重置 将流重置为其初始内部状态
兰德 来自均匀分布的伪随机数
randn 标准正态分布的伪随机数
兰迪 均匀离散分布的伪随机整数
randperm 一组值的随机排列

例子

例1

创建单个流并将其指定为当前的全局流:

s = randstream('mt19937ar','种子',1);RandStream.setGlobalStream(年代);

例2.

创建三个独立流:

(s1, s2、s3) = RandStream.create(‘mrg32k3a’,‘NumStreams’,3);r1 =兰德(s1, 100000, 1);r2 =兰德(s2, 100000, 1);r3 =兰德(s3, 100000, 1);corrcoef ((r1, r2, r3))

例3.

仅从一组三个独立流创建一个流,并将其指定为当前的全局流:

s2 = RandStream.create(‘mrg32k3a’,‘NumStreams’,3,…2)“StreamIndices”;RandStream.setGlobalStream (s2);

例4.

重置全局随机数流兰德兰迪, 和randn回到它的开始,重现以前的结果:

流= RandStream.getGlobalStream;重置(流);

例5.

保存并恢复当前全局流的状态,以重新生成的输出兰德

流= 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

例6.

将全局随机数流重置为其初始设置。这将导致兰德兰迪, 和randn重新开始,就像在新的MATLAB会话中一样:

s = RandStream(“mt19937ar”、“种子”,0);RandStream.setGlobalStream(年代);

例7.

使用基于当前时间的种子重新初始化全局随机数流。这将导致兰德兰迪, 和randn返回不同的值在不同的MATLAB会话。通常不希望在每个MATLAB会话中这样做超过一次,因为它可能会影响MATLAB产生的随机数的统计属性:

s = RandStream(“mt19937ar”、“种子”,“洗牌”);RandStream.setGlobalStream(年代);

例8.

更改转换算法randn用于从统一值创建正常的伪随机值。这不会替换或重置全局流。

流= RandStream.getGlobalStream;流。不rmalTransform = 'inversion'

另请参阅

|||

这个主题有用吗?