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