Reklama
Dzisiaj jest 10 stycznia 2025 r.
Chcę dodać własny artykuł
Reklama
Reklama
Reklama

Metoda Monte Carlo

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.

Reklama

Przykład całkowania metodą Monte Carlo

Metodą Monte Carlo można obliczyć pole koła o promieniu R umieszczone w kwadracie. Procedura wygląda następująco:

  • Losuje się n punktów w kwadracie opisanym na kole.
  • Sprawdza się, czy wylosowane punkty spełniają nierówność x^2 + y^2 \leq R^2.

Wynikiem jest stosunek punktów wewnątrz koła do wszystkich wylosowanych punktów, co pozwala obliczyć pole koła jako:

Reklama

P_k = P \cdot \frac{k}{n},
gdzie P to pole kwadratu (dla R=1, P=4).

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 losuj{-1., 1.};
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; }

Reklama
Reklama