タグ

ブックマーク / marui.hatenablog.com (1)

  • 一様乱数で正規乱数をつくる - 丸井綜研

    先日、学生から「Octaveではrandn()で正規分布に従う乱数が作れるが、C/C++にはそのようなものが用意されていないようで困っている」との相談がありました。聞いてみると、厳密に正規分布に従う必要はなく、ゼロ近傍の発生確率が高く、ゼロから離れるに従って発生確率が低くなればいいとのこと。試行錯誤して、sin(rand())など、乱数を生成した後に非線形の関数で変換してやればなんとかなりそうだ、というアイデアもすでに持っていたので、こんな方法もあるよと、二つの方法を紹介しました。(学生はC++のコードを書いていましたが、ここではMatlabコードで書いています。) まずは一様乱数ふたつをかけ算するもの。これは-log(x)に従う乱数になります。(図の上側パネル参照) N = 10000; x = rand(N,1) .* rand(N,1); hist(x, sqrt(N)); 次に一様

    kiyo_hiko
    kiyo_hiko 2017/10/25
    正規乱数に近い乱数を得る方法。正規乱数そのものはボックス=ミューラー法
  • 1