C言語関係掲示板

過去ログ

No.38. 正規分布の乱数を求める


乱数で各個人の点数を作りたいのですが
そのとき、総数と平均と標準偏差を最初に入力して
それに、依存した乱数を作らなくてはならないのです。
この作り方が分からないので誰か助言願います。


こんにちは、ともじです。

>乱数で各個人の点数を作りたいのですが
>そのとき、総数と平均と標準偏差を最初に入力して
>それに、依存した乱数を作らなくてはならないのです。

どういう風に依存しなければならないのですか。
正規分布になるように乱数を発生させると言うことですか。
タイトルが変わっていますが、ここなんか参考になりませんか。
http://www.cwo.zaq.ne.jp/ryu-to/pia/c/006.htm


>どういう風に依存しなければならないのですか。
出てきた各数の平均や標準偏差が入力した値と同じになるということです。

>タイトルが変わっていますが、ここなんか参考になりませんか。
ありがとうございます。ただ、山形では無くランダムになのでもう少し改良する必要がありそうです。
出来ればそこのところも、よろしくお願いします。m(__)m


>ありがとうございます。ただ、山形では無くランダムになのでもう少し改良する必要がありそうです。
>出来ればそこのところも、よろしくお願いします。m(__)m

問題点がわかっているなら、良く考えればわかると思います。
よろしくお願いします。m(__)mという前にもう少し考えましょうね。


>出てきた各数の平均や標準偏差が入力した値と同じになるということです。

やっぱり、正規分布になるように擬似乱数を発生させると言うことですね。

「C言語によるアルゴリズム辞典」技術評論社 奥村晴彦著 によれば
rnd()を0〜1.00の一様乱数として、

t=sqrt(-2.0 * log(1-rnd()));
u=2*PI*rnd();
r1=t*cos(u);
r2=t*sin(u);

でr1とr2に、平均0、分散1の正規分布する擬似乱数が得られるそうです。

出てきたr1とr2に入力した平均を足し、標準偏差を掛ければ、目的とする
擬似乱数が得られるはずです。
検算は、そのデータから平均と標準偏差を再び求めればいいわけですね。

#いやー、文学部卒の私にはむずかしかった。(^_^;)
#上記の計算で何故正規分布になる擬似乱数が求められるのかは、
#理系の皆さんにお任せします。


すみません、ちょっと修正です。

> 出てきたr1とr2に入力した平均を足し、標準偏差を掛ければ、目的とする
> 擬似乱数が得られるはずです。

出てきたr1とr2に入力した標準偏差を掛け、平均を足せば、目的とする
擬似乱数が得られるはずです。


文型のともじさん、わざわざ、ありがとうございます。
でも、これで、なんとか、出来そうです。
おれからは、教えてっていう前にいろんなサイトを探して
勉強してみたいと思います。
ありがとうございます。


>u=2*PI*rnd();

ところで、この式の「PI」にはどのような値が入るのでしょうか?
考えても分からないもので・・・・
何度もすいません。


PIはmath.hの中で定義されています。

#define PI 3.1415926535897932386

処理系によっては他の定数名を使っている場合もありますので、
undefineが出た場合には、math.hを調べてみてください。

戻る


「初心者のためのポイント学習C言語」 Last modified:2001.8.8
Copyright(c) 2000-2002 TOMOJI All Rights Reserved