rand
乱数生成
呼び出し手順
r = rand() r = rand(m1,m2,...) r = rand(m1,m2,...,key) r = rand(x) r = rand(x,key) s = rand("seed") rand("seed",s) rand(key) key = rand("info")
引数
- m1, m2, ...
- 整数, ランダム行列 - rの大きさ.
- key
- 文字列, 乱数の分布 (デフォルト - key="uniform"). 利用可能な値は- "uniform"および- "normal"です.
- x
- 実数または複素数の行列. 実数または複素数の内容とその次元のみが処理されます. 
- r
- m1 x m2 x... ランダムなエントリを有するdoubleの実数配列. 
- s
- 1行1列double行列, 整数値, 正, シード (デフォルト - s=0).
説明
この関数の目的は,実数または複素数のランダムなエントリを有するdoubleの行列 を返すことです. 入力引数に依存して,この関数はdoubleのランダム行列を返したり,または, 乱数の分布を取得または設定したり, 乱数生成器のシードを取得または設定したりできます.
乱数生成器
- r=rand()
- 乱数1個を有する1行1列double行列を返します. 
- r=rand(m1,m2)
- は, 次元が - m1行- m2列のランダム行列です.
- r=rand(m1,m2,..,mn)
- は,次元が - m1x- m2,.. x- mnのランダム行列を返します.
- r=rand(a)
- は,aと同じ大きさのランダム行列を返します. - aが実数行列の場合,- rは実数,- aが複素数行列の場合,- rは複素数です.
乱数の分布の変更
入力引数key は乱数生成器の分布を設定します.
- rand("uniform")
- 乱数生成器が一様分布の乱数生成器に 設定されます.乱数は[0,1)の範囲の一様分布となります. 
- rand("normal")
- 乱数生成器がガウス乱数生成器(平均0,分散1)に設定されます. 
- key=rand("info")
- カレントの乱数生成器の型("uniform" または "normal")を返します. 
シートの取得または設定
乱数生成器のシードを取得または設定することが可能です.
- s=rand("seed")
- カレントのシードの値を返します. 
- rand("seed",s)
- シードを - nに設定します. (デフォルトでは, 最初のコールで- s=0).
例
以下の例では, 様々な分布を有するランダムdoubleを生成します.
// Get one random double (based on the current distribution) r=rand() // Get one 4-by-6 matrix of doubles (based on the current distribution) r=rand(4,6) // Get one 4-by-6 matrix of doubles with uniform entries r=rand(4,6,"uniform") // Produce a matrix of random doubles with the same size as x x=rand(4,4); r=rand(x,"normal") // Produce a 2-by-2-by-2 array of random doubles r=rand(2,2,2)
以下の例では, randにより生成された
            数の分布を変更します.
            まず正規分布を作成した後, 一様分布 [0,1)を作成します.
// Set the rand generator to normal rand("normal") r=rand(4,6) // Get the current distribution key=rand("info") // Set the rand generator to uniform rand("uniform") r=rand(4,6) key=rand("info")
以下の例では,正規分布の2行3列のdouble複素数行列を作成します.
// Produce a 2-by-3 matrix of random complex doubles x=rand(2,3)+%i*rand(2,3) // Produce a matrix of random complex doubles with // normal entries and the same size as x r=rand(x,"normal")
以下の例では,
            randにより生成された一様分布の数値をプロットします.
r=rand(1000,1,"uniform"); scf(); histplot(10,r); xtitle("Uniform numbers from rand","X","Frequency")
以下の例では,
            randにより生成された標準正規分布の数値をプロットします.
予測可能または予測困難な数を取得
"uniform" 擬似乱数生成器は, 範囲[0,1)において独立して一様分布する 数を再現することを目的とする決定論的数列です.
再現可能なシミュレーションを行うには,
            数列がセッション間で同じであるように,生成器の初期シードをゼロにします.
            言い換えると,
            rand()により生成される最初の数は,
            常に 0.2113249,  0.7560439, ... となります.
いくつかのケースでは,
            より予測しくい数列を出力するように生成器のシードを初期化したい場合があります.
            この場合,以下のようにgetdate関数の出力で
            初期化することができます:
n=getdate("s"); rand("seed",n);
生成器
"uniform" 乱数生成器は
            "Urand, A Universal Random Number Generator" において
            Michael A. Malcolm, Cleve B. Moler, Stan-Cs-73-334, January 1973, Computer
            Science Department, School Of Humanities And Sciences, Stanford University
            により記述されています.
これは,以下の形式の線形共役生成器です :
x = (a x + c) mod M
ただし,定数を以下に示します
| a = 843314861 | 
| c = 453816693 | 
| M = 231 | 
著者によれば,この生成器はフルレングス生成器であり, つまり,周期はM=231=2147483648です.
"normal" 乱数生成器は Box-Muller 法に
            基づいており, 一様乱数のソースは Urand です.
生成器の統計的品質
より長い周期とより良い統計的特性を有するという意味で,
            より優れた乱数生成器が
            grand関数で利用可能です.
            乱数の品質が問題となる場合,代わりに
            grand 関数を検討するべきです.
            更に,grand にはより多くの機能があります.
| Report an issue | ||
| << prbs_a | random | sample >> |