gpt4 book ai didi

MATLAB:生成相同的随机数序列

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:12 26 4
gpt4 key购买 nike

我想使用 mersenne twister 生成 10 到 50 之间的“N”个随机数。我希望能够一遍又一遍地生成相同的序列。

我写了下面的代码:(seed = 50, a = 10, b = 50, N = 所需随机数的数量)

s = rng(seed, 'twister');
r = a + (b-a)*rand(N,1);
rng(s);
r1 = a + (b-a)*rand(N,1);

现在即使我打印

r1 - r

我没有得到零。我希望得到零,因为我在代码的第三行将随机数生成器重置为初始状态。

我的问题是我哪里出错了?

最佳答案

来自rng documentation :

sprev = rng(...) returns the previous settings of the random number generator used by rand, randi, and randn before changing the settings.

所以你的s是之前的状态,而不是设置的状态。将事物更改为

rng(seed, 'twister');
s=rng();
r = a + (b-a)*rand(N,1);
rng(s);
r1 = a + (b-a)*rand(N,1);

应该产生所需的行为。

这可能看起来很麻烦,但它的出现是因为 rng 意味着被视为一个开关:您在设置状态的同时存储前一个状态以供将来恢复。毕竟,立即重置状态似乎更具诊断意义,而不是实际意义。

关于MATLAB:生成相同的随机数序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40956603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com