モンテカルロ法で円周率を求めるプログラムをscratchで作成します。モンテカル法については「円の内か外か? 円周率を求める」でも取り上げました。
資料はこちら → scratchその3
p.1 前回のブログの復習です。xy座標の正方形とそれに接する円を描きます。(円の面積)/(正方形の面積)比の4倍が円周率です。乱数で発生させた座標の数について、(円内にある数n)と(正方形内にある数N)の比をとると、回数が多いほど上述の面積比に漸近していきます。 そこで、乱数をダーツに置き換えて、赤い円と正方形内に当たったダーツの数を数えて比をとることにします。
p.2 ①scratchの右下の背景をクリック、②一番下に「xy-grid」を選択すると、ステージに座標が現れます。③スクリプトの筆を選択して、コスチュームを表示させます。④右下の拡大鏡で拡大、⑤色を黒にし、⑥筆で中央にチョンと印をつけます。
p.3 ⑦変数を選んで、「ダーツの合計本数」「現在の本数」「当たり」を入力して3つの変数を作成します。
p.4 左のようにブロックを繋げて作成ください。一番下のブロックは込み入っていますので、右側の上から組み合わせていってください。
p.5 「編集クリック→ターボモードにする」で実行すると、所要時間が4秒で円周率3.2264が求まるのに対して、「編集クリック→ターボモードを解除する」で実行すると22分4秒の所要時間かかったものの、円周率は3.2261とターボモードとあまり変わらない精度となりました。 変数の前の□にレ点を入れると、ステージの左上に本数を表示します。
いかがでしたか? 算出精度は悪いですが、モンテカルロ法が実行中、黒い点があちこち飛び回る様子を見れるのは面白いと思います。