擬似乱数
Mathematica には値上に一様分布する擬似乱数を生成するための関数が3つある.
擬似乱数の生成
| RandomReal[range,n], RandomComplex[range,n], RandomInteger[range,n] |
| 指定された範囲にある n 個の擬似乱数のリスト |
| RandomReal[range,{n1,n2,...}], RandomComplex[range,{n1,n2,...}], RandomInteger[range,{n1,n2,...}] |
| 擬似乱数の × ×...配列 |
擬似乱数表の生成
| Out[1]= |  |
| Out[2]= |  |
0と9の間(それぞれを含む)の整数の擬似乱数10個のリストを与える.
| Out[3]= |  |
| Out[4]= |  |
RandomRealとRandomComplexを使うと,任意精度の擬似乱数を得ることができる.
擬似乱数の精度の変更
30桁の実数値からなる乱数を発生させる.範囲を0から1に限る.
| Out[5]= |  |
| Out[6]= |  |
擬似乱数を繰返し発生させると,特定なパターンに従わない「典型的な」,つまり一般的な数列を得ることができる.このような乱数列は各種の計算用途で使われる.
擬似乱数の一般的な用途として,仮定の数値的な判定への応用がある.例えば,2つのシンボル式が数学的に等しいかどうかを判定するとする.これは,「典型的な」数値をシンボル的パラメータに代入し,数値的な2つの結果を比較することで行うことができる.(ただし,数値精度の問題や,多価複素関数を扱った問題では,このような比較の解釈には注意を要する.)
| Out[7]= |  |
乱数を代入すると,この等式が常に
Trueであるとは限らないことが分かる.
| Out[8]= |  |
擬似乱数の他の一般的用途として,確率的現象のシミュレーションやサイズの大きい母集団からの標本抽出がある.Mathematica が数の範囲に対して生成する乱数は,指定された範囲で必ず一様に分布するようになっている.
関数RandomInteger,RandomReal,RandomComplexは他のほとんどの Mathematica 組込み関数と違った特徴を持っている.つまり,使われるたびに潜在的な出力値は違ってくる.従って,これらを計算でを使うと,答は使うたびに違ってくる.
RandomInteger,RandomReal,RandomComplexで得られる数列は厳密には「真の乱数」ではないが,実用上「十分に乱数的」である.乱数列は,特定の「種(シード)」を開始点として,特定の数学アルゴリズムを適用することで生成される.同じシードが与えられたなら,同じ乱数からなる系列が得られる.
Mathematica が起動されたときの時間が(秒以下の精度で記録される)読み込まれ,擬似乱数ジェネレータのシードとして保存される.このため,Mathematica を別に起動すれば,擬似乱数列はほとんどいつでも違うものになる.
ここで,毎回必ず同じ乱数系列を使いたいのであれば,同じシードをその都度添加する.このように特別にシードの添加を行うにはSeedRandomを使う.
擬似乱数ジェネレータのシード
| Out[10]= |  |
同じシードを再添加する.すると,前と同じ乱数列が得られる.
| Out[11]= |  |
RandomInteger,RandomReal,RandomComplexが呼び出されるたびに,それに対応する擬似乱数ジェネレータの内部状態は変わる.従属的な計算でこれらの関数を続けて呼び出すと,主計算に返される数に影響が出るかもしれない.これを防ぐには,BlockRandomの内部で計算を実行することにより関数の使用による影響を局所的なものにするとよい.
RandomInteger,RandomReal,RandomComplexを使う効果を局所化する
BlockRandom内部の計算を局所化することで,リストが生成された後に,擬似乱数ジェネレータの内部状態を復元することができる.
| Out[12]= |  |
多くの分野で,非一様分布からの乱数が必要とされる.Mathematica には多くの分布が組み込まれている.RandomIntegerやRandomRealに対する範囲の代りに適切なパラメータで分布を生成することができる.
| RandomInteger[dist], RandomReal[dist] |
| 乱数分布 dist により分布した擬似乱数 |
| RandomInteger[dist,n], RandomReal[dist,n] |
| 乱数分布 dist により分布した n 個の擬似乱数のリスト |
| RandomInteger[dist,{n1,n2,...}], RandomReal[dist,{n1,n2,...}] |
| 乱数分布 dist により分布した擬似乱数の × ×...配列 |
非一様分布による擬似乱数の生成
平均3のポアソン分布で分布する12個の整数を生成する.
| Out[13]= |  |
| Out[14]= |  |
平均2,標準偏差4の正規分布により分布した5つの高精度の実数を生成する.
| Out[15]= |  |
リストからの選択するためにも,擬似乱数を使うことができる.RandomChoiceは代替付きで選択し,RandomSampleは代替なしで選択する.
無作為の選択
| Out[16]= |  |
選択肢の中の少なくとも1つは出力に繰り返される確率が非常に高い.これは,要素が選ばれると,それが直ちに補充されるからである.しかし,実際の要素の集合から選ぶ場合は,補充はない.
0から9までの中から,補充なしで10個抽出する.この結果,数のランダムな組み合わせとなる.
| Out[17]= |  |
| Out[18]= |  |