(乱数,モンテカルロ法,円周率,確率,高速ターボモード)
乱数を用いて系をシミュレーションし,物理量を推定する手法は,一般にモンテカルロ (Monte Carlo) 法と呼ばれている.
モンテカルロ法の簡単な応用例として,円周率(π)を求め る方法がある.
半径が1.0の円の4分の1と1.0 X 1.0の正方形を考える.
円弧は原点からの距離が1.0の集まりである.
今,正方形の中にランダムに点を打つとする.原点から点までの距離は,x,y 座標から簡単に求めることができる.
もし,その距離が1.0以下なら赤点で表される領域内に存在する.一方,1.0を越える場合は青点の領域に存在する.
ランダムに多数の点を打ち続けると,円は赤色に塗りつぶされる.正方形内の赤点+青点の総数 Aと赤点総数 B の比は,面積の比に近い.
ゆえに,π は点の比(赤の点の数/すべての点の数)から求めることができる.
パソコンが発生する乱数を使えば,簡単に無数のランダム座標を求めることができる.注)発生する乱数に「くせ」がないように工夫されている.
Scratchでは,演算のスクリプトの中に ◯から◯までの乱数 が用意されている.ここでは0.0 ー1.0 範囲の乱数を発生させるので, 0 から1 までの乱数 ではなく,実数の 0.0 から1.0までの乱数 を用いて指定する.
プログラムから明らかなように,乱数は x, y 用に2個発生させる.
座標から距離を計算させて,1.0 以下の点の数を数えている.n ← n + 1 の構文を利用する.
答えは,十万回で3.14064,計算時間は1.367秒とネコが教えてくれる.
Intel Core i5 搭載パソコンの場合,十万回乱数を発生処理させても1.37 秒程度で終了する.
変数x,yは座標,tは店の総数,nは黒点の数,Lは原点からx,y座標までの距離,sは時間である.
総数2000点をプロットさせた際のプロット図(1/4円部分1569点)とプログラム,座標は150倍した値を用い,プログラムにはペン操作を追加した.プロットしながら実行すると,演算時間のほとんどは画像描画であることが分かる.
ステージ上部メニューの編集からターボモードを選択すると,10万回のプロットを4.271秒で実行する.πの値は3.14296である.
Scratch3における実行
ブロックの色調が少し変化している程度. 右は副プログラムを使用した場合のプログラム例である.
Scratch3
Scratch3(副プログラム使用)