32.正規分布

こんな乱数が欲しい!

AS3ならでは、というお話でもないのですが、、、

ASをいじっていると、たまに平均がμ、標準偏差がσになる乱数を得たいって時があるでしょ?

え?ない?私はあるんですっ!

ということで、ここではそういう乱数を得る方法をメモします。

正規分布って何だっけ?

ありましたね、正規分布って。

あの、平均値のところでピークをもつつりがね状の確率分布を示すあれです(画像はWikipediaより)。

正規分布

平均±σの範囲内に全体の約68%が入る、とか±2σだと約95%が入る、なんてのもありましたよね。

単に乱数を発生させた場合

正規分布の前に、普通にMath.random()で0〜1の乱数を生成した時どうなるか見てみましょう。

グラフ右のボタンで開始します。

グラフは0.1区切りでその分布を記録しています。つまり一番左の棒は0〜0.1、その次は0.1〜0.2に入った個数を示すことになります。

いかがですか?その分布はほとんど平らになるでしょ?え?ならない?平らになるまで待ってください!

正規分布

では次に平均0.5、σ=0.2となるような乱数を発生させた場合の分布です。

つりがね状になりましたか?え?ならない?つりがね状になるまで、、、(以下略)。

乱数発生部分のコードはこんな感じで。

一度に2つ生成できます(r1とr2)が、ここではどちらか1つを乱数で選んでおり、最終的にrnに入ります。

var average:Number=0.5 , sd:Number=0.2;//平均0.5、標準偏差0.2

t=Math.sqrt(-2.0 * Math.log(1-Math.random()));
u=2*Math.PI*Math.random();
r1=sd*t*Math.cos(u)+average;
r2=sd*t*Math.sin(u)+average;

if (Math.random() >0.5) {
rn=r1;
}else{
rn=r2;
}

→33.簡単な年齢・月齢の求め方

31.すごく時間のかかる処理←