ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

複数のストリーム

MATLAB® は、複数の独立した乱数ストリームを生成できる発生器アルゴリズムを用意しています。RandStream.create のファクトリー メソッドを使用すると、同じ発生器アルゴリズムと seed 値をもつ、統計的に独立した 3 つのストリームを作成できます。

[s1,s2,s3]=RandStream.create('mlfg6331_64','NumStreams',3)

s1 = 

mlfg6331_64 random stream
      StreamIndex: 1
       NumStreams: 3
             Seed: 0
  NormalTransform: Ziggurat

s2 = 

mlfg6331_64 random stream
      StreamIndex: 2
       NumStreams: 3
             Seed: 0
  NormalTransform: Ziggurat

s3 = 

mlfg6331_64 random stream
      StreamIndex: 3
       NumStreams: 3
             Seed: 0
  NormalTransform: Ziggurat

独立性を示すものとして、この 3 つのストリームは概して無相関であることがわかります。

r1=rand(s1,100000,1);
r2=rand(s2,100000,1); 
r3=rand(s3,100000,1);
corrcoef([r1,r2,r3])

ans =

    1.0000   -0.0017   -0.0010
   -0.0017    1.0000   -0.0050
   -0.0010   -0.0050    1.0000

別の seed を使うと、他のストリームから独立して動作するストリームを作成し、異なる値を返すことができます。

s1=RandStream('mt19937ar','seed',1);
s2=RandStream('mt19937ar','seed',2);
s3=RandStream('mt19937ar','seed',3);

seed 値は 0 と の間の整数になるようにしてください。seed が異なると、通常ストリームは無相関の値を返します。

r1=rand(s1,100000,1);
r2=rand(s2,100000,1);
r3=rand(s3,100000,1);
corrcoef([r1,r2,r3])

ans =

    1.0000    0.0030    0.0045
    0.0030    1.0000   -0.0015
    0.0045   -0.0015    1.0000

独立したストリームを明確にはサポートしていない発生器に、異なる seed を入力すると複数のストリームが作成されます。しかし、この場合は複数の独立したストリームを作成できるように特別に設計された発生器を使うことで、ストリームの統計的な特性が理解しやすくなります。

用途によっては、独立したストリーム集合からいくつかのストリームのみを作成すると便利な場合があります。StreamIndex プロパティは、既定設定のストリームから指定したストリームのインデックスを返します。

numLabs=256;
labIndex=4;
s1=RandStream.create('mlfg6331_64',
		'NumStreams',numLabs,'StreamIndices',labIndex)

s1=
mlfg6331_64 random stream
      StreamIndex: 4
       NumStreams: 256
             Seed: 0
         NormalTransform: Ziggurat

複数のストリームは統計的に独立しているため、シミュレーション精度の検証に使用できます。たとえば独立したストリームの集合は、MATLAB セッション間や別のプロセスで複数回のモンテ カルロ シミュレーションの繰り返しに使用でき、結果の分散を計算できます。このように、複数のストリームは大規模な並列計算に使用できます。

    メモ:   すべての発生器のアルゴリズムが複数のストリームをサポートするとは限りません。発生器のプロパティの概要は、「乱数発生器の選択」の発生器アルゴリズムの表で説明されています。

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