Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

RandStream

说明

RandStreamは,指定した疑似乱数発生器アルゴリズムを使用して乱数ストリームを作成し。

MATLAB®の疑似乱数は、1 つ以上の乱数ストリームから生成できます。乱数の配列を生成する最も簡単な方法は、関数兰德兰德i兰德n兰德permを使用こと。これらのの关数,,,,グローバルグローバルストリームとして知られている、一様分布の乱数の同じストリームに依存します。グローバル ストリームを変更するのにRandStreamを使用が,使用は必须ませ。。。RandStreamを使用てストリーム作成する场合,randstream.setglobalstreamを使用して、それをグローバル ストリームにすることができます。しかし、関数RNGの方よりシンプルインターフェイス,ほとんどユースケース十分なグローバルストリームストリームを作成作成。。。

また,RandStreamを使用してストリームを作成した後、兰德兰德i兰德n,または兰德permを使用して、それらのストリームから乱数を生成することもできます。生成される乱数は、グローバル ストリームまたはその他のストリームから取得される乱数とは別のものになります。詳細については、オブジェクト关数を参照してください。

作成

次の単一の乱数ををにしします。复数の独立ししたストリームをを同时ににに作成作成randstream.createを使用します。

说明

s= randstream(Gentypeは,Gentypeで指定された一様疑似乱数発生器アルゴリズムを使用する乱数ストリームを作成します。

s= randstream(Gentype,,,,名称,价值は,,つ以上オプションのの名称,价值のペアを使用て,ストリームプロパティ制御制御します。

入力引数

すべて展開する

または器乱数発生器の名前示すベクトルベクトルまたはまたはまたはまたはスカラースカラー指定ししますますmatlabは。。。。。ははははははははははいくついくつかかののの発生発生発生器器アルゴリズムアルゴリズムをを提供提供提供ししプロパティ概要示します。一部の発生アルゴリズム,,ストリームおよびおよびサブサブストリームストリームストリームによるによる相互にに独立した一连一连の乱数乱数のの作成を乱数ストリームのと管理を参照してください。

名前 発生器 复数のとサブストリームサポートサポート 高精度な場合の近似周期
'MT19937AR' メルセンヌ・(matlab起动起动に既定ストリーム使用) なし 219937-1
'DSFMT19937' SIMD 指向高速メルセンヌ・ツイスター なし 219937-1
'MLFG6331_64' 乘法ラグ発生器 あり 2124((長さが 272の251个の)
'mrg32k3a' 结合多重再帰発生器 あり 2191((長さが 2127の263个の)
'Philox4x32_10' Philox 4x32発生器10ラウンド あり 2193((長さが 2129の264个の)
'threefry4x64_20' 三fry4x64発生器20ラウンド あり 2514((長さが 2258の2256个の)
'shr3cong' 線形合同法発生器を組み合わせたシフトレジスタ発生器 なし 264
'swb2712' 修正桁下げ付き減算発生器 なし 21492
'MCG16807' 乘算合同法発生器 なし 231-2
名前と値のペアの引数

オプションの名称,价值の引数ペアをコンマ区切りで指定します。Nameは引数名,价值は対応するです。Nameは引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueNのよう复数名前とのペア引数をの顺序で指定できます。

例:s = randstream('MT19937AR','seed',15,'stransTransform','polar')

乱数シード。'种子'と非負の整数または'shuffle'で構成されるコンマ区切りのペアとして指定します。シードは、アルゴリズムが乱数を生成する開始点を指定します。'shuffle'は,現在の時刻に基づいてシードを作成します。整数を指定する場合、0 ~ 232- 1の値ばません。

MATLAB の起動時またはシミュレーションの実行前にストリームを作成する場合、発生器のシードを初期化手順として指定します。ストリームを再現するには、毎回同じシードを使用します。複数のシードを使用すると、複数の乱数列が作成されますが、異なる乱数列が統計的に独立する保証はありません。それが重要な状況においては、Substreamプロパティを指定か,randstream.createを使用して統計的に独立したストリームを作成してください。

兰德nを使用して乱数ストリームから正規分布した乱数を生成する変換アルゴリズム。'NormalTransform'およびアルゴリズム名'Ziggurat''Polar',または'Inversion'のいずれかで構成されるコンマ区切りのペアとして指定します。詳細については、乱数ストリームのと管理を参照してください。

プロパティ

すべて展開する

乱数ストリームsは,その動作を制御するプロパティをもっています。p = s.Propertyを使用てプロパティに,,s。Property = pを使用してプロパティを変更します。ストリームsのすべてのプロパティを保存するにはa = get(s),复元するはset(s,a)を使用でき。RandStreamのプロパティ次のに示します。

このプロパティ読み取り専用です。

ストリームが使用する乱数発生器アルゴリズム。発生器とそのプロパティの概要については、発生器アルゴリズムの表参照して。。

すべてののが复数のストリームストリームすると限りませません。。统计统计的的的ににしした复数复数のののストリームストリームストリームととサブ

データ型:char

このプロパティ読み取り専用です。

ストリームの使用れる乱数シード。整数として返され。。

データ型:uint32

このプロパティ読み取り専用です。

现在の作成たグループにある数正の整数としてれます。

データ型:uint64

このプロパティ読み取り専用です。

現在のストリームと共に作成したストリームのグループにおける現在のストリームのインデックス。正の整数として返されます。

データ型:uint64

発生器の現在の内部状態。整数のベクトルとして指定します。状態ベクトルのサイズは、発生器アルゴリズムによって決まります。このプロパティを設定する場合、S.STATEに割り当てる値は、あらかじめS.STATEから読み取っ値でなけれなりません。状态プロパティから読み取らストリームを初期のに戻すには,resetを使用します。状态プロパティをて器の状态保存し复元ことで,乱数乱数列をを再现でき

内部状态により乱数ストリームsによって生成される乱数列が決まります。1 つのストリームから乱数を生成するたびに、ストリーム内の発生器の状態が変化し、統計的に独立同一分布する連続値が生成されます。

メモ

乱数ストリームの状態の復元、またはストリームのリセットは、ストリームの結果を再現する場合にのみ行ってください。

データ型:uint32

现在设定てストリームのストリームのインデックス。

1つの,,,つのつの乱数ストリームからの异なる异なる作成作成作成できできますますます。。异なる异なるストリームストリームから生成生成生成されるれるれる値は,,相互相互相互ににしししててます,発生器アルゴリズムの表参照して。。

データ型:double

兰德nを使用して正規分布の疑似乱数値を生成する変換アルゴリズム。

データ型:char

sが対称疑似数値を生成するかどうどうかか。。。真的((1)または错误的((0)として指定し。対称値は,生成される一様分布の既定の疑似乱数値を 1 から減算した値です。

データ型:逻辑

sが完全精度を使用して値を生成するかどうか。逻辑真的((1)または错误的((0)として指定し。FullPrecision错误的の,器は,ビット数疑似乱を高速に生成するする。。。

データ型:逻辑

オブジェクト关数

既定では,兰德などの乱数発生関数はグローバル乱数ストリームを使用します。異なるストリームを指定するには、RandStreamオブジェクトを作成し、それを最初の入力引数として渡します。たとえば、SIMD 指向高速メルセンヌ・ツイスターを使用して、乱数の 4 行 1 列のベクトルを作成します。

s= randstream('DSFMT19937');r = rand(s,4,1);

これらの关数,RandStreamオブジェクトを受け入れ。

兰德 一様分布乱数

サポートさ构文次のです。ここで,sRandStreamオブジェクトです。

x = rand(s)x = rand(s,n)x = rand(s,sz1,...,szn)x = rand(s,sz)x = rand(s,typeName)
他の引数の详细,,兰德兰德i,および兰德nを参照してください。

兰德i 整数の一様分布の疑似乱数
兰德n 正規分布した乱数
兰德perm 整数のランダム置換

サポートさ构文次のです。ここで,sRandStreamオブジェクトです。

p = randperm(s,n)p = randperm(s,n,k)
他の引数の详细,,兰德permを参照してください。

RandStreamのそのオブジェクト关数は,以下あり。。。

randstream.create 统计的独立し乱数ストリームを作成
randstream.list 乱数発生器アルゴリズムをリスト
RandStream.getGlobalStream 现在の乱数ストリームを取得
randstream.setglobalstream グローバル乱数ストリーム设定
reset 乱数ストリームのリセット

すべて折りたたむ

simd指向高速ツイスターを使用し,ストリームを作成し。。

s= randstream('DSFMT19937'
S = DSFMT19937随机流种子:0 normalTransform:Ziggurat

ストリームをし,ををををつつし。。。

兰德(S,1,5)
ans =1×50。0306 0.2131 0.2990 0.3811 0.8635

現在の時間に基づく発生器のシードを使用して、乱数ストリームを作成します。この操作は、MATLAB® が生成する乱数の統計的な特性に影響を与えることがあるため、MATLAB セッションごとに何度も実行することは望ましくありません。

s= randstream('MT19937AR',,,,'种子',,,,'shuffle');

ストリームを使用して、0 ~ 1 の範囲で一様分布する乱数値をもつ 3 行 3 列の行列を作成します。

x1 = rand(s,3)
x1 =3×30.3923 0.2800 0.4291 0.3018 0.6108 0.1256 0.0387 0.5565 0.4229

ストリームから别乱数をををつつ作成し。。

x2 = rand(S,1,5)
x2 =1×50.7305 0.1621 0.9121 0.9031 0.4001

シード0ののストリームをします。。

s= randstream('MCG16807',,,,'种子',0);

5 5つを乱数生成します。から数値を生成ににに,,発生発生器器器器アルゴリズムはは,次にに生成生成ささされるれる数値ががが前前のののととと

u1 = rand(S,1,5)
u1 =1×50.2190 0.0470 0.6789 0.6793 0.9347

発生器の現在の状態を保存します。別の乱数を 5 つ生成します。

SAVEDSTATE = S.State;u2 = rand(S,1,5)
u2 =1×50.3835 0.5194 0.8310 0.0346 0.0535

5つのつののを再现する,発生器状态状态を保存されれた状态ますますますます

s.state = savedstate;u3 = rand(S,1,5)
u3 =1×50.3835 0.5194 0.8310 0.0346 0.0535

発生ののは,から特定结果をする场合にのみ行っ行っ。。。

3がのストリーム作成しますストリームを使用てて乱数乱数乱数乱数乱数をををををををつつつ

stream = RandStream('DSFMT19937',,,,'种子',3);z = rand(流,1,8)
z =1×80。2550 0.8753 0.0908 0.1143 0.3617 0.8210 0.8444 0.6189

乱数ストリームを、シードが 3 である初期状態にリセットします。生成された 8 つの乱数を再現します。

重置(流,3);z = rand(流,1,8)
z =1×80。2550 0.8753 0.0908 0.1143 0.3617 0.8210 0.8444 0.6189

ストリームのシードをリセットすると、他のストリームにより独立性を無効にできます。ストリームのリセットは、ストリームの結果を再現する場合にのみ行ってください。

乱数ストリームを 2 つ作成します。1 つ目のストリームは、randstream.setglobalstreamを使用てグローバルストリーム设定します。

globaltream = randstream('MLFG6331_64',,,,'NormalTransform',,,,'Polar'
GlobalStream = MLFG6331_64随机流种子:0 normalTransform:极性
randstream.setglobalstream(GlobalStream);

现在のストリームをするには,RandStream.getGlobalStreamを使用します。

RandStream.getGlobalStream
ans =mlfg6331_64 random stream (current global stream) Seed: 0 NormalTransform: Polar

新规作成たストリームとは别に动作するするするつ目つ目のストリーム,,myStreamを作成し。

mystream = randstream('DSFMT19937',,,,'NormalTransform',,,,'Inversion'
mystream = dsfmt19937随机流种子:0 normalTransform:倒置

グローバルストリーム乱数ををつ生成ます。作成たたストリームストリームmyStreamから乱数ををつ生成ます。。

兰德n(1,3)
ans =1×30。8715 1.0588 -0.6956
兰德(Mystream,1,3)
ans =1×3-1.8723 -0.7956 -0.5273

关数兰德兰德n兰德imyStreamなしで呼び出した場合、グローバル ストリームから取得され、myStreamありで场合のに影响をませ。。。

1つの,,,,つのつの乱数ストリームのサブストリームを作成作成できできできますます。。。异なるストリームストリームから生成生成ささされるれる値値

たとえば、結合多重再帰発生器を使用して、乱数ストリームを作成します。

s= randstream('mrg32k3a');

あるストリーム特定サブに再配置には,そのSubstreamプロパティ设定ますたとえば,ループでを生成しますますのの各各反复反复反复のののの前前,,乱数乱数ストリームストリームストリームストリームをを别别别别のののサブサブストリームストリームストリームののの最初します。

为了i = 1:3 s.substream = i;z = rand(s,1,5)结尾
z =1×50.7270 0.4522 0.9387 0.2360 0.0277
z =1×50。5582 0.8527 0.7733 0.0633 0.2788
z =1×50.1666 0.2924 0.7728 0.8391 0.5107

5 つの乱数の 2 つ目のセットを再現するには、ストリームを対応するストリームに再配置します。

s.substream = 2;z = rand(s,1,5)
z =1×50。5582 0.8527 0.7733 0.0633 0.2788

详细

すべて展開する

R2008b で導入