主要内容

替换rand和randn的不鼓励语法

不鼓励语法的描述

在早期版本的MATLAB中®控件使用的随机数生成器兰德而且randn函数具有“种子”“状态”“旋风”输入。例如:

Rand ('seed',sd) randn('seed',sd) Rand ('state',s) randn('state',s) Rand ('twister',5489)

这些语法引用了不同类型的生成器,由于以下原因不再推荐使用它们:

  • 条款“种子”而且“状态”是生成器的误导性名称。

  • 所有的发电机除了“旋风”是有缺陷的。

  • 他们不必要地使用不同的发电机兰德而且randn

为了评估替换现有代码中不鼓励的语法的影响,在MATLAB会话开始时执行以下命令:

警告(“上”MATLAB: RandStream: ActivatingLegacyGenerators)警告(“上”MATLAB: RandStream: ReadingInactiveLegacyGeneratorState

替换语法描述

使用rng控件使用的共享生成器兰德randn兰迪和所有其他随机数生成函数randpermsprand等等。学习如何使用rng在替换不鼓励的语法时,请花一些时间来理解它们的功能。这将帮助您看到哪个新的rng语法最适合您的需要。

第一个输入兰特(发电机,年代)randn(发电机,s)指定生成器的类型,如此处所述。

Generator = 'seed'参考MATLABv4生成器,而不是种子初始化值。

Generator = 'state'参考MATLABv5发电机,而不是发电机的内部状态。

发电机= 'twister'提到梅森扭扭发生器,现在是MATLAB启动发生器。

v4而且v5生成器不再推荐使用,除非您试图精确地再现在早期版本的MATLAB中生成的随机数。更新代码的最简单方法是使用rng.的rng方法的名称兰德而且randn生成器如下所示。

rand/randn生成器名称 rng生成器名称
“种子” v4的
“状态”

“v5uniform”(兰德

“v5normal”(randn

“旋风” “旋风”(推荐)

用整数种子初始化生成器的替换语法

整数种子最常见的用法sd兰特(发电机,sd)语法为:

  • 每次复制完全相同的随机数(例如,通过使用诸如0、1或3141879这样的种子)

  • 尝试确保MATLAB总是在不同的运行中给出不同的随机数(例如,通过使用种子,例如总和(100 *时钟)

下表显示了用整数种子替换语法的方法sd

  • 第一列显示了不提倡的with语法兰德而且randn

  • 第二列展示了如何用new精确地再现不鼓励的行为rng函数。在大多数情况下,这是通过指定一个遗留的生成器类型来完成的,例如v4或v5生成器,不再推荐这样做。

  • 第三列显示了推荐的替代选项,它没有指定可选的生成器类型rng.因此,如果你总是省略了发电机输入,兰德randn,兰迪只需使用MATLAB启动时使用的默认梅森扭扭生成器。在以后的版本中,当新的生成器取代了Mersenne Twister时,这段代码将使用新的默认值。

不推荐rand/randn语法 不推荐:通过指定生成器类型精确地再现不鼓励的行为 推荐的替代方案:不覆盖发电机类型
兰特(“龙卷风”,5489年) rng(5489年,“旋风”) rng(“违约”)
兰特(“种子”,sd) rng (sd, v4) rng (sd)
randn(“种子”,sd)
兰特(“状态”,sd) rng (sd v5uniform)
randn(“状态”,sd) rng (sd v5normal)
兰特(“种子”,总和(100 * 24小时)) rng(总和(100 *时钟),v4) rng(“洗牌”)

用状态向量初始化生成器的替换语法

状态向量最常见的用法(这里显示为)在兰特(发电机、圣)语法是在算法或迭代中精确地再现在特定点生成的随机数。例如,您可以使用这个向量来辅助调试。

rng函数更改保存和恢复随机数生成器状态的模式,如下表所示。左列中的示例假设您正在使用v5统一的发电机。右列中的示例使用了新的语法,并且适用于您使用的任何生成器。

不鼓励语法使用rand/randn 使用rng的新语法
保存v5发电机状态。St = rand('state');呼叫rand。X =兰特;恢复v5发电机状态。兰特(“状态”,圣);再次调用rand并希望得到相同的结果。Y = rand
获取发电机设置。S = rng;呼叫rand。X =兰特;恢复以前的生成器%设置。rng(年代);再次调用rand,得到相同的结果。Y = rand

有关演示,请参阅此说明视频

如果您无法从不鼓励的语法升级

如果您不能或不允许修改某些代码,并且您知道它使用不鼓励的随机数生成器控制语法,那么重要的是要记住,当您使用该代码时,MATLAB将切换到该代码传统模式.在遗留模式下,兰德而且randn由独立的发电机控制,每个都有自己的设置。

调用兰德在遗留模式下使用下列之一:

  • v4的发电机,由兰特(“种子”,…)

  • “v5uniform”发电机,由兰特(“状态”,…)

  • “旋风”发电机,由兰特(“龙卷风”,…)

调用randn在遗留模式下使用下列之一:

  • v4的发电机,由randn(“种子”,…)

  • “v5normal”发电机,由randn(“状态”,…)

如果您所依赖的代码将MATLAB置于遗留模式,请使用以下命令逃离遗留模式并返回默认启动生成器:

rng违约

或者,为了保护将MATLAB置于遗留模式的代码,可以使用:

s = rng %保存发电机当前设置. ...使用遗留随机数生成器语法调用代码。rng(s) %恢复生成器以前的设置。

另请参阅

||

相关的话题