随机数为什么可在启动后重复出现?
所有随机数函数(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