MATLAB的rng()函数在循环中的行为

vx6bjr1n  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(560)

在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的相同数字数组

clj7thdc

clj7thdc1#

我相信,您的代码按照您的预期和描述工作。您肯定没有在代码示例中显示所有输出。这是我在运行它时得到的结果。

>> test
    First case: 

    0.0906
   -0.7327

    0.0906
   -0.7327

    Second case:

    0.0906
   -0.7327

    0.7565
   -0.7096

在第一种情况下,您重置循环中的随机数生成器,因此您会得到两倍相同的结果(两个数字)。在第二种情况下,您只设置了一次,因此您得到了与前面相同的数字,然后在第二个循环中,您获得了算法产生的下两个相应的随机数。这些算法一旦启动,将产生无限数量的不同数字,并且它们不会产生相同的结果,除非您显式地调用带有种子的算法的重新启动,就像您在第一个示例中所做的那样。
如果您在循环内调用disp(randn(1)),而不是每次生成2个数字,那么所有这些都不会那么令人困惑。

相关问题