Main Content

起動後に乱数が繰り返される理由

乱数関数 randrandnrandirandperm はすべて、共有の乱数発生器から値を取得します。MATLAB® を起動するたびに、発生器は既定のアルゴリズムとシードを使用して同じ状態にリセットされます。このため、乱数発生器について同じ基本設定が構成されている異なる MATLAB セッションで起動直後に rand(2,2) のようなコマンドを実行すると、いつでも同じ結果が返されます。また、乱数関数を呼び出すスクリプトや関数はいずれも、再起動後には同じ結果を返します。

初めて MATLAB セッションを開始するか rng("default") を呼び出したときに、MATLAB は、既定のアルゴリズムとシードを使用して乱数発生器を初期化します。R2023b 以降では、MATLAB の基本設定で既定のアルゴリズムとシードを設定できます。該当する基本設定を変更しなかった場合、rng は、以前のリリースと同様に、出荷時の値としてメルセンヌ・ツイスター発生器の "twister"、シード 0 を使用します。詳細については、乱数発生器の既定の設定乱数発生器の再現性を参照してください。

  • MATLAB の再起動に際して同じ乱数配列が繰り返されないようにする場合は、randrandnrandi、または randperm を呼び出す前に、rng("shuffle") を使用します。このコマンドを使用することで、以前の MATLAB セッションと同じ結果が繰り返されないようになります。

  • MATLAB セッションの開始時に得られた結果を再起動せずに繰り返す場合は、rng("default") を使用して、発生器を起動時の状態にリセットできます。

rng("default") を実行した場合、その後の乱数コマンドは、乱数発生器の同じ既定のアルゴリズムとシードを使用する別の MATLAB セッションの出力と一致する結果を返します。

rng("default");
A = rand(2,2)
A =

    0.8147    0.1270
    0.9058    0.9134
A の値は、乱数発生器の同じ基本設定を使用して MATLAB を再起動すると常に rand(2,2) の出力と一致します。

あるいは、乱数発生器に使用されるシードとアルゴリズムを指定して結果を繰り返すこともできます。たとえば、シードを 1 に、発生器アルゴリズムをメルセンヌ・ツイスターに設定します。

rng(1,"twister");

乱数の配列を作成します。

A = rand(2,2)
A =

    0.4170    0.0001
    0.7203    0.3023

次に、新しい MATLAB セッションで、同じコマンドを繰り返して配列 A を再現します。

rng(1,"twister");
A = rand(2,2)
A =

    0.4170    0.0001
    0.7203    0.3023

参考