主要内容

替换rand和randn的不鼓励语法

气馁语法的描述

在MATLAB的早期版本®,您控制了随机数发生器使用的兰特兰德用来的功能'种子'“状态”'twister'输入。例如:

Rand(‘seed’,sd) randn(‘seed’,sd) Rand(‘state’,s) randn(‘state’,s) Rand(‘twister’,5489)

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

  • 条款'种子'“状态”是发电机的误导性的名称。

  • 所有的发电机除了'twister'是有缺陷的。

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

要评估替换现有代码中的替换气馁的语法的影响,请在MATLAB会话开始时执行以下命令:

警告('在'MATLAB: RandStream: ActivatingLegacyGenerators) 警告('在'MATLAB: RandStream: ReadingInactiveLegacyGeneratorState

替换语法的描述

使用rng函数来控制所使用的共享生成器兰特兰德兰迪以及所有其他随机数生成的功能兰培姆Sprand.,等等。学习如何使用rng函数替换不鼓励使用的语法时,请花一些时间来理解它们的功能。这应该能帮你找到新的rng语法最适合您的需求。

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

发电机=“种子”提到了matlabv4.发电机,不是种子初始化值。

Generator ='state'提到了matlabv5.发电机,不是发电机的内部状态。

Generator ='Twister'现在提到了Mersenne Twister Generator,现在Matlab启动生成器。

v4.v5.除非您尝试完全重现在早期版本的MATLAB中生成的随机数,否则不再推荐发电机。更新代码的最简单方法是使用rng.这rng函数替换了名称兰特兰德发电机如下。

兰特/ randn发生器的名字 提高发电机的名字
'种子' v4的
“状态”

“v5uniform”(兰特

“v5normal”(兰德

'twister' 'twister'(受到推崇的)

用整数种子初始化发电机的替换语法

整数种子的最常见用途SD.兰特(发电机,SD)语法是:

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

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

下表显示了具有整数种子的语法的替代品SD.

  • 第一列显示了不鼓励使用的语法兰特兰德

  • 第二列显示了如何用新的恰好再现气馁的行为rng函数。在大多数情况下,这是通过指定遗留生成器类型来实现的,例如v4或v5生成器,这不再被推荐。

  • 第三列显示推荐的替代方案,不指定可选的发电机类型输入rng.因此,如果你总是省略了发电机输入,兰特兰德,兰迪只需使用Matlab Startup使用的默认Mersenne Twister Generator。在未来的发布时,新的生成器取代Mersenne Twister时,此代码将使用新的默认值。

令人沮丧的兰特/ randn语法 不推荐:通过指定生成器类型复制不鼓励的行为 推荐的替代方案:不覆盖生成器类型
兰特(“龙卷风”,5489年) rng(5489年,“旋风”) RNG('默认')
兰特('Seed',SD) rng (sd, v4) RNG(SD)
randn(“种子”,sd)
兰特('State',SD) RNG(SD,'v5Uniform')
Randn('State',SD) rng (sd v5normal)
兰特(“种子”,总和(100 * 24小时)) RNG(总和(100 *时钟),'v4') RNG('Shuffle')

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

状态矢量最常见的用途(在这里显示为英石)兰特(发电机,st)语法是以算法或迭代以特定点生成的随机数完全再现。例如,您可以将此向量用作调试中的援助。

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

不鼓励使用rand/randn 使用RNG的新语法
%保存V5生成状态。st =兰特('州');%叫兰德。x =兰德;%恢复v5发生器状态。兰特('国家',st);%调用rand再次调用rand,并希望百分比相同的结果。y = rand.
获取生成器设置。s =提高;%叫兰德。x =兰德;恢复以前的生成器%设置。rng(年代);再次调用rand,得到相同的结果。y = rand.

对于演示,请参阅此教学视频

如果您无法从阻止语法升级

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

调用兰特在遗留模式中使用以下之一:

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

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

  • 'twister'发电机,由此控制兰德('twister',......)

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

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

  • “v5normal”发电机,由此控制Randn('State',......)

如果您依赖于将MATLAB放入遗留模式的代码,请使用以下命令转义传统模式并返回默认启动生成器:

rng违约

或者,要保护将MATLAB的代码视为传统模式,请使用:

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

也可以看看

||

相关的话题