2016-12-04 178 views
3

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

我写以下代码:(种子= 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 

我不要零。我期望能获得零,因为我已经重置随机数发生器它在我的代码的第三行初始状态。

我的问题是我要去哪里?

+0

如果你得到一个非常接近零的东西,它只是浮​​点错误 – nkjt

+0

不,我得到10的顺序显着错误。 –

+0

如果产生的随机数在r1和r中是相同的,我不应该'即使得到浮点错误,因为它们应该完全相同。 –

回答

5

rng documentation

sprev = rng(...)返回更改设置之前所使用的randrandi,并randn随机数发生器的以前的设置。

所以你s是以前的状态,而不是设置状态。改变东西到

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

应该产生所需的行为。

这看起来很麻烦,但它的出现是因为rng被认为是一种切换:您在设置状态的同时存储前一个用于未来恢复的状态。毕竟,立即重置状态似乎比实际更具诊断性。

+0

谢谢。问题解决了。 –