主要内容

管理全局流的使用RandStream

兰德randn兰迪,randperm函数从底层随机数流中绘制随机数,称为全球流.全球流是一个RandStream对象。控件控制全局流的一个简单方法是使用rng函数。要进行更全面的控制,请使用RandStream类使您能够从全局流创建一个单独的流,获得全局流的句柄,并控制随机数生成。

使用rng若要将随机数生成器设置为默认种子(0)和算法(Mersenne Twister)。保存发电机设置。

rng (“默认”) s = RNG
s =带字段的结构:类型:'twister'种子:0状态:[625x1 uint32]

创建一个均匀分布的0到1之间的随机值的1 × 6行向量。

X = rand(1,6)
x =1×60.8147 0.9058 0.1270 0.9134 0.6324 0.0975

使用RandStream.getGlobalStream返回全局流的句柄,即当前全局流的句柄兰德生成随机数。如果你使用RandStream.getGlobalStream要获得全局流的句柄,您可以查看使用对全局流所做的更改rng

globalStream = RandStream.getGlobalStream
globalStream = mt19937ar随机流(当前全局流)种子:0 NormalTransform: Ziggurat

更改生成器种子和算法,并创建一个新的随机行向量。显示当前的全球潮流兰德生成随机数。

rng (1,“philox”) xnew = rand(1,6)
xnew =1×60.5361 0.2319 0.7753 0.2390 0.0036 0.5262
globalStream = RandStream.getGlobalStream
globalStream = philox4x32_10随机流(当前全局流)种子:1 NormalTransform:反转

接下来,恢复原始生成器设置并创建一个随机向量。结果与原来的行向量匹配x使用默认生成器创建。

Rng (s) xold = rand(1,6)
xold =1×60.8147 0.9058 0.1270 0.9134 0.6324 0.0975

缺省情况下,有随机数生成函数,如兰德,使用全局随机数流。要指定不同的流,请创建另一个流RandStream对象。将其作为第一个输入参数传递给兰德.例如,使用面向simd的快速梅森扭扭器创建一个1乘6的随机数向量。

myStream = RandStream(“dsfmt19937”
myStream = dsfmt19937随机流种子:0 NormalTransform: Ziggurat
r = rand(myStream,1,6)
r =1×60.0306 0.2131 0.2990 0.3811 0.8635 0.1334

当你打电话给兰德函数与myStream作为第一个输入参数,它从myStream并且不影响全局流的结果。

如果你想设置myStream作为全局流,您可以使用RandStream.setGlobalStream对象的功能。

RandStream.setGlobalStream(myStream) globalStream = RandStream.getGlobalStream
globalStream = dsfmt19937随机流(当前全局流)种子:0 NormalTransform: Ziggurat

在许多情况下,rng函数是控制全局流所需的全部内容,但是RandStream类允许控制一些高级特性,例如选择用于正常随机值的算法。

例如,创建一个RandStream对象,并指定生成正态分布伪随机值的转换算法randn.方法生成正态分布伪随机值极地转换算法,而不是默认值金字形神塔转换算法。

myStream = RandStream(“mt19937ar”“NormalTransform”“极地”
myStream = mt19937ar随机流种子:0 NormalTransform: Polar

myStream作为全球流。从全局流中创建6个正态分布的随机数。

RandStream.setGlobalStream (myStream) randn (1,6)
ans =1×60.2543 -0.7733 -1.7416 0.3686 0.5965 -0.0191

另请参阅

|

相关的话题