またもやエクセルの例題です。
モンテカルロ法でπを求めます。
モンテカルロ法は、正方形に内接する円を考え、乱数で正方形内に任意の点を打ちます。
円の半径をrとすると、円の面積はπr2で正方形の面積は4r2ですので面積比は π:4 となり、円の内側にある点の数(m)と全ての点の数(n)を数えれば、π/4=m/n からπが求まることになります。ここではr=1とします。
表のX,Yは0〜1の乱数です。=RAND() の関数を使います。4行目〜65536行目(エクセルの最大行)まで入力します。
X2+Y2を求めます。
円の中かどうかは X2+Y2<r2(=1) なら円の中ですので、判定結果の列に =IF(E4<1,"",0) を入れて円の外なら0を表示するようにします。(円の外の方が数が少ないので処理が早い)
判定結果の列の上に =COUNT(F4:F65536) で判定結果の列の4行目から65536行目(エクセルの最大行)までにいくつ数字があるか数えます。これが円の外の数です。全体(65533)から引けば円の中の数が求まります。円の中の数を全体で割って4倍するとπが求まります。
さて実行結果は
3.144614
3.137168
3.144065
3.149009
3.138693
3.141379
などが得られました。
判定を「<(未満)」としたのですが、線上はどうなるのかと「<=(以下)」の判定でやっても結果は変わりません。線上はそれほどはないのでしょうね。
再計算の処理時間は「<」のとき7分40秒なのが「<=」とすると11分25秒と処理時間が増えてしまいます。判定に時間がかかるのでしょうね。
また、外側を数えるのではなく内側を数えると11分24秒と処理時間が増えてしまいます。処理回数が増えるからでしょうね。
ちなみに、CPUはアスロンXPの+1700でメモリーは512Mです。
- Calendar
<< May 2024 >> Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
- search this site.
- tags
-
- 未分類 (374)
- archives
-
- 201401 (2)
- 201305 (1)
- 201303 (1)
- 201301 (1)
- 201212 (1)
- 201211 (1)
- 201210 (1)
- 201209 (3)
- 201208 (4)
- 201207 (2)
- 201206 (3)
- 201205 (5)
- 201204 (1)
- 201203 (2)
- 201107 (1)
- 201105 (2)
- 201104 (4)
- 201007 (3)
- 201006 (5)
- 201005 (5)
- 201004 (10)
- 201003 (1)
- 201002 (21)
- 201001 (31)
- 200912 (31)
- 200911 (8)
- 200910 (11)
- 200909 (4)
- 200908 (1)
- 200907 (2)
- 200906 (1)
- 200905 (5)
- 200904 (5)
- 200903 (3)
- 200902 (1)
- 200901 (2)
- 200812 (10)
- 200811 (4)
- 200810 (5)
- 200809 (10)
- 200808 (6)
- 200807 (9)
- 200806 (15)
- 200805 (31)
- 200804 (30)
- 200803 (31)
- 200802 (29)
- 200801 (31)
- 200712 (31)
- 200711 (30)
- 200710 (31)
- 200709 (30)
- 200708 (31)
- 200707 (31)
- 200706 (30)
- 200705 (31)
- 200704 (30)
- 200703 (31)
- 200702 (28)
- 200701 (31)
- 200612 (31)
- 200611 (30)
- 200610 (30)
- 200609 (27)
- 200608 (7)
- 200607 (1)
- recent trackback