2016-12-04 5 views
3

メルセンヌツイスターを使用して10から50の間に 'N'個の乱数を生成したい。同じシーケンスを何度も繰り返し生成できるようにしたい。MATLAB:同じランダム番号シーケンスを生成する

Iは、次のコードを書いた:(シード= 50、= 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 

を印刷Iをゼロにならないでください。乱数ジェネレータをコードの3行目の初期状態にリセットしたので、ゼロになると思います。

私の質問はどこに間違っていますか? rng documentationから

+0

浮動小数点エラー – nkjt

+0

いいえ私は10のオーダーの重大なエラーが発生しています。 –

+0

乱数がr1とrで同じであれば、浮動小数点エラーが発生する可能性もあります**正確には**同じです。 –

答えて

5

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

ありがとうございます。問題は解決しました。 –

関連する問題