主要内容

使用RandStream

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

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

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

创建一个1乘6的行向量,其值在0到1之间。

x =兰德(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随机流(当前全局流)Seed: 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的Fast Mersenne Twister创建一个1乘6的随机数向量。

myStream = RandStream (“dsfmt19937”
myStream=dsfmt19937随机流种子:0 NormalTransform:Ziggurat
r=兰德(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随机流(当前全局流)Seed: 0 NormalTransform: Ziggurat

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

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

myStream = RandStream (“mt19937ar”“法线变换”“极地”
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

另请参阅

|

相关话题