生成可重复的随机数
指定种子
本示例显示如何通过首先指定种子来重复生成随机数数组。每次使用相同种子初始化生成器时,始终都可以获得相同的结果。
首先,初始化随机数生成器,以使本示例中的结果具备可重复性。
rng('default');
现在使用种子 1
初始化生成器。
rng(1);
然后创建随机数数组。
A = rand(3,3)
A = 0.4170 0.3023 0.1863 0.7203 0.1468 0.3456 0.0001 0.0923 0.3968
重复同样的命令。
A = rand(3,3)
A = 0.5388 0.2045 0.6705 0.4192 0.8781 0.4173 0.6852 0.0274 0.5587
第一次调用 rand
改变了生成器的状态,所以第二次调用的结果不同。
现在使用之前的种子重新初始化生成器。然后将再次生成第一个矩阵 A
。
rng(1); A = rand(3,3)
A = 0.4170 0.3023 0.1863 0.7203 0.1468 0.3456 0.0001 0.0923 0.3968
在某些情况下,只设定种子并不能保证相同的结果。这是因为代码执行时,随机数函数所用的生成器可能与您所期望的不同。要确保长期可重复性,应同时指定种子和生成器类型。
例如,以下代码将种子设定为 1
并将生成器设置为梅森旋转。
rng(1,'twister');
当您希望实现下列结果时,应同时设置种子和生成器:
应确保如今编写的代码在以后的 MATLAB® 版本中运行时该时可返回相同的结果。
应确保在使用当前版本时,您在以前 MATLAB 版本中编写的代码可返回相同的结果。
在运行他人的随机数代码之后,再重复自己代码的随机数。
请参见 rng
参考页来了解可用的生成器列表。
保存和恢复生成器设置
本示例显示如何通过保存和恢复生成器设置来创建可重复随机数数组。需要保存和恢复生成器设置的最常见原因是为了重现算法或迭代中某一特定点产生的随机数。例如,可以在调试时使用生成器设置作为辅助工具。与重新提供种子(该方法会对生成器进行重新初始化)不同,此方法让您能够随时保存和恢复生成器的设置。
首先,初始化随机数生成器,以使本示例中的结果具备可重复性。
rng(1,'twister');
创建 1 到 10 之间的随机整数值数组。
A = randi(10,3,3)
A = 3×3
5 4 2
8 2 4
1 1 4
第一次调用 randi
改变了生成器的状态。在第一次调用结构体 s
中的 randi
后,保存生成器设置。
s = rng;
创建另一个由 1 到 10 之间的随机整数值组成的数组。
A = randi(10,3,3)
A = 3×3
6 3 7
5 9 5
7 1 6
现在,将生成器恢复为在 s
中存储的以前状态,并重新生成第二个数组 A
。
rng(s); A = randi(10,3,3)
A = 3×3
6 3 7
5 9 5
7 1 6