人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

プログラムで正規乱数が必要なのですが、計算方法に苦戦しています。

ボックスミューラー法で任意の平均と分散の乱数を取得するところまではできたのですが、randomN(平均、分散)ではなく、randomN(最小、最大)で計算できるように、区間[0,1]の正規分布を返すようにしようとするととたんにお手上げです。

極限定理を用いれば簡単なのですが遅くなってしまうので、区間[0,1]をはみ出る値が十分無視できる程度の精度でなんとかボックスミューラー法で計算をしたいのです。

数学が弱いので物凄くアホなことを聞いてるのかもしれませんが、どなたか宜しくご教授お願いします。

●質問者: vas-animatum
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:プログラム ボックス ミュー 乱数 定理
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● shampoohat
●25ポイント

http://www.hatena.ne.jp/

はてな

「正規分布に従う乱数」であれば、[0,1]をはみ出ないのはありえないので、Cで言えば


double random_wrap() {

doble n;

while( (n=randomN(最小,最大))<0 || n>1 ) {

n=randomN(最小,最大);

}

return n;

}


みたいに、「大凶ならもういちどおみくじを引きなおす」形にしてしまうのが、ad hoc ですが無難かと。

◎質問者からの返答

ありがとうございます。

やっぱり、適当な部分で切るしか方法がないですよね。

平均0、分散1だと、プラマイ4あたりで切って正規化するのが吉でしょうか。


2 ● ichibatomo
●25ポイント

http://cgm.cs.mcgill.ca/~luc/rnbookindex.html

web上では”Non-Uniform Random Variate Generation”, の著者Luc Devroye(1986)が原稿を載せていて, chapter_five.pdf のp235(30 of 40)にご存知のBox-Muller法と関連する生成方法の説明があります.


お尋ねの問題は区間[最小, 最大]を台(support)に持つ1次元のtruncated normalに従う(準)乱数の生成ということでしょうか. 同じくダウンロードできるchapter_two.pdfのp39(13 of 56)の問題10にtruncated distributionの一般的な生成方法の説明があります. この場合,裾確率での誤差を小さくするには正規分布の累積分布関数の逆関数の近似を良くしなければいけないでしょう. この方法はBox-Muller 法とは異なります. Box-Muller法をすこし変更してtruncated normalを発生できるかどうかは自明ではないと思いますが,じっくり考えるとできるのかもしれません.


計算を速くすることに主眼を置くならば, truncated normalをbeta分布で近似すればよいかもしれませんが,アイデアだけで近似の精度など計算していないので不確かです.


もし問題が多次元でのことであって, 区間[最小,最大] x ... x [最小, 最大]をsupportにもつk次元のtruncated normalに従う準乱数の発生となると, 問題が込み入ってきますね. 安易な考えはacceptance-rejection samplingの考えに従ってサンプリングするのでしょうか. それはおっしゃっている「極限定理を用いれば簡単なのですが遅くなってしまうので」ということでしょうか. 同じページからはchapter_four.pdfに若干の説明があるようです.

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ