DIME : CreateGaussian / help
く り え い と が う し あ ん
C r e a t e G a u s s i a n
用途/擬似乱数・数学計算補助
機能について解説
正規分布(ガウス分布)する正規乱数を発生させて度数分布( Frequency Distribution )を得ます。
パラメータ 1 〜 4 を使った計算結果をエクステ内部の配列へ代入、その後、パラメータ 3 の値を倍加し、これを配列要素数として CF2.5 で返り値として受け取ります。
この返り値を利用して CF2.5 内部でループを回し、ヒストグラムを作るなどして正規分布を可視化できます。
計算コストは比較的高く、ゲーム用途ではリアルタイム計算させながら利用するよりも任意のタイミングで計算結果を一度事前に求めておいて、以降はエクステが保存している配列データへループを回して値を参照・取得するのが計算コストも安上がりで良いと思います。
若干特殊な手順で操作して値などを得ます。パラメータの値決定には数学的な前提知識が必要、配列の値を参照するためには CF2.5 側で変数操作・高速ループ処理などが手順として求められます。具体的な使い方に関してはサンプルファイルをご覧ください。
動作サンプル # 1:BoxMuller
正規乱数とは
ガウス分布に従う乱数のことです。
ガウス分布( Gaussian distribution )は正規分布( Normal distribution )とも呼ばれ、散布図をグラフ化すると左右対称なベル・カーブっぽい形状となるため正規分布曲線のことをベル・カーブ(鐘形曲線)とも呼びます。
一般的に知られる乱数というものは一様乱数( uniform random numbers )であり、出現の確率が等しい乱数のことを指します。
例えばサイコロをふって出る目が一様乱数です。この時出てきたサイコロの目を x1、x2 へ記録していったとします。10000 回程サイコロを振って出たサイ目は標本として N 個のデータの標本平均に利用されます。しかしこれだけでは数の分布がまだ分かりません。
分布を知りたい場合、中心極限定理では標本の分布に分散が存在するのなら標本平均と真の平均との誤差は近似的に正規分布に従うことが導出されます。正規分布とは平均値の周囲に不規則な分布(バラツキ)をする確率現象のことです。この正規分布(ガウス分布)に従う乱数が「正規乱数」と呼ばれます。
ヒストグラム( Histogram : 度数分布図 ) はデータの分布状況(バラツキ)を視覚的に認識する(目で見る、可視化する)ために使われるグラフのことで、柱図表、度数分布図、柱状グラフとか別名が複数あります。
パラメータ一覧
- 標準偏差
( SD = Standard Deviation )
- 動作オプション
(倍率の変更など)
- 平均
(倍化され返り値、配列要素数となる)
(転じて CF2.5 側ではループ数)
- 計算コスト
(標本の数)
1:標準偏差値が小さい場合、平均値付近にデータが集中するため中央付近で先の尖ったピークの高いカーブを作ります。 標準偏差値が大きい場合、広い範囲にデータが散布されるため低い山・なだらかなカーブを作ります。 代入する値は Float が表現できる範囲内ですが、まずは 1.0 〜 5.0 くらいで試せば良いと思います。
2:エクステの動作を決定するオプションです( 0 〜 x )
3:平均は配列要素数(ループ回数)としてパラメータから入力された値が倍加されて CF2.5 側へ返って来ます。型は INT なので少数部は無視されます。 例えば 10.2 と代入した場合は 20 となって CF2.5 に値を返します。この返り値はエクステ内部の配列の最大要素数を表しているため、この数をもとに CF2.5 側でもループを回すと度数分布に沿った配列値が得られるという仕組みです。大きすぎる値、小さすぎる値は代入しても無視され、エクステ内部の最小値・最大値へ自動的に置き換えられます。
4:計算コストは 100 〜 10000 程度で主に実験しています。型は INT なので少数部は無視されます。
その他:受け取った値をヒストグラムとして画面表示するためには、値に対してスケール変更を行う必要性のある場合があります。パラメータ 2 を使って予めスケール変更も指定できます。もしくは変数などであとから各自調整してご利用下さい。
注意事項
- パラメータは 4 つ必要です
- 最初にエクスプレッションとして利用します
- 計算コストを高くしても用途的には無駄となります
- 計算で得られた度数分布は配列でエクステ側に保存されています
- 配列から値を取得するときは GetFD ( Frequency Distribution ) 命令を使って配列要素を指定します
エクスプレッション NewGaussian( Float, INT, INT, INT // 標準偏差、実行オプション、平均(二倍されて返り値)、計算コスト );
END