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

在MATLAB中使用rng(随机数生成器)实现特定函数,matlab,function,loops,random,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 谢谢。问题

假设我们有两个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


谢谢。

问题不在于功能。问题在于,对于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();

谢谢你的回答。我们是否可以将
rng
重置为
default
值,就像我们没有使用它一样?我们能否将
MATLAB
随机生成器返回到
default
非先前条件
rng\u状态
?运行
help rng
显示了这种可能性:
rng('default')
。您也可以使用
rng('shuffle')
来“重新随机”rng。谢谢您的帮助。