Main Content

rng

説明

rng("default") は既定のアルゴリズムとシードを使用して MATLAB® 乱数発生器を初期化します。出荷時の既定の設定は、シードが 0 のメルセンヌ・ツイスター発生器です。既定の設定および再現性の変更の詳細については、乱数発生器の既定の設定および乱数発生器の再現性を参照してください。

関数 rng は、関数 randrandirandn および randperm が乱数列を生成する方法を決定する "グローバル ストリーム" を制御します。グローバル ストリームから 1 つ以上の独立したストリームを作成するには、RandStream および RandStream.create を参照してください。

rng(seed) は現在の発生器アルゴリズムを使用し、乱数発生器のシードを指定します。

  • rng(1) のように非負の整数として seed を指定し、そのシードで乱数発生器を初期化します。

  • seed"shuffle" として指定して、現在時刻に基づいて発生器のシードを初期化します。

rng(seed,generator) は、使用する乱数発生器のアルゴリズムも指定します。たとえば、rng(2,"philox") は、Philox 4x32 発生器をシード 2 で初期化します。

rng(generator) は、シード 0 を指定し、使用する乱数発生器のアルゴリズムを指定します。この構文は rng(0,generator) と等価です。 (R2023b 以降)

rng(s) は、TypeSeed、および State の各フィールドをもつ構造体 s に含まれている設定に基づいて発生器を初期化します。構造体 s は、s = rng または s = rng(__) の前の呼び出しによって返された構造体でなければなりません。

t = rng は、TypeSeed、および State の各フィールドをもつ構造体 t で現在の乱数発生器の設定を返します。

t = rng(___) は、指定した引数を使用して設定を変更する前に、現在の乱数発生器の設定を構造体 t で返します。前述の構文における入力引数を任意に組み合わせて出力引数を指定できます。

すべて折りたたむ

既定の発生器アルゴリズムとシードを使用して乱数発生器を初期化します。

rng("default")

既定の乱数発生器設定を表示します。この場合、乱数発生器はシードが 0 のメルセンヌ・ツイスター アルゴリズムを使用しています。

s = rng
s = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

0 から 1 までの範囲の一様分布の乱数から成る 4 行 4 列の行列を作成します。

r = rand(4)
r = 4×4

    0.8147    0.6324    0.9575    0.9572
    0.9058    0.0975    0.9649    0.4854
    0.1270    0.2785    0.1576    0.8003
    0.9134    0.5469    0.9706    0.1419

R2023b 以降では、MATLAB の基本設定ウィンドウから既定のアルゴリズムとシードを設定できます。MATLAB の基本設定を変更しなかった場合、rng は、以前のリリースと同様に、出荷時の値としてメルセンヌ・ツイスター発生器の "twister"、シード 0 を使用します。

乱数発生器の設定を指定してこの例の結果を再現可能にします。発生器のシードを 2、アルゴリズムをメルセンヌ・ツイスターに設定してから、発生器の設定を保存します。

rng(2,"twister")
s = rng
s = struct with fields:
     Type: 'twister'
     Seed: 2
    State: [625x1 uint32]

0 から 1 までの乱数の 1 行 5 列の行ベクトルを作成します。

x = rand(1,5)
x = 1×5

    0.4360    0.0259    0.5497    0.4353    0.4204

発生器のシードとアルゴリズムを変更し、新しい乱数行ベクトルを作成します。

rng(1,"philox")
xnew = rand(1,5)
xnew = 1×5

    0.5361    0.2319    0.7753    0.2390    0.0036

次に、発生器を元の設定に戻し、乱数ベクトルを作成します。結果は、元の発生器を使用して作成された元の行ベクトル x と一致します。

rng(s)
xold = rand(1,5)
xold = 1×5

    0.4360    0.0259    0.5497    0.4353    0.4204

入力引数

すべて折りたたむ

乱数シード。2^32 未満の非負の整数または "shuffle" として指定します。seed"shuffle" として指定した場合、関数 rng は発生器を現在の時刻に基づいて初期化するため、rng の各呼び出し後の乱数列が異なるようになります。

乱数のアルゴリズム。次の表のいずれかのオプションとして指定します。発生器のアルゴリズムの詳細については、乱数ストリームの作成と管理を参照してください。

発生器の名前発生器のキーワード
"twister"メルセンヌ・ツイスターmt19937ar
"simdTwister"SIMD 指向高速メルセンヌ・ツイスターdsfmt19937
"combRecursive"複数の再帰発生器の組み合わせmrg32k3a
"multFibonacci"乗法ラグ フィボナッチmlfg6331_64
"philox"Philox 4x32 発生器、10 ラウンドphilox4x32_10
"threefry"Threefry 4x64 発生器、20 ラウンドthreefry4x64_20

MATLAB Version 4.0 と 5.0 で使用されていた従来の発生器の場合は、次のいずれかのオプションを使用します。

発生器の名前発生器のキーワード
"v4"レガシ MATLAB Version 4.0 発生器mcg16807
"v5uniform"レガシ MATLAB Version 5.0 一様分布発生器swb2712
"v5normal"レガシ MATLAB Version 5.0 正規分布発生器shr3cong

乱数発生器の設定。TypeSeed、および State の各フィールドをもつ構造体として指定します。

詳細

すべて折りたたむ

乱数発生器の既定の設定

  • MATLAB の基本設定ウィンドウから乱数発生器の既定のアルゴリズムおよびシードを変更できます。[ホーム] タブの [環境] セクションで [基本設定] をクリックします。[MATLAB][一般] を選択してから、[乱数発生] 基本設定で [既定のアルゴリズム] に別のオプションを選択し、[既定のシード] に別の値を選択します。 (R2023b 以降)

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

  • 並列ワーカー (Parallel Computing Toolbox™ が必要) を使用している場合、rng("default") は、20 ラウンド、シード値 0 で Threefry 4x64 発生器を初期化します。MATLAB の基本設定ウィンドウで既定の発生器の設定を変更しても、並列ワーカーの既定の動作は影響を受けません。 (R2023a 以降)

乱数発生器の再現性

MATLAB セッション内で結果を繰り返し可能にする場合は、プログラムの開始時に rng("default") を使用します。rng("default") は、MATLAB の基本設定で指定されている既定のアルゴリズムとシードを使用します。ただし、このコマンドでは、異なる基本設定をもつ異なる MATLAB セッション間で同じ結果が得られることは保証されません。

MATLAB の将来のリリースでも、あるいは MATLAB の基本設定で既定のアルゴリズムおよびシードが変更された場合でも結果を同じままにする場合は、プログラムの開始時に代わりに rng(seed,generator) または rng(generator) を使用します。たとえば、rng("twister") により、シード 0 でメルセンヌ・ツイスター発生器を使用します。

ヒント

  • rng("shuffle") は、現在の時刻に基づいて乱数発生器のシードを指定するため、これを使用して、並列処理の実行時に独立したストリームのために異なるワーカーに乱数ストリームを設定しないでください。parfor ジョブの内部など、コマンドが複数のワーカーに同時に送信されている場合、関数 rng は同じシードを使用します。ワーカーでストリームが独立するようにするには、既定の動作を使用するか、RandStream を使用して、各ワーカーで独自のサブストリームを使用することを検討してください。

  • 並列処理を実行する場合、MATLAB クライアントと MATLAB ワーカーで既定の乱数発生器が異なります。既定では、MATLAB クライアントはシード 0 でメルセンヌ・ツイスター発生器を使用し、MATLAB ワーカーはシード 0、20 ラウンドで Threefry 4x64 発生器を使用します。MATLAB の基本設定で既定の発生器の設定を変更した場合、クライアントの既定の動作のみが影響を受け、並列ワーカーの既定の動作は影響を受けません。クライアントとワーカーで同じ乱数ストリームを生成する必要がある場合は、発生器アルゴリズムとシードを同じにして rng を使用できます (あるいは、発生器アルゴリズム、シード、および正規変換アルゴリズムを同じにして RandStream を使用することを検討してください)。詳細については、ワーカー上の乱数ストリームの制御 (Parallel Computing Toolbox)を参照してください。

  • "seed""state" または "twister" 入力をもつ関数 randrandn ではなく rng を使用するには、rand と randn の非推奨構文の置換を参照してください。

拡張機能

バージョン履歴

R2011a で導入

すべて展開する