随机数为什么可在启动后重复出现?
所有随机数函数(rand
、randn
、randi
和 randperm
)均可从共享随机数生成器中抽取值。每次启动 MATLAB® 时,生成器都会使用默认算法和种子将自身重置为相同的状态。因此,当您在对随机数生成器使用相同预设项的不同 MATLAB 会话中启动后立即执行一个命令(例如 rand(2,2)
)时,该命令会返回相同的结果。此外,无论何时重新启动,任何调用随机数函数的脚本或函数均返回相同的结果。
当您第一次启动 MATLAB 会话或调用 rng("default")
时,MATLAB 使用默认算法和种子初始化随机数生成器。您可以在 MATLAB 预设项中设置默认算法和种子 (自 R2023b 起)。如果您不更改这些预设项设置,则与以前的版本一样,rng
将使用种子为 0 的梅森旋转生成器的出厂值 "twister"
。有关详细信息,请参阅 随机数生成器的默认设置 和 随机数生成器的可再现性。
如果希望在重启 MATLAB 时避免重复相同的随机数数组,请在调用
rand
、randn
、randi
或randperm
之前使用rng("shuffle")
。此命令可确保不会重复 MATLAB 以前会话的结果。如果想在不重启 MATLAB 会话的情况下重复该会话开始时获得的结果,可使用
rng("default")
将生成器重置为启动状态。
在执行 rng("default")
时,后续的随机数命令将返回与另一个 MATLAB 会话的输出匹配的结果(该会话对随机数生成器使用相同的默认算法和种子)。
rng("default");
A = rand(2,2)
A = 0.8147 0.1270 0.9058 0.9134
A
中的值始终与 rand(2,2)
的输出匹配。您也可以通过指定随机数生成器使用的种子和算法来重复结果。例如,将种子设置为 1
,将生成器算法设置为梅森旋转
rng(1,"twister");
创建一个随机数数组。
A = rand(2,2)
A = 0.4170 0.0001 0.7203 0.3023
接下来,在新 MATLAB 会话中,重复相同的命令以重新生成数组 A
。
rng(1,"twister");
A = rand(2,2)
A = 0.4170 0.0001 0.7203 0.3023