ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

RandStream

乱数ストリーム

コンストラクター

RandStream

説明

MATLAB® の疑似乱数は、1 つまたは複数の乱数ストリームからなります。乱数の配列を生成する最も簡単な方法は、関数 randrandn、または randi を使用することです。これらのすべての関数は、グローバル ストリームとして知られている、一様乱数の同じストリームに依存します。グローバル ストリームから別々に機能する他のストリームを作成することができ、乱数の配列を生成するために、それらの randrandi、または randn メソッドを使用することができます。さらに、乱数ストリームを作成し、それをグローバル ストリームにすることも可能です。

単一の乱数ストリームを作成するには、RandStream コンストラクターを使用します。複数の独立した乱数ストリームを作成するには、RandStream.create を使用します。関数 rng を使用すると、新しいグローバル ストリームを作成するための簡単なインターフェイスを利用できます。

stream = RandStream.getGlobalStream はグローバル乱数ストリーム、すなわち関数 randrandi、および randn で現在使用されているものを返します。

prevstream = RandStream.setGlobalStream(stream) は、乱数ストリーム stream を関数 randrandi、および randn で使用される新たにグローバル ストリームとして指定し、前のグローバル ストリームを返します。

乱数ストリーム s は、その動作を制御するプロパティをもっています。p = s.Property または s.Property = p を使用して、プロパティのアクセスまたは割り当てを行います。下表に定義されたプロパティを示します。

プロパティ

プロパティ説明
Type(参照のみ) ストリームが使用する発生器のアルゴリズム。利用可能な発生器のリストは、RandStream.list によって与えられます。
Seed(参照のみ) ストリームの生成に使用する seed 値
NumStreams(参照のみ) 現在のストリームを作成したグループにあるストリーム数
StreamIndex(参照のみ) 現在のストリームと共に作成したストリームのグループにおける現在のストリームのインデックス
State

発生器の内部状態。このプロパティの形式に依存しません。S.State に割り当てる値は、S.State から読み込んだ値であることが必要です。State プロパティからあらかじめ読み込まずにストリームを予期される状態に返すには、reset を使用します。

乱数ストリーム s で作成された乱数列は、その乱数発生器の内部状態で定義されます。State プロパティにより発生器の内部状態を保存して復元するこで、乱数列を再生できます。

Substream現在設定しているストリームのサブストリームのインデックス。既定の設定は 1 です。複数のサブストリームはすべての発生器でサポートされているとは限りません。乗法ラグ フィボナッチ発生器 (mlfg6331_64) と複数の再帰発生器の組み合わせ (mrg32k3a) はサブストリームをサポートしています。
NormalTransform正規分布から疑似乱数値を生成するために、randn(s, ...) が使用する変換アルゴリズム。使用可能な値は 'Ziggurat''Polar' または 'Inversion' です。
AntitheticS が対称な疑似乱数 (1 から通常値を減算したもの) を生成するかどうかを示す論理値。既定値は false です。
FullPrecisionS が高精度な値を生成しているかを判定する論理値。FullPrecision が false の場合、いくつかの発生器は少ないビット数で疑似乱数を高速に生成することができます。既定の設定は true です。

メソッド

メソッド説明
RandStream乱数ストリームを作成します。
RandStream.create複数の独立した乱数ストリームを作成します。
get乱数ストリーム オブジェクトのプロパティを取得します。
list使用可能な乱数発生器のアルゴリズムをリストします。
set乱数ストリーム プロパティを設定します。
RandStream.getGlobalStreamグローバル乱数ストリームを取得します。
RandStream.setGlobalStreamグローバル乱数ストリームを設定します。
resetストリームを初期の内部状態にリセットします。
rand一様分布からの疑似乱数。
randn標準正規分布からの疑似乱数。
randi離散一様分布からの整数の疑似乱数。
randperm値を不規則に並べ替えます。

例 1

単一のストリームを作成し、それを現在のグローバル ストリームに指定する:

s = RandStream('mt19937ar','Seed',1);
RandStream.setGlobalStream(s);

例 2

3 つの独立ストリームを作成する:

[s1,s2,s3] = RandStream.create('mrg32k3a','NumStreams',3);
r1 = rand(s1,100000,1);
r2 = rand(s2,100000,1);
r3 = rand(s3,100000,1);
corrcoef([r1,r2,r3])

例 3

3 つの独立したストリームの集合から 1 つのストリームを作成し、それを現在のグローバル ストリームとして指定する:

s2 = RandStream.create('mrg32k3a','NumStreams',3,...
     'StreamIndices',2);
RandStream.setGlobalStream(s2);

例 4

前の結果を再生するために、randrandi、および randn に基づくグローバル乱数ストリームを元の状態にリセットする:

stream = RandStream.getGlobalStream;
reset(stream);

例 5

rand の出力を再生するために、現在のグローバル ストリームの状態を保存して復元する:

stream = RandStream.getGlobalStream;
savedState = stream.State;
u1 = rand(1,5)
u1 =
    0.8147    0.9058    0.1270    0.9134    0.6324

stream.State = savedState;
u2 = rand(1,5)
u2 =
    0.8147    0.9058    0.1270    0.9134    0.6324
u2 は、u1 とまったく同じ値を含みます。

例 6

グローバル乱数ストリームを初期の設定値にリセットする。こうすることで、新しい MATLAB セッションと同様に、randrandi、および randn が再開されます。

s = RandStream('mt19937ar','Seed',0);
RandStream.setGlobalStream(s);

例 7

seed を使用することにより、グローバル乱数ストリームを現在の時間に基づいて再初期化する。こうすることで、randrandi、および randn は、MATLAB セッションが変わるたびに異なる値を返します。この操作は、MATLAB が生成する乱数の統計的な特性に影響を与えることがあるため、MATLAB セッションごとに何度も実行することは望ましくありません。

s = RandStream('mt19937ar','Seed','shuffle');
RandStream.setGlobalStream(s);

例 8

一様な値から正規分布の疑似乱数値を作成するために、randn が使用する変換アルゴリズムを変更する。この操作を行ってもグローバル ストリームが置き換えられたり、リセットされたりしません。

stream = RandStream.getGlobalStream;
stream.NormalTransform = 'inversion'

参考

| | |

この情報は役に立ちましたか?