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

Ana*_*shi 3 random matlab

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

我写了以下代码:(种子= 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);
Run Code Online (Sandbox Code Playgroud)

现在即使我打印

r1 - r
Run Code Online (Sandbox Code Playgroud)

我没有得到零.我期望得到零,因为我已经将随机数生成器重置为我的代码第三行中的初始状态.

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

Tro*_*kin 5

rng文档:

sprev = rng(...)返回由rand,, 使用的随机数生成器的先前设置randi,并randn在更改设置之前.

所以你s是先前的状态,而不是设定状态.改变事物

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

应该产生所需的行为.

这可能看起来很麻烦,但它出现了,因为rng它意味着像切换一样对待:你设置你的状态,同时存储前一个用于将来的恢复.毕竟,立即重置状态似乎比实际更具诊断性.