本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

rng

控制随机数生成器

说明

示例

rng(seed) 指定 MATLAB® 随机数生成器的种子。例如,rng(1) 使用种子 1 初始化梅森旋转生成器。

rng 函数控制全局流,这决定 randrandirandnrandperm 函数如何产生一系列随机数。要创建一个或多个独立于全局流的流,请参阅 RandStreamRandStream.create

示例

rng(seed,generator) 还指定要使用的随机数生成器的类型。例如,rng(0,'philox') 使用种子 0 初始化 Philox 4×32 随机数生成器。

示例

s = rngs 结构体的形式返回当前随机数生成器的设置。

示例

全部折叠

将随机数生成器设置为默认的种子 (0) 和算法(梅森旋转),然后保存生成器设置。

rng('default')
s = rng
s = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

创建一个由 0 和 1 之间的随机值组成的 1×5 行向量。

x = rand(1,5)
x = 1×5

    0.8147    0.9058    0.1270    0.9134    0.6324

更改生成器种子和算法,并创建一个新的随机行向量。

rng(1,'philox')
xnew = rand(1,5)
xnew = 1×5

    0.5361    0.2319    0.7753    0.2390    0.0036

现在还原原始生成器设置并创建一个随机向量。结果与用默认生成器创建的原始行向量 x 相匹配。

rng(s)
xold = rand(1,5)
xold = 1×5

    0.8147    0.9058    0.1270    0.9134    0.6324

输入参数

全部折叠

生成器初始化,指定为以下选项之一。

说明
0用种子 0 初始化生成器。
正整数用指定的正整数种子(如 1)初始化生成器。
'default'用种子 0 初始化梅森旋转生成器。这是每个 MATLAB 会话开始时的默认设置。
'shuffle'根据当前时间初始化生成器,在每次调用 rng 后会产生一个不同的随机数序列。
结构体基于结构体中包含的设置初始化生成器,结构体包含字段 TypeSeedState

随机数算法,指定为下表中的选项之一。有关生成器算法的详细信息,请参阅创建和控制随机数流

生成器名称生成器关键字
'twister'梅森旋转mt19937ar
'simdTwister'面向 SIMD 的快速梅森旋转算法dsfmt19937
'combRecursive'组合多递归mrg32k3a
'multFibonacci'乘法滞后 Fibonaccimlfg6331_64
'philox'执行 10 轮的 Philox 4×32 生成器philox4x32_10
'threefry'执行 20 轮的 Threefry 4×64 生成器threefry4x64_20

对于 MATLAB 版本 4.0 和 5.0 中使用的旧生成器,请使用以下选项之一。

生成器名称生成器关键字
'v4'MATLAB 4.0 版旧生成器mcg16807
'v5uniform'MATLAB 5.0 版旧式均匀随机数生成器shr3cong
'v5normal'MATLAB 5.0 版旧式正态分布随机数生成器swb2712

提示

  • 进行并行处理时,为了确保独立流,不应使用 rng('shuffle') 在不同工作进程上设置随机数流,因为它会根据当前时间设置随机数生成器的种子。尤其是在命令被同时发送给多个工作进程时(例如在 parfor 作业中),更是如此。要实现工作进程上的独立流,请使用默认行为或考虑使用 RandStream 在每个工作进程上使用唯一子流。

  • 要将 rng(代替 randrandn 函数)与 'seed''state''twister' 输入结合使用,请参阅更换不推荐的 rand 和 randn 语法

扩展功能

在 R2011a 中推出