Monte Carlo simülasyonu ile Pi sayısına yaklaşım ve Haskell ile uygulaması

Murat Koptur
2 min readJun 8, 2019

--

Photo by Jeremy Perkins on Unsplash

Monte Carlo simülasyonu bir deneyin sonucunu (çıktısını) tahmin etmek için rastgele örneklemeden yararlanan bir yöntemdir.

Yarıçapı 1 birim olan bir daire ve bu daireyi kapsayan ve kenar uzunluğu 2 birim olan bir kare düşünelim.

Karenin alanı 4 birim² ve dairenin alanı ise π1²=π ’dir. Dolayısıyla dairenin alanının karenin alanına oranı ρ=π/4 olur. Peki bunu Pi sayısını hesaplamak için nasıl kullanacağız?

Karenin içerisinden n tane rastgele nokta aldığımızı, bunların da m tanesinin çemberin içinde olduğunu düşünelim. Yeterince büyük n sayıları için,

olur.

Haskell ile hesaplama

İlk olarak Haskell kodunu verelim ve adım adım açıklayalım.

  1. İlk olarak gerekli fonksiyon ve modülleri içeri aktarıyoruz.
  2. pickPointAndCheck: Bu fonksiyon -1 ile 1 arasında iki farklı rastgele nokta seçiyor ve bu noktanın birim çemberin dışında olup olmadığını hesaplıyor.
  3. approximate_pi: Bu fonksiyon ilk olarak pickPointAndCheck fonksiyonunu n defa çalıştırıyor (replicateM ile). Bunun sonucunda 0 ve 1 sayılarından oluşan bir liste elde ediliyor. Daha sonra bu listeyi toplayarak dairenin içerisinde kalan nokta sayısını buluyoruz. Burada kullandığımız foldl fonksiyonu, bir başlangıç değeri ile başlayarak (bizim kodumuzda 0), listedeki her bir elemanı kendisinden bir önceki elemanın işleme (bizim kodumuzda işlem toplama (+))girmesiyle elde edilen sonuçla işleme sokar. Yani, elimizdeki liste [1,0,1,1,0,1] ise, foldl (+) 0 [1,0,1,1,0,1] fonksiyonu ((((((1+0)+0)+1)+1)+0)+1) toplamını hesaplar.
  4. main: Burada da komut satırından n sayısını alıp approximate_pi fonksiyonunu girilen n sayısı ile çağırır ve sonucu komut satırına yazar.

GitHub hesabım: https://github.com/mrtkp9993

Blogum: https://makineogrenimi.wordpress.com

Kaynaklar

http://mathfaculty.fullerton.edu/mathews/n2003/montecarlopimod.html

https://www.geeksforgeeks.org/estimating-value-pi-using-monte-carlo/

--

--

No responses yet