Monte Carlo yöntemi

**Monte Carlo benzetimi**, çok sayıda tekrarlanan rastgele örneklemelerle, bir takım nümerik sonuçlar elde etmeye yarayan ve bilimin birçok alanında yaygın olarak kullanılan bir sayısal hesaplama algoritmaları sınıfıdır. Stokastik olayların yer aldığı fiziksel süreçlerin sonuçlarının tahmin edilmesinde çok kullanışlıdır. Ayrıca, rastgele seçimlerin işe yaradığı ve prensipte deterministik olan bir takım problemlerin çözümünde de kullanılmaktadır. Monte-Carlo yöntemi, Nicholas Constantine Metropolis (1915-1999) tarafından bulunmuştur ve Atom bombasının geliştirildiği Los Alamos Ulusal Laboratuvarında, bombanın patlamasından sonra dağılan nötronlara karşı kalkan modellemek için Stanislaw Ulam tarafından günümüze taşınmıştır.

Deney girdileri belirli olmayan, kesin olmayan bir şekilde gelmesi bekleniyorsa ve dağılım bir fonksiyonla hesaplanabilecekse kullanılır. Monte Carlo, rastgele sayıları baz alarak tahmini sistemleri modeller. Hücre Similasyonu, Borsa Modelleri, Dağılım Fonksiyonları, Sayısal Analiz, Doğal olayların simülasyonu, Atom ve Molekül Fiziği, Nükleer Fizik ve Yüksek Enerji Fiziği modellerini test eden simülasyonlar, Deneylerde kullanılan aletlerin simülasyonu (Örneğin bir madde içerisinde x ışınlarının dağılımı).

Yukarıdaki modellerde tahminler yapabilmek için; Rastgele sayı üretilir, bunun için programlama bilgisi gerekmektedir.

# Programlama: Temel düzeyde Monte Carlo programları öğrenildikten sonra, Monte Carlo üreteçlerini oluşturabilmek gerekmektedir. Teorik eğitimin yanında örneğin C, C++ gibi bilimsel çalışmalarda sıklıkla kullanılan programları iyi derecede bilmek gerekmektedir.
# Teorik: Programlama aşamasına geçmeden önce problemi ya da deney sistemimizin teorisini çok iyi oluşturmamız gerekmektedir.

Aşağıda Pi sayısının Monte Carlo Yöntemi ile hesaplanması örneği C++ kodları ile verilmiştir.

```cpp
#include <iostream>
#include <random>

double piyi_hesapla(int deneme_sayisi) {
  std::mt19937 gen{std::random_device{}()};
  std::uniform_real_distribution<double> dis(0.0, 1.0);

  double toplam= 0.0;
  for(int i = 0; i < deneme_sayisi; i++) {
    const double x = dis(gen);
    const double y = dis(gen);

    if((x * x) + (y * y) <= 1)
      toplam++;
  }

  const double sonuc= toplam/ deneme_sayisi* 4;

  return sonuc;
}

int main() {
  const int deneme_sayisi= 10000000;
  std::cout << deneme_sayisi << " deneme icin pi sayisi:\n"
            << piyi_hesapla(deneme_sayisi) << '\n';
}
// 10000000 deneme icin pi sayisi:
// 3.14166
```


**Monte Carlo Benzetimi**, fiziksel ve matematiksel bazı sistemlerin benzetiminde kullanılır. Genelde rastlantısal (*random*) değişkenlerin sisteme etkisinin incelenmesi için kullanılır. Genelde rastlantısal değişkenler için rastgele sayılar üreten bir algoritma ile çalışır.

Monte Carlo Benzetimi yapılacak değişkenler belli bir istatistiksel dağılıma uyacak şekilde üretilebilir. Bunun için olasılık dağılım fonksiyonunun (*CDF*) tersi kullanılır. Bilgisayar tarafından belirli bir aralıkta [0 - 1] düzenli (*uniform*) olarak üretilen rastgele sayılar olasılık dağılım fonksiyonlarının tersi kullanılarak kolaylıkla herhangi bir dağılıma dönüştürülebilir.

Örneğin iki rassal değişkene (X_1, X_2) bağlı olan Y değişkeninin bu değişkenlerle olan ilişkisi f fonksiyonuyla tanımlanmış olsun.

:Y=f(X_1,X_2)

Eğer X_1 ve X_2 değişkenlerinin dağılımı belliyse (örneğin: Normal Dağılım) ve aynı zamanda dağılım özellikleri de biliniyorsa (\mu_x : Ortalama ve \sigma_x : Standart sapma) X değerleri için defalarca rastgele sayılar üretilerek f fonksiyonuyla Y değerleri hesaplanabilir. Buradan da Y ile ilgili istatistiksel bilgilere ulaşılabilir. Ne kadar çok örnekleme yapılırsa o kadar iyi sonuçlar elde edilir.

## Kaynakça
* Bozkaya K: A study on the reliability analysis during preliminary design - A rocket motor example. MS Tez. ODTÜ. Eylül 2006