这个例子展示了在MATLAB中如何避免重复相同的随机数数组®将重新启动。当您想要组合在不同MATLAB会话中执行的相同随机数命令的结果时,此技术非常有用。
所有的随机数函数,兰德
,randn
,兰迪
,randperm
,从共享随机数生成器中提取值。每次启动MATLAB时,生成器都会将自己重置为相同的状态。因此,例如兰特(2,2)
在启动后立即执行,返回相同的结果。而且,任何调用随机数函数的脚本或函数在重新启动时都会返回相同的结果。
获得不同随机数的一种方法是每次使用不同的种子初始化生成器。这样做可以确保你不会重复上一阶段的结果。
执行rng(“洗牌”)
在调用任意随机数函数之前,在MATLAB会话中命令一次。
rng (“洗牌”)
您可以在MATLAB命令窗口中执行此命令,或者您可以将其添加到您的启动文件,这是一个特殊的脚本,MATLAB每次重启时都要执行。
现在,执行一个随机数命令。
一个=兰德(2,2);
每次你打来电话rng(“洗牌”)
,它基于当前时间使用不同的种子重新播种生成器。
请注意
频繁地重新播种生成器不会改善输出的统计特性,也不会使输出在任何真正意义上更随机。当您重新启动MATLAB或在运行涉及随机数的大型计算之前,重新播种可能很有用。但是,在会话中过于频繁地重新播种生成器不是一个好主意,因为随机数的统计属性可能会受到不利影响。
或者,在不同的MATLAB会话中显式地指定不同的种子。例如,在一个MATLAB会话中生成随机数。
rng (1);一个=兰德(2,2);
使用不同的种子产生随机数在另一个MATLAB会话。
rng (2);B =兰德(2,2);
数组一个
和B
是不同的,因为生成器在每次调用兰德
函数。
要生成保证不重叠的多个独立流,并对其执行了演示流之间值的独立性的测试,可以使用RandStream.create
.有关生成多个流的更多信息,请参见多流.