• 締切済み

規則に従った乱数

一様乱数を発生させるプログラムはネット上でも入手できます。ある種の確率密度分布に従った乱数を発生させるにはどうしたらいいでしょうか。 例えば0から1の乱数ですが、平均が0.5で分散が0.2のガウス分布に従った乱数を発生させるとしたら0.5に近いところの値が多く出て、0.9のあたりはあまり出ないということになります。そういう乱数です。 そういうものを乱数というのかどうかわかりませんが。 しかし、物理現象は何らかの分布に従う乱数のようなものと考えることができるのではないでしょうか。 よろしくお願いします。

みんなの回答

回答No.3

#2さんを支持します。 ある確率密度関数や確率質量関数に従う乱数というのは、 ある母集団からのサンプリングを模擬するもので、 物理現象を観測する代わりに モンテカルロ・シミュレーションとして用います。 その乱数の生成方法ですが、 通常は、逆関数法。注意が必要なのは、密度関数・質量関数ではなく、 累積分布関数の逆関数を求めて用いることです。 累積分布関数が陽に求められないようなケースでは、 フォンノイマンの棄却法を使います。 ちょっとコーディング(プログラムを書く)しなければなりませんが 数行です。

skmsk19410
質問者

お礼

解答有難うございます。 累積分布関数は与えられた確率密度関数pの積分ということでしょうか。例えば[0<x<a]が考える変数の最大のレンジで、pをゼロからxまで積分するというものです。ゼロからaまで(すなわち全区間)積分したら1になるということと、累積なので単調変化(増加とか減少)しかしないので[0,1]の範囲で乱数を発生したらそれに対応した値が1つ決まる(1価)となるということです。その場合、逆関数を定義する必要がありますね。これが陽に決まらない場合、”フォン・ノイマンの棄却法”を使うわけですか。 これはどうでしょうか。確率密度関数pの積分が求まらないのでモンテカルロ法で数値的に計算する。関数形を求めるとい意味ではなく、具体的な数値にしておきます。P(0),P(x1),P(x2)....P(a) このデータがあると、Pの一様乱数を発生させてP→xを求めることもできると思います。単調変化ですから。 具体的な関数形でなく、離散近似計算ですから誤差もある程度含みますが。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.2

正規分布に従う擬似乱数の生成方法を知りたいということですか? いろいろな方法がありますが、例えば、ボックス=ミュラー法 http://ja.wikipedia.org/wiki/%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%EF%BC%9D%E3%83%9F%E3%83%A5%E3%83%A9%E3%83%BC%E6%B3%95 あるいは、任意の確率密度関数に従う擬似乱数を生成する方法として、逆関数法([0,1]の一様分布乱数に累積分布関数の逆関数を適用する)、やフォンノイマンの棄却法、などがあります。

skmsk19410
質問者

お礼

早速の回答有難うございます。整理して考えたいのですが、発生確率Pに対する変数xがわかったとします。これが逆関数ということかと思います。普通は変数xの発生確率Pを求めるものだから向きが逆という理解です。 では、発生確率Pは0=<P<=1であり、ここを一様乱数で発生させる。そしてPの値に応じたxを求めれば、それがその確率分布に応じた変数xであり、あとは1000でも10000でも発生させればいいということでしょうか。 累積分布関数というのは確率密度関数の積分のようなものでしょうか。超過確率分布というようなものでしょうか。どうでしょうか。 少しそれてしまいますが、このやり方(確率密度関数が規定された乱数)で100個の乱数を発生させてその一位の値を調べるとします。それを100回やって平均をとると100回中の1位の平均が取れると思います。そのようなものはある確率密度関数に従うと決めた関数の順序統計というものなのかなと思いますが、どうでしょうか。もともとの疑問の原点は順序統計とはなにかということだったのですが。 よろしくお願いします。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

一般論的には, 分布関数の逆関数で一様乱数を変換すればいい. でも, ガウス分布ていどならちょっと探せばいくらでも見付かるんじゃないかな?

関連するQ&A