在for循环之前使用rng(),Matlab生成一个随机数组,在for循环中生成另一个随机数组。这两个结果都是“可重复的”,因此rng()种子可以工作。但我想知道这种行为的原因,我原以为结果是一样的。我觉得其实不是因为RNG而是FOR LOOP
代码交换?
for i = 1:2
rng(1,'philox');
disp(randn(2,1)); % 1st number is 0.0906, 2nd one is -0.7327
end
rng(1,'philox');
for i = 1:2
disp(randn(2,1)); % 1st number is 0.7565, 2nd one is -0.7096
end
结果不应该是一样的吗?不是RNG(1,.)存储种子%1的相同数字数组
1条答案
按热度按时间clj7thdc1#
我相信,您的代码按照您的预期和描述工作。您肯定没有在代码示例中显示所有输出。这是我在运行它时得到的结果。
在第一种情况下,您重置循环中的随机数生成器,因此您会得到两倍相同的结果(两个数字)。在第二种情况下,您只设置了一次,因此您得到了与前面相同的数字,然后在第二个循环中,您获得了算法产生的下两个相应的随机数。这些算法一旦启动,将产生无限数量的不同数字,并且它们不会产生相同的结果,除非您显式地调用带有种子的算法的重新启动,就像您在第一个示例中所做的那样。
如果您在循环内调用
disp(randn(1))
,而不是每次生成2个数字,那么所有这些都不会那么令人困惑。