Metoda Monte Carlo
Metoda Monte Carlo (MC) to technika modelowania matematycznego, stosowana do analizowania procesów złożonych, dla których podejście analityczne jest niewystarczające. Kluczowym elementem tej metody jest losowanie wartości zgodnie z ustalonym rozkładem prawdopodobieństwa. Przykładowo, w fizyce cząstek, każdy zderzenie cząstki o wysokiej energii z jądrem może być modelowane poprzez losowanie parametrów takich jak liczba, typ czy energia cząstek wtórnych.
Przykład całkowania metodą Monte Carlo
Metodą Monte Carlo można obliczyć pole koła o promieniu umieszczone w kwadracie. Procedura wygląda następująco:
- Losuje się punktów w kwadracie opisanym na kole.
- Sprawdza się, czy wylosowane punkty spełniają nierówność .
Wynikiem jest stosunek punktów wewnątrz koła do wszystkich wylosowanych punktów, co pozwala obliczyć pole koła jako:
gdzie to pole kwadratu (dla , ).
Dokładność i poprawność metody Monte Carlo
Dokładność wyników z metody Monte Carlo zależy od liczby prób oraz jakości generatora liczb losowych. Większa liczba prób nie zawsze prowadzi do zwiększonej dokładności, co może być ograniczeniem. Metoda jest skuteczna w przypadkach, gdzie szybkość wyników jest ważniejsza niż ich precyzja, np. w obliczeniach inżynierskich. Poprawność metody można dowieść, stosując twierdzenie Picka, co czyni ją dokładną dla dowolnych kształtów w granicach nieskończoności.
Zastosowanie w biznesie
Metoda Monte Carlo znajduje zastosowanie w zarządzaniu projektami, szczególnie w ocenie ryzyka. Umożliwia oszacowanie, przy jakim czasie trwania projektu lub budżecie osiągnięty zostanie określony poziom ryzyka.
Przykład obliczania liczby π w C++
Poniżej znajduje się przykład kodu w języku C++, który ilustruje obliczanie liczby π metodą Monte Carlo:
#include
#include
using std::cout;
using std::cin;
using std::endl;
int main() {
std::mt19937 gen{std::random_device{}()};
std::uniform_real_distribution
int punktow_w_kwadracie = 0;
int punktow_w_kole = 0;
cout << "Podaj liczbe losowanych punktow: "; cin >> punktow_w_kwadracie;
double x, y;
for(int i = 0; i < punktow_w_kwadracie; ++i) {
x = losuj(gen);
y = losuj(gen);
if(x*x + y*y <= 1) {
++punktow_w_kole;
}
}double _PI_ = 4. * punktow_w_kole / punktow_w_kwadracie;
cout << "Szukana liczba pi = " << _PI_ << endl;
}