Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

随机数为什么可在启动后重复出现?

所有随机数函数(randrandnrandirandperm)均可从共享随机数生成器中抽取值。每次启动 MATLAB® 时,生成器都会使用默认算法和种子将自身重置为相同的状态。因此,当您在对随机数生成器使用相同预设项的不同 MATLAB 会话中启动后立即执行一个命令(例如 rand(2,2))时,该命令会返回相同的结果。此外,无论何时重新启动,任何调用随机数函数的脚本或函数均返回相同的结果。

当您第一次启动 MATLAB 会话或调用 rng("default") 时,MATLAB 使用默认算法和种子初始化随机数生成器。从 R2023b 开始,您可以在 MATLAB 预设项中设置默认算法和种子。如果您不更改这些预设项设置,则与以前的版本一样,rng 将使用种子为 0 的梅森旋转生成器的出厂值 "twister"。有关详细信息,请参阅 随机数生成器的默认设置随机数生成器的可再现性

  • 如果希望在重启 MATLAB 时避免重复相同的随机数数组,请在调用 randrandnrandirandperm 之前使用 rng("shuffle")。此命令可确保不会重复 MATLAB 以前会话的结果。

  • 如果想在不重启 MATLAB 会话的情况下重复该会话开始时获得的结果,可使用 rng("default") 将生成器重置为启动状态。

在执行 rng("default") 时,后续的随机数命令将返回与另一个 MATLAB 会话的输出匹配的结果(该会话对随机数生成器使用相同的默认算法和种子)。

rng("default");
A = rand(2,2)
A =

    0.8147    0.1270
    0.9058    0.9134
无论何时使用相同的随机数生成器预设项重新启动 MATLAB,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

另请参阅