主要内容

RandStream

随机数流

描述

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

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

您还可以使用RandStream创建流,然后使用兰德,兰迪,randn,或randperm从这些流生成随机数。生成的随机数是分开这些来自全球流或从其他来源。有关详细信息,请参见对象的功能

创建

使用下面的语法来创建一个随机数流。如果你想同时创建多个独立的流,使用RandStream.create函数。

描述

例子

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

例子

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

输入参数

全部展开

随机数发生器算法,指定为一个特征向量或字符串标量命名一个随机数生成器。MATLAB提供了几种发生器算法。下表总结了名称和关键属性可用的发生器算法。一些发生器算法支持多个流和substreams创建组万博1manbetx随机数,是相互独立的。有关更多信息,请参见创建和控制一个随机数流

的名字 发电机 多个流和Substream支持万博1manbetx 近似的时期完全精确
“mt19937ar” 梅森素数捻线机(使用默认流在MATLAB启动时) 没有 219937年1
“dsfmt19937” SIMD-Oriented快速梅森素数捻线机 没有 219937年1
“mlfg6331_64” 乘法滞后斐波那契发电机 是的 2124年(251流长度为2的72年)
“mrg32k3a” 结合多个递归发电机 是的 2191年(263年流长度为2的127年)
“philox4x32_10” Philox 4×10轮发电机 是的 2193年(264年流长度为2的129年)
“threefry4x64_20” Threefry 4 x64和20轮发电机 是的 2514年(2256年流长度为2的258年)
“shr3cong” 移位寄存器发电机总结与线性同余发生器 没有 264年
“swb2712” 修改减去借发电机 没有 21492年
“mcg16807” 可乘同余发电机 没有 231日2
名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

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

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

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

转换算法来生成正态分布随机数流使用的随机数randn,指定为逗号分隔两人组成的“NormalTransform”和一个算法的名字“神”,“极地”,或“反转”。有关更多信息,请参见创建和控制一个随机数流

属性

全部展开

一个随机数流年代属性,控制其行为。访问一个属性使用p = s.Property和修改一个使用年代。属性= p。保存和恢复所有流的属性年代,你可以使用=得到(s)集(,),分别。这个清单描述的属性RandStream

这个属性是只读的。

随机数发生器算法使用的流。的表发生器算法发电机及其属性的摘要。

并不是所有的发电机算法支持多个流。万博1manbetx对于一些发电机,可以创建多个流和substreams统计独立。

数据类型:字符

这个属性是只读的。

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

数据类型:uint32

这个属性是只读的。

当前的组的流流了,作为一个正整数返回。

数据类型:uint64

这个属性是只读的。

指数当前流中创建的群流,作为一个正整数返回。

数据类型:uint64

当前的内部状态生成器,指定为一个整数向量。状态向量的大小取决于发生器算法。当你设定这个属性,您指定的值s.State必须是一个值读取s.State之前。使用重置返回一个流初始状态没有以前读的状态财产。保存和恢复的发电机的内部状态状态属性允许你复制一个随机数序列。

内部状态决定了产生的随机数序列的随机数流年代。每次从一个单独的数据流,生成随机数发生器的状态的转换创建连续流值在统计上是独立且同分布。

请注意

只恢复一个随机数流的状态,或重置一个流,复制流的结果。

数据类型:uint32

指数的substream流目前集。

对于某些发电机类型,您可以创建不同substreams随机流。值产生不同substreams是相互独立的。的表发生器算法支持substreams的发电机。万博1manbetx

数据类型:

转换算法来生成正态分布使用伪随机值randn

数据类型:字符

是否年代生成对偶的伪随机值,指定为逻辑真正的(1)或(0)。对偶的值是默认生成的伪随机值与均匀分布减去1。

数据类型:逻辑

是否年代使用其全部生成值精度,指定为逻辑真正的(1)或(0)。一些发电机可以创建伪随机值更快,但随机位较少,如果FullPrecision

数据类型:逻辑

对象的功能

默认情况下,随机数生成函数,如兰德使用全球随机数流。指定一个不同的流,创建一个RandStream对象并将其传递给第一个输入参数。例如,创建一个4-by-1向量的随机数梅森素数捻线机使用SIMD-Oriented快。

s = RandStream (“dsfmt19937”);r =兰德(s 4 1);

这些函数接受一个RandStream对象:

兰德 均匀分布的随机数

万博1manbetx支持语法,年代是一个RandStream对象:

X =兰德(s) X =兰德(s、n) X =兰德(s sz1…, szN) X =兰德(年代,sz) X =兰德(年代,__,typename) X =兰德(年代,__,‘喜欢’,p)
其他输入参数的详细信息,请参见兰德,兰迪,randn

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

万博1manbetx支持语法,年代是一个RandStream对象:

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

其他对象的功能RandStream是:

RandStream.create 创建统计独立的随机数流
RandStream.list 随机数发生器算法列表
RandStream.getGlobalStream 得到当前全球随机数流
RandStream.setGlobalStream 集全球随机数流
重置 重置随机数流

例子

全部折叠

快速创建一个随机数流使用SIMD-Oriented梅森素数的旋风。

s = RandStream (“dsfmt19937”)
s = dsfmt19937随机流种子:0 NormalTransform:金字塔

使用流生成五个随机数。

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

创建一个随机数流使用一台发电机种子根据当前时间。这通常是不可取的不止一次每MATLAB®会话,因为它可能会影响MATLAB产生随机数的统计特性。

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

使用流创建一个3×3矩阵与均匀分布的随机值在0和1之间。

X1 =兰德(年代,3)
X1 =3×30.7292 0.3911 0.1948 0.2464 0.5257 0.1145 0.6898 0.1627 0.2157

创建另一个五随机数流。

兰德(X2 = 1, 5)
X2 =1×50.8624 0.7559 0.1614 0.8363 0.7161

创建一个单精度数2×3矩阵。

单([p = 0.1 - 3 2.5;1.2 - -3.4 6);

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

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

使用流生成一个随机数数组大小和相同的数据类型和p。

z =兰特(年代,大小(p),“喜欢”,p)
z =2×3个矩阵0.2190 0.6789 0.9347 0.0470 0.6793 0.3835
类(z)
ans = '单'

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

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

复制的最后结果五个随机数,恢复发电机状态保存的状态。

s.State= savedState; u3 = rand(s,1,5)
u3 =1×50.3835 0.5194 0.8310 0.0346 0.0535

只有读和写发电机状态复制流的一个特定的结果。

创建一个随机数字流的种子就是三个。使用流生成8个随机数。

流= 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);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”,“NormalTransform”,“极地”)
globalStream = mlfg6331_64随机流种子:0 NormalTransform:极性的
RandStream.setGlobalStream (globalStream);

显示当前全球流,使用RandStream.getGlobalStream

RandStream.getGlobalStream
ans = mlfg6331_64随机流(当前全球流)种子:0 NormalTransform:极性的

创建第二个流myStream分开,可以创建新的全球流。

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

从全球流生成三个随机数。生成三个随机数从本地流myStream你创建的。

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

当你调用函数兰德,randn,兰迪没有myStream,他们从全球流和不会影响调用他们的结果myStream

对于某些发电机类型,您可以创建不同substreams随机流。值产生不同substreams是相互独立的。

例如,创建一个随机数流使用合并多个递归发生器。

s = RandStream (“mrg32k3a”);

重新定位一个特定substream流,设置它Substream财产。例如,在一个循环中生成随机数。位置随机数流的开始不同substream之前每个迭代的循环。随机数生成3个相互独立的5。

i = 1:3。Substream= 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随机数,重新定位相应substream流。

年代。Substream = 2;兰德(z = 1, 5)
z =1×50.5582 0.8527 0.7733 0.0633 0.2788

更多关于

全部展开

扩展功能

版本历史

介绍了R2008b