標準正規分布に従う乱数

BASICのRND関数は,区間[0,1)で一様分布する確率変数とみなせるので,その平均は1/2,分散は1/12です。
したがって,それらを12個加えて6を引けば,平均が0,分散が1の乱数になります。

中心極限定理から,多数個の乱数の和の分布は正規分布の近似になるのですが,一様乱数の和の場合には,12個程度の和でもかなり正規分布に近くなります。

標準正規分布に従う擬似乱数
DEF nrandom=RND+RND+RND+RND+RND+RND+RND+RND+RND+RND+RND+RND-6

平均μ,分散σ2の正規分布N(μ,σ2)に従う乱数は,nrandomをσ倍してμを加えれば得られます。

<補足>
一様乱数から正規乱数を得る方法としては,他に,Box-Muller法が有名です。詳細は書物かインターネットを検索して調べてください。
例 Box-Muller法により1000個の標準正規乱数を得る

100 DECLARE EXTERNAL FUNCTION Box_Muller.NRandom
110 FOR k=1 TO 1000
120    PRINT USING "-%.######":NRandom
130 NEXT k
140 END
1000 MODULE Box_Muller
1010 PUBLIC FUNCTION NRandom  
1040 SHARE NUMERIC r,t,s
1090 LET s=0
1100 EXTERNAL FUNCTION NRandom
1150    IF s=0 THEN
1160       LET r=SQR(-2*LOG(1-RND))
1170       LET t=2*PI*RND
1180       LET NRandom=r*COS(t)
1190       LET s=1
1200    ELSE
1210       LET NRandom=r*SIN(t)
1220       LET s=0
1230    END IF
1240 END FUNCTION
1300 END MODULE


<Note>
十進BASICVer.7.2.2に付属のRANDOM.LIBに,正規乱数,その他,各種乱数を生成する外部関数定義を収録しています。
使用例 正規分布N(50,102)に従う乱数を20個生成する

10 DECLARE EXTERNAL FUNCTION RNDNormal
20 DECLARE NUMERIC m,s,i
30 LET m=50
40 LET s=10
50 RANDOMIZE
60 FOR i=1 TO 20
70    PRINT RNDNormal(m,s)
80 NEXT i
90 END
100 MERGE "random.lib"


RANDOM.LIBは,BASICをインストールしたフォルダのLibraryサブフォルダにあります。


戻る