主要内容

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

RandStreamを使用したグローバルストリームの管理

関数兰德randn兰迪,およびrandpermは,“グローバルストリーム”と呼ばれる,基礎となっている乱数ストリームから乱数を引き出します。グローバルストリームはRandStreamオブジェクトです。関数rngを使用すると,グローバルストリームを簡単に制御できます。より包括的な制御では,RandStreamクラスによってグローバルストリームから別個のストリームを作成し,グローバルストリームのハンドルを取得して,乱数発生を制御できるようになります。

rngを使用して,乱数発生器を既定のシード(0)とアルゴリズム(メルセンヌ・ツイスター)に設定します。発生器の設定を保存します。

rng (“默认”s = RNG
s =结构体字段:类型:'twister'种子:0状态:[625x1 uint32]

0 ~ 1の間の一様分布の乱数値からなる1行6列の行ベクトルを作成します。

x =兰德(1,6)
x =1×60.8147 0.9058 0.1270 0.9134 0.6324 0.0975

RandStream.getGlobalStreamを使用してグローバルストリームのハンドル,すなわち,兰德が乱数の生成元とする現在のグローバルストリームを返します。RandStream.getGlobalStreamを使用してグローバルストリームのハンドルを取得すれば,rngを使用してグローバルストリームに加えた変更を確認できます。

globalStream = RandStream.getGlobalStream
globalStream = mt19937ar随机流(当前全局流)种子:0 NormalTransform: Ziggurat

発生器のシードとアルゴリズムを変更し,新しい乱数行ベクトルを作成します。兰德が乱数の生成元とする,現在のグローバルストリームを表示します。

rng (1,“philox”) xnew = rand(1,6)
xnew =1×60.5361 0.2319 0.7753 0.2390 0.0036 0.5262
globalStream = RandStream.getGlobalStream
globalStream = philox4x32_10随机流(当前全局流)Seed: 1 NormalTransform: Inversion

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

Rng (s) xold = rand(1,6)
xold =1×60.8147 0.9058 0.1270 0.9134 0.6324 0.0975

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

myStream = RandStream (“dsfmt19937”
myStream = dsfmt19937随机流种子:0 NormalTransform: Ziggurat
r =兰德(myStream 1 6)
r =1×60.0306 0.2131 0.2990 0.3811 0.8635 0.1334

myStreamを最初の入力引数として関数兰德を呼び出した場合,myStreamから数値が引き出され,グローバルストリームの結果には影響しません。

myStreamをグローバルストリームに設定する場合,オブジェクト関数RandStream.setGlobalStreamを使用できます。

RandStream.setGlobalStream(myStream) globalStream = RandStream.getGlobalStream
globalStream = dsfmt19937随机流(当前全局流)种子:0 NormalTransform: Ziggurat

多くの場合,グローバルストリームの制御には関数rngだけで足りますが,RandStreamクラスを使用することで,正規乱数値に使用されるアルゴリズムの選択など,いくつかの高度な機能を制御できます。

たとえば,randnを使用する際に,RandStreamオブジェクトを作成し,正規分布の疑似乱数値を生成するための変換アルゴリズムを指定します。既定の金字形神塔変換アルゴリズムの代わりに极地変換アルゴリズムを使用して,正規分布の疑似乱数値を生成します。

myStream = RandStream (“mt19937ar”“NormalTransform”“极地”
myStream = mt19937ar随机流种子:0 NormalTransform: Polar

myStreamをグローバルストリームとして設定します。グローバルストリームから正規分布の6つの乱数を作成します。

RandStream.setGlobalStream (myStream) randn (1,6)
ans =1×60.2543 -0.7733 -1.7416 0.3686 0.5965 -0.0191

参考

|

関連するトピック