From MJanik
Zadanie
Metody Monte Carlo
Należy napisać funkcję która oblicza liczbę Pi Metodą Monte Carlo. W tym celu losujemy dwie liczby z rozkładu jednorodnego [0,1], x i y, i sprawdzamy, czy wylosowana para mieści się wewnątrz koła o promieniu 1. Następnie używając stosunku par zaakceptowanych (mieszczących się wewnątrz) do odrzuconych (tych, które leżą poza okręgiem) oraz wzoru na pole koła należy obliczyć liczbę Pi. Ponadto należy narysować dwa wykresy.
- Liczbami zaakceptowanymi (x) należy wypełnić histogram
TH1D
oraz go narysować.
- Stworzyć dwa obiekty typu
TGraph
i jeden z nich wypełniać zaakceptowanymi parami (x,y) a drugi odrzuconymi parami. Przydzielić im dwa różne kolory punktów. Następnie należy narysować oba te obiekty na jednym panelu.
Metoda akceptacji i odrzucania von Neumana
Standardowa metoda generacji liczb losowych przez funkcję odwrotną
ma ograniczone zastosowanie. Można jej uzywać tylko w przypadku,
gdy dystrybuanta jest znana i możliwe jest znalezienie jej funkcji
odwrotnej.
Gdy znana jest tylko gęstość prawdopodobieństwa g(y)
stosujemy metodę von Neumanna.
- Należy zaimplementować funkcję, która generuje liczby losowe z dowolnego rozkładu reprezentowanego przez obiekt TF1.
Losowanie należy wykonać za pomocą metody akceptacji i odrzucania. Funkcja powinna losować punkt z rozkladu reprezentowanego przez obiekt f, w granicach od min do max:
double losujVonNeuman(TF1 *f, int min, int max);
- Należy zaimplementować funkcję, która oblicza wydajność metody von neumanna dla zadanej funkcji f, w granicach od min do max, dla losowej próbki n punktów.
double wydajnoscVonNeuman(TF1 *f, int min, int max, int n);
- Należy zaimplementować funkcję, która oblicza całkę z funkcji f przy użyciu metody von neumanna, w granicach od min do max, dla losowej próbki n punktów.
double calkaVonNeuman(TF1 *f, int min, int max, int n);
Metoda akceptacji i odrzucania von Neumana z funkcją pomocniczą
- Należy zaimplementować funkcję, która oblicza całkę z funkcji f przy użyciu metody von neumanna z funkcją pomocniczą g, w granicach od min do max, dla losowej próbki n punktów. Ponadto zwraca wydajność tego ogliczenia.
double VonNeumanzPomoc(TF1 *f, TF1 *g, int min, int max, double wydajnosc);
Uwagi
Odwracanie funkcji kwadratowej:
[File: odwracanie_kwadratowej.png]
Wikipedia Metoda Monte Carlo
KADD Wykład 5 A. Kisiel