- ベストアンサー
偏りのある乱数のアルゴリズム
偏りのある乱数のアルゴリズム(コード)を教えてください。 ただし、中心極限定理などに見られるような「中心にのみ偏る」乱数ではなく、「任意の位置を中心に偏る」乱数です。例えば、範囲を0.0<1.0、任意の位置を0.75とした場合の分布グラフを見ると、0.75がカーブの頂点となります。 また一方で、複数の偏りが見られる乱数のアルゴリズムも知りたいです。カーブが心電図のように複数見られる乱数です。ビットマップ上にプロットすると、部分的に点の集合が形成されるようなものが理想的です。 ※プログラミング言語・精度・速度は不問。本人数学に関しては素人です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
専門家でないので適切なことを言えるかどうかわかりませんが、 偏りの中心が本当に任意であれば、ただの平べったい乱数に戻ってしまいますよね。 ご質問は、偏りの中心がどこかにあることを想定しているので、まずは、1回乱数を発生させるか、勝手に意図的に決めるかして、偏りの中心を決めないといけませんね。 さらには、偏ると言っても、偏り方に無限の種類がありますから、例えば、ガウス分布とかポワッソン分布とかの類の確率分布の情報を固定して与えなければ、やはり平べったい乱数になってしまいますよね。 というわけで、 1.偏る場所や個数を決める、あるいは発生させる 2.偏りの程度や形を定義する分布(関数)の式の中に、普通の乱数を代入する。 あるいは、偏る場所が複数あるような分布にしたければ、上記の分布(関数)を複数計算して、それらの和をとってもよいと思います。 確率(頻度)を規格化したければ、足した関数の個数で割り算すればよいでしょう。 例えば、心電図のごとく、範囲内に2つピークがあるような分布ですと、もっとも簡単な方法は、ピークの場所だけが異なる2つのガウス分布の足し算でしょう。 他の波形にしたければ、分布(式)を取り替えればよいです。 以上は一次元の話なので、二次元で、ある点の回りに分布をつくりたい場合は、上記に対して従来の中心分布を応用した考え方になるでしょう。 答えになっているかどうかわかりませんが、私が「適当にこんな感じの作って」と仕事を頼まれれば、とりあえず、こんな感じでやります。 ・・・って、そもそもご質問の目的・用途は何なのか、ちょっと気になりますが。
その他の回答 (1)
与えられた確率分布で分布するような乱数を作りたいのであれば、 参考URLのような方法があります。
お礼
ぅぅ、書いてある事は何となくわかるのですが、数式が難しすぎて私には理解できませんでした;;
お礼
丁寧なご説明、ありがとうございます。まだよくわからない箇所もあるので、勉強不足を痛感しています…。 でも、一回で結果を出そうとせず、プロセスを複数回に分ければ、意外と簡単にできそうな気もしてきました。