主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

確率を使ってパイを求める(モンテカルロ・シミュレーション)

                
tags: math


 ↑の本でモンテカルロ・シミュレーションを使って円周率パイを求めるなんて話が載っていて面白そうだったのでやってみる。

"幾何をちゃんと知らない人でも、あのほとんど神話ともいえる神秘的な円周率パイが計算できる。どうやって? 四角の中に円を描き、四角の中ならどこでも同じ確率で弾が当たるようにしておいてから、絵にむかってでたらめに「銃を撃つ」"

本に載っていた上記の文をもとに式を立て、シミュレータを作成する。道具はCでもPythonでも
やれるのだが、Scilabを使う。従来のプログラミング言語でも計算はできるが、記述がもっとも数学らしくなるScilabにしておく。そうしたほうがソースコードの意味を追いやすい。あと、こういうのは実際に動かしてみないと納得しづらいものがある。即座に試せるデモを用意するため、JavaScriptでも作った。

 で、書いたデモとコードが以下。これを走らせてみると、たしかに3.14に近い数字が出る。面白い方法があったもんだなぁ。でもこういうのって初等教育の先生には嫌われるのよね。
確率を使って幾何を使わずにパイを求める


Scilab Ver.
l = 4
trial = 100

r = l / 2
trials = zeros(1, trial)
for k=1:length(trials)
x = rand(1, 10000, "uniform") * l - r
y = rand(1, 10000, "uniform") * l - r

counter = 0
for j= 1:length(x)
if x(1,j)^2 + y(1,j)^2 < r^2 then
counter = counter + 1
end
end

pi = (l^2 / r^2) * counter / length(x)
// disp(pi)
trials(1, k) = pi
end

disp(mean(trials))




以下工事中

L=CdS
dS=l(radius)×θ(radian)=lθ
L=02πl?dθ=2πl
S=0rL?dr=0r2πl?dl=πr2
            

コメントの投稿

非公開コメント

プロフィール

Matoba

Author:Matoba

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。