【问题标题】:Using rng(Random Number Generator) for a specific function in MATLAB对 MATLAB 中的特定函数使用 rng(随机数生成器)
【发布时间】:2014-10-30 17:56:12
【问题描述】:

假设我们有两个 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 用于特定功能?

谢谢。

【问题讨论】:

    标签: matlab function loops random


    【解决方案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();
    

    【讨论】:

    • 感谢您的回答。我们可以将rng 重置为default 值,就像我们没有使用它一样吗?我们可以将MATLAB 随机生成器返回到default 而不是以前的条件rng_state 吗?
    • 运行 help rng 显示了这种可能性:rng('default')。您也可以使用rng('shuffle') 来“重新随机化”rng。
    • 感谢您的帮助。
    猜你喜欢
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 2010-12-25
    • 1970-01-01
    相关资源
    最近更新 更多