Top > 授業 > Delphi プログラミング >Lesson 7a
Lesson 7a
(2004/09/24)
問合せ メール 戻る

Lesson 7 について

1.Lesson 7 では乱数の確率分布に扱いについて練習します。
 といってもこの分野については本来、勉強しないといけないことは多く、私も詳しい訳でもありません。興味のある方は「数値計算」とか「モンテカルロシミュレーション」といったタイトルの参考書や、アルゴリズムの本を参照すべきと思います。ここでは、乱数に触れながらプログラミングにより慣れる、という目的だと思ってください。

2.この Lesson 7 では4つのサンプルプログラムを用意します。最後の1つは別のサンプルプログラムの練習問題の解答(例)になっています。Lesson7 も、Lesson 5 や 6 と同様に a と b の2つに分けます。Lesson 7a の提出用の課題が終わってから Lesson 8 に進むようにします。提出マーク[提出]のついた練習問題のプログラムを、前回同様、圧縮した上で高木までメールで送ってください。

3.サンプルプログラムを眺め、練習問題を試してください。

4.サンプルプログラムはダウンロードしてください(クリック)。ダウンロードしたファイル(lesson7a.exe)はDelphi7\Source に置いてクリックして解凍してください。
P701のポイント

a.このプログラムは2次曲線(- x2 + x)とx軸に挟まれた領域の面積を乱数を用いて近似計算します。乱数を用いた数値計算、すなわちモンテカルロ法の最も簡単な例です。
・正確な定義は存じませんが、「数値計算」というのは数式に値を当てはめる、という方法以外を使って求めるべき数値を近似的に求める方法です。しばしば乱数を用いて計算します。乱数を用いて数値計算をするやり方をモンテカルロ法、ないしモンテカルロシミュレーションと言います。「シミュレーション」という言葉を使っても、普通言っているシミュレーションと異なることに注意。乱数を用いた(我々がいう意味での)シミュレーションをモンテカルロシミュレーションということも稀にあるかも知れませんが、別の意味で使っている場合が多いことに注意です。
・乱数を用いた数値計算でよくテキストに例示されるのは「ビュッフォンの針」とかいう奴で、確か円周率πを計算していたと思います。しかしそのプログラムは、以前の授業で解説に時間をとるため、止めました。この P701 は考え得る限り最も簡単な数値計算の例です。
・答えは簡単な積分で求まります。この方法での近似計算が、発生させる乱数の数とともに正確になって行くことを実感すれば十分です。

練習問題
1.この方法でなぜ面積が求まるか、理屈を各自確認せよ。
2.この計算でなぜ乱数を使う必要があるかを考えよ。(私は乱数を使わなくてもよいと思うけれど)
3.関数を代えて計算を試せ。
4.乱数の発生数とともに数値が正確になる過程をグラフに描くようにプログラムせよ(ただし常に正確になって行くとは限らない)。
P702のポイント

a.このプログラムは、標準正規分布で±1.96の外側にある面積(確率)を求める
・±1.96 ということは、約5%になるはずです(数値的には 0.05 より若干小さくなる)。正規乱数を発生させたとき、本当にそうなるかを確認してみるのが狙いです。

練習問題:1.96 以外の数字を用いて試せ
P703のポイント

a.このプログラムは中心極限定理のシミュレーションである。
・中心極限定理については統計のテキストで確認/再確認してください。母集団が期待値μ、分散σ2に従うとして、この母集団からサンプルサイズnの無作為標本を何度もとったとき、その標本の平均値は母集団の分布型にかかわらず正規分布N(μ,σ2/n)に近づく、というものです。

b.3つのPaintBox を使っている
・このプログラムは原理的には何も新しい要素はありません。ただ、PaintBox を3つ使いました。シミュレーションをする場合、いくつかの表示窓が必要になることが多いですから、複数のオブジェクトに描画する、というやり方にも慣れる必要があります。
・'population'という PaintBox に表示されるのは母集団の確率分布です。母集団は離散分布、値の数は5つ、しかも非常に歪んでいる(正規分布から程遠い)、という条件設定です。
・'sample'という PaintBox では、1回のサンプリングで得たデータの度数分布を表示します。母集団の分布に近いことが多いですが、そうとは限りません。
・'Distribution of sample mean' というPaintBox では、何度もサンプリングして得た標本平均の度数分布を示します。線で描いたのは理論的な正規分布曲線です。度数分布が正規分布曲線に近づく、というシミュレーションです。

c.RadioGroup を使っている
・このプログラムでは条件の選択に RadioGroupを使っています。
・'SampleSize' は1回の標本抽出での標本サイズを選択します。
・'# Repetition' は標本抽出の回数を指定します。
・RadioGroup の使い方は簡単で、RadioGroup をフォームに付け、そのRadioGroupに対応するオブジェクトインスペクタの'Item'という項に選択項目を書き込むだけです。ソースコードの中では、例えば RadioGroup1 での選択はRadioGroup1.ItemIndextとして数値化(最初の項目が0、次が1…)されています。それ以上のことは余計な話ですが、余計な話はRadioGroup のオブジェクトインスペクタを眺めれば分かってくると思います。

練習問題
1.プログラムの全体構造を理解せよ。
2.RadioGroupで標本サイズ、標本抽出繰り返し数を変化させると、結果が統計学の通りになるかどうかを確かめよ。
3.[提出]プログラムを書き換え、母集団の分布型を RadioGroup で選択できるようにせよ。(私の作ったプログラムの実行型ファイルを P704.exe として付けておきます。)→P704
P704

・P703 の練習問題3の解答例です。
・私が作った解答例は Lesson 7b で示します。
次回に向けて

まず、P703 の練習問題3のプログラムを高木に送ってください。その後に、その練習問題の解答例にあたるプログラムを Lesson 7b の掲示でダウンロードできるようにします。