C01 中心極限定理

問題

一様乱数の N 個の平均として得られるデータを M 個作り、そのヒストグラムを作れ。さらに、N を大きくしたとき、正規分布に近づくことを視覚的に確認できるコードを書け。ただし、ウェブ上の情報などは見てはいけないが、KNOPPIX/Math/2010 DVD に収録してある情報は見てもよい。

を考えます。(元は「GeoGebra日本」の対応するページをごらんください)

ひとまず,この問題文だけでやってみます。

(1) M,Nを決めるスライダーを作ります。直線スライダーがよいでしょう。

直線上の点のx座標だけでN,Mを決めればよいので

N=ceil(E.x*10);

M=ceil(F.x*10);

drawtext([0,5],"N="+N,size->16);

drawtext([0,4],"M="+M,size->16);

とでもしておきます。

(2) 度数をいれておくリストを用意します。

乱数の範囲や,階級の指定がないので,表示のことも考えてとりあえず10未満の乱数とし,階級は0.1ごとにします。

Hist=apply(1..100,0);

これで,すべての要素が0であるリストができます。要素の数は100個。

(2) 一様乱数を作って平均を求め,Histに格納していきます。

repeat(M,

data=apply(1..N,random()*10);

av=sum(data)/N;

nn=floor(av*10);

Hist_(nn+1)=Hist_(nn+1)+1;

);

ここで,2行目の 1..N は1からNまでのリスト [1,2,3,・・・・]で,apply はそのリストの要素に random()*10を適用します。すなわち,N個の乱数のリストができます。

sum(data) は リスト data の要素の合計。Nで割って平均がでます。

floor(av*10); で平均を10倍し,切り捨てます。

Hist_(nn+1)=Hist_(nn+1)+1; で度数を1つカウントします。

(3) 表示

repeat(100,s,

draw([s/10,0],[s/10,Hist_s]);

);

簡単のため,単に縦線にしました。

次が実行結果です。

同じN,Mでも画面をクリックするたびにスクリプトが実行されて分布が変わります。