2016-12-04 100 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

謝謝。問題解決了。 –