在MATLAB中使用rng(随机数生成器)表示特定函数

时间:2014-09-05 18:10:05

标签: matlab function loops random

假设我们有两个m文件:

第一个是功能:

function XX = ofx()

for i=1:2
    aa = randperm(5)
end

end

第二个:

rng(0);
for i=1:2
   xx = randperm(3)
end

ofx();

你可以看到,当我们一次又一次地运行第二个代码时,输​​出是相同的。为什么我们在randperm中都有这些相同的输出?我只想要xx随机数而不是ofx函数的相同随机生成器。我怎样才能做到这一点?我怎样才能将rng用于特定功能?

感谢。

1 个答案:

答案 0 :(得分:1)

问题不在于功能。问题在于,对于RNG的某些用途,您需要可重复的数字序列,而对于其他用途,您需要不重复的数字序列。为此,您需要仔细控制RNG的状态。我会改变你对它们的看法,让你的可重复案例保存,然后恢复状态。

rng_state = rng(0);     % Save (pseudo-) random state of RNG, then seed with known value
for i=1:2
    xx = randperm(3);
end
rng(rng_state);         % Restore saved state so other RNG calls work as expected

ofx();