在MATLAB中使用rng(随机数生成器)实现特定函数
假设我们有两个m文件: 第一个是函数:在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 谢谢。问题
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。谢谢您的帮助。