在早期版本的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
,兰迪
和所有其他随机数生成函数randperm
,sprand
等等。学习如何使用rng
在替换不鼓励的语法时,请花一些时间来理解它们的功能。这将帮助您看到哪个新的rng
语法最适合您的需要。
第一个输入兰特(发电机,年代)
或randn(发电机,s)
指定生成器的类型,如此处所述。
|
的v4
而且v5
生成器不再推荐使用,除非您试图精确地再现在早期版本的MATLAB中生成的随机数。更新代码的最简单方法是使用rng
.的rng
方法的名称兰德
而且randn
生成器如下所示。
rand/randn生成器名称 | rng生成器名称 |
---|---|
“种子” |
v4的 |
“状态” |
|
“旋风” |
“旋风” (推荐) |
整数种子最常见的用法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) %恢复生成器以前的设置。