モンテカルロ法による円周率の計算をRで行う
モンテカルロ法を使用して、息抜きにRで円周率の計算を行う。
有名問題なので背景はこの辺を参照。
L=1 count = 1000000 x = runif(count,0,L) #0からLの間の乱数を発生させる y = runif(count,0,L) #0からLの間の乱数を発生させる pi = 4*sum(x**2+y**2<L**2)/count
countの数を増やして繰り返しplotとしてみるようにした。
※)Rに慣れている人はこんなコードは書かないはず。非常に時間がかかるので注意。
L=1 totalCount = 1000 result = c() cvec = 1:totalCount for (count in cvec){ x = runif(totalCount,0,L) #0からLの間の乱数を発生させる y = runif(totalCount,0,L) #0からLの間の乱数を発生させる pi = 4*sum(x**2+y**2<L**2)/totalCount result = c(result,pi) } plot(result) result
totalCount = 10000として実行してみた。
※)実行には20分ほどかかった気がするw
・・・・・・・・・・
[9946] 3.13496 3.14224 3.14996 3.14064 3.13712 3.14476 3.13808 3.13960 3.15128
[9955] 3.14856 3.13508 3.13692 3.14312 3.13912 3.13412 3.14264 3.14492 3.13232
[9964] 3.13880 3.13900 3.14716 3.13640 3.14712 3.14848 3.14032 3.15060 3.14208
[9973] 3.13532 3.14204 3.14852 3.14672 3.14236 3.14304 3.15292 3.13712 3.13504
[9982] 3.14880 3.14492 3.12244 3.14516 3.14272 3.13480 3.14568 3.14504 3.13816
[9991] 3.14020 3.13856 3.15320 3.14652 3.14520 3.13796 3.14524 3.14280 3.14516
[10000] 3.13400