主要内容

RandStream

描述

RandStream创造一个随机数流使用指定伪随机数生成器的算法。

你可以在MATLAB中生成伪随机数®来自一个或多个随机数流。生成随机数阵列的最简单方法是使用兰德兰迪兰德,randperm功能。这些函数都依赖于相同的均匀分布随机数流,称为全球流.改变全球流可以涉及RandStream,但它没有必要这样做。如果您使用RandStream,你可以使用RandStream.setGlobalStream让它成为全球流。然而,rng函数提供了一个更简单的接口来创建一个对大多数用例都足够的全局流。

你也可以使用RandStream创建流和兰德兰迪兰德,或randperm要与从来自其他流的全局流绘制的那些分开生成随机数。有关详细信息,请参阅对象的功能

创建

使用以下语法创建单个随机数流。如果要同时创建多个独立流,请使用RandStream.create函数。

描述

例子

年代= RandStream (gentype使用指定的统一伪随机数生成器算法创建随机数流gentype

例子

年代= RandStream (gentype名称,值还使用一个或多个可选控制流的属性名称,值对论点。

输入参数

展开全部

随机数生成器算法,指定为命名随机数生成器的字符向量或字符串标量。MATLAB提供了几种生成器算法。下表总结了可用生成器算法的名称和关键属性。一些生成器算法支持多流和子流来创建相互独立的随机数集金宝app。有关更多信息,请参见选择随机数发生器

名称 发电机 多流和子流支持金宝app 完全精确的近似周期
“mt19937ar” Mersenne Twister(在MATLAB启动时默认使用) 没有 219937年-1
“dsfmt19937” SIMD型快速Mersenne Twister 没有 219937年-1
“mlfg6331_64” 乘法滞后斐波那契生成器 是的 2124(251.长度溪流272.
'MRG32K3A' 组合多重递归发生器 是的 2191.(263.长度溪流2127
“philox4x32_10” Philox 4x32发电机,10发子弹 是的 2193.(264.长度溪流2129
'threefry4x64_20' 三级4x64发电机20轮 是的 2514(2256长度溪流2258
“shr3cong” 换档寄存器发生器与线性总体生成器一起求和 没有 264.
“swb2712” 修改减法与借发电机 没有 21492
“mcg16807” 乘法总体发电机 没有 231-2
名称-值对的观点

指定可选的逗号分隔对名称,值论点。名称参数名和价值是对应的值。名称必须出现在引号内。您可以按如下顺序指定几个名称和值对参数name1,value1,...,namen,valuen

例子:s = RandStream(“mt19937ar”、“种子”,15日“NormalTransform”,“极”)

随机数种子,指定为逗号分隔的对,由“种子”一个非负整数'洗牌'.种子指定算法生成随机数的起点。'洗牌'基于当前时间创建种子。如果指定整数,则必须在0到2之间32−1。

在MATLAB启动时或运行仿真之前创建流时,指定生成器种子作为初始化步骤。要复制一条溪流,每次都要使用相同的种子。虽然使用多个种子将创建多个随机数序列,但不能保证不同的序列在统计上是独立的。在这很重要的情况下,指定底层财产或使用RandStream.create创建统计上独立的流。

转换算法从随机数流生成正常分布的随机数兰德,指定为逗号分隔的对,由'nuarmtransform'其中一个算法名'Ziggurat'“极地”,或'反转'.有关更多信息,请参见创建和控制随机数流

特性

展开全部

随机数流年代具有控制其行为的属性。访问属性p = s.property.然后用以下方法修改s.Property = p.保存和恢复流的所有属性年代,你可以使用=得到(s)集(,), 分别。以下列表提供了属性RandStream

此属性是只读的。

随机数生成器所使用的算法流。参见表格发生器算法有关发电机及其属性的摘要。

并非所有生成器算法都支持多流。金宝app对于某些生成器,您可以创建统计上独立的多个流和子流。

数据类型:char

此属性是只读的。

用于创建流的随机数种子,作为非负整数返回。

数据类型:UINT32

此属性是只读的。

创建当前流所在的组中的流数,以正整数返回。

数据类型:uint64

此属性是只读的。

从创建它的流组中的流中的当前流索引返回为正整数。

数据类型:uint64

生成器的当前内部状态,指定为整数的向量。状态矢量的大小取决于发电机算法。设置此属性时,您分配的值s.State必须是读取的值s.State之前。使用重启将流返回到其初始状态,而之前没有从状态财产。使用中保存和恢复发电机的内部状态状态属性允许您重现一个随机数序列。

内部状态确定随机数流产生的随机数序列年代.每次从单个流生成随机数时,流中的生成器状态将被转换为创建统计独立且相同分布的连续值。

请注意

仅恢复随机数流的状态,或重置流,以从流中重新产生结果。

数据类型:UINT32

流当前被设置到的子流的索引。

对于某些生成器类型,可以从随机流创建不同的子流。从不同的子流生成的值是相互独立的。参见表格发生器算法用于支持子流的生成器。金宝app

数据类型:双倍的

利用变换算法生成正态分布的伪随机值兰德

数据类型:char

无论年代生成指定为逻辑的对立伪随机值真正的1)或0)。邻近值是默认产生的伪随机值,其均匀分布从1中减去。

数据类型:逻辑

无论年代使用其完整精度生成值,指定为逻辑真正的1)或0)。一些生成器可以更快地创建伪随机值,但随机位数较少,如果FullPrecision

数据类型:逻辑

对象的功能

缺省情况下,随机数生成功能兰德,使用全局随机数流。若要指定不同的流,请创建RandStream对象,并将其作为第一个输入参数传递。例如,使用面向simd的快速Mersenne twister创建一个4 × 1的随机数向量。

s = randstream('dsfmt19937');r = rand(s,4,1);

这些函数接受RandStream对象:

兰德 均匀分布随机数

金宝app支持语法,年代是A.RandStream对象:

X = rand(s,sz,…,szN) X = rand(s,sz) X = rand(s,sz)
有关其他输入参数的详细信息,请参见兰德兰迪,兰德

兰迪 均匀分布伪随机整数
兰德 正态分布随机数
randperm 整数的随机排列

金宝app支持语法,年代是A.RandStream对象:

P = randperm(s,n,k)
有关其他输入参数的详细信息,请参见randperm

的其他对象函数RandStream是:

RandStream.create 创建统计上独立的随机数流
RandStream.list 列出随机数生成器算法
randstream.getglobalstream. 获取当前全局随机数流
RandStream.setGlobalStream 设置全局随机数流
重启 重置随机数流

例子

全部折叠

使用面向simd的Fast Mersenne Twister创建一个随机数流。

s = RandStream (“dsfmt19937”
s = dsfmt19937 random stream Seed: 0 NormalTransform: Ziggurat

使用流生成五个随机数。

兰特(s, 1、5)
ans =1×50.0306 0.2911 0.2990 0.3811 0.8635

使用基于当前时间的生成器种子创建随机数流。通常不希望在每个MATLAB®会话中不止一次这样做,因为它可能会影响MATLAB产生的随机数的统计特性。

s = RandStream (“mt19937ar”“种子”'洗牌');

使用流以0到1之间的均匀分布创建3×3矩阵。

X1 =兰德(年代,3)
X1 =3×30.6651 0.5692 0.1492 0.2079 0.7308 0.0513 0.6820 0.0271 0.8912

从流中创建另外五个随机数。

兰德(X2 = 1, 5)
X2 =1×50.1897 0.2317 0.0257 0.0888 0.4755

创建一个种子为零的随机数流。

s = RandStream (“mcg16807”“种子”, 0);

从流生成五个随机数。每次从流生成一个数字时,生成器算法都会转换内部状态,使得下一个生成的数字是独立的,并且与前一个数字相同分布。

u1 =兰德(年代,1、5)
U1 =1×50.2190 0.0470 0.6789 0.6793 0.9347

保存发电机的当前状态。生成另外五个随机数。

savedState = s.State;u2 =兰德(年代,1、5)
U2 =1×50.3835 0.5194 0.8310 0.0346 0.0535

若要再现5个随机数的最后结果,请将生成器状态恢复为已保存状态。

s.State = savedState;u3 =兰德(年代,1、5)
U3 =1×50.3835 0.5194 0.8310 0.0346 0.0535

只读取和写入生成器状态,以从流中重现特定的结果。

创建一个随机数流,其种子为三个。使用流生成八个随机数。

Stream = RANDSTREAM(“dsfmt19937”“种子”3);z =兰德(流1 8)
z =1×80.2550 0.8753 0.0908 0.1143 0.3617 0.8210 0.8444 0.6189

将随机数流重置为初始状态,种子为3。重现产生的8个随机数字。

重置(流,3);z =兰德(流1 8)
z =1×80.2550 0.8753 0.0908 0.1143 0.3617 0.8210 0.8444 0.6189

重置流的种子会使其与其他流的独立性失效。仅重置流以从流中重新生成结果。

创建两个随机数流。通过使用将第一个流设置为全局流RandStream.setGlobalStream

globalStream = RandStream (“mlfg6331_64”'nuarmtransform'“极地”
随机流种子:0 NormalTransform: Polar
RandStream.setGlobalStream (globalStream);

要显示当前全局流,请使用randstream.getglobalstream.

randstream.getglobalstream.
ANS = MLFG6331_64随机流(当前全局流)种子:0 QualalTransform:极

创建第二条流我的直播它的操作与您创建的新全局流是分开的。

myStream = RandStream (“dsfmt19937”'nuarmtransform''反转'
myStream = dsfmt19937随机流种子:0 NormalTransform:反演

从全局流生成三个随机数。从本地流生成另外三个随机数我的直播你创造的。

Randn(1,3)
ans =1×30.8715 1.0588 -0.6956
randn (myStream 1 3)
ans =1×3-1.8723 -0.7956 -0.5273

当你调用函数时兰德兰德,兰迪没有我的直播,他们从全球流中绘制,并不会影响调用它们的结果我的直播

对于某些生成器类型,可以从随机流创建不同的子流。从不同的子流生成的值是相互独立的。

例如,使用组合的多个递归生成器创建随机数流。

s = RandStream ('MRG32K3A');

若要将流重新定位到特定的子流,请设置其底层财产。例如,在循环中生成随机数。在每次循环迭代之前,将随机数流定位到不同子流的开始。生成3个相互独立的5个随机数集。

I = 1:3 s。底层= i; z = rand(s,1,5)结束
z =1×50.7270 0.4522 0.9387 0.2360 0.0277
z =1×50.5582 0.8527 0.7733 0.0633 0.2788
z =1×50.1666 0.2924 0.7728 0.8391 0.5107

要再现第二组5个随机数,请将流重新定位到相应的子流。

s.Substream = 2;兰德(z = 1, 5)
z =1×50.5582 0.8527 0.7733 0.0633 0.2788

更多关于

展开全部

介绍了R2008b