Luaでちょっと遊ぶ モンテカルロ法
Luaが面白そうだったので書いてみる。Pascalじゃないですかこれ。関数内で関数も定義できるみたいだし。
良いもの。悪いもの。: Lua基礎文法最速マスター
Lua 5.1 リファレンスマニュアル
半径1の球の体積を求めてみる。半径1の球がぴったり入る立方体は2×2×2=8、この中に一様に分布するランダムな点を打ち、球の中√(x^2+y^2+z^2)に入る点を数える。この点の数は立方体の中全体の点とくらべて 4/3×π:8になるはず。
Luaで実行するときはそのまま引数にLuaのスクリプトを書いたファイルの名前を渡してOK。
関数は使われる前に宣言する。
awkであるような暗黙のうちの0代入はない。sum=sum+1とするとき右辺のsumがnilと言われた。
これ実行するとしばらく待って以下の表示。でも八千万回も回してなんてBASICの頃は考えられんかったねー
$ lua kyuu.lua
80000000 41884467
-- 20130110 -- -- 立方体(2r)*(2r)*(2r)=8r^3 -- 球 4/3*pi*r^3 -- 4/3*pi = 4.1887902 math.randomseed(2013) -- 適当 sum=0 it=80000000 function kyuu(x,y,z) local v=math.sqrt(x*x + y*y + z*z) return v end -- for i=1,it do x,y,z=math.random(),math.random(),math.random() if kyuu(x,y,z)<1 then sum = sum+1 end end print(it,sum)