May 1, 2025, Thursday, 120

KADD 2022 Laboratorium 7 EN

From Łukasz Graczykowski

(Difference between revisions)
Jump to: navigation, search
Line 14: Line 14:
* in addition, you can create a <code>TH1D</code> object and fill it with accepted values of x. It will be a distribution of the circle.
* in addition, you can create a <code>TH1D</code> object and fill it with accepted values of x. It will be a distribution of the circle.
-
''Part two'': '''generowanie liczb pseudolosowych z dowolnego rozkładu metodą akceptacji i odrzucania von Neumanna''' (3 pkt.)
+
''Part two'': '''generation of pseudo random numbers from a any probability distribution using the acceptance rejection method of von Neumann''' (3 pkt.)
Wykorzystana tydzień temu metoda transformacji rozkładu jednorodnego z wykorzystaniem funkcji odwrotnej do dystrybuanty ma ograniczone zastosowanie. Jej zastosowanie jest możliwe tylko wtedy, gdy znana jest jawna postać dystrybuanty oraz można znaleźć funkcję do niej odwrotną. '''Metoda von Neumanna''' pozwala wygenerowanie liczb pseudolosowych, gdy znany jest tylko rozkład g(y). W ogólności metoda działa nawet wtedy, gdy funkcja g(y) ''nie jest'' rozkładem gęstości prawdopodobieństwa (całka z niej nie wynosi 1). Pozwala to na bardzo szerokie wykorzystanie metody von Neumanna - przede wszystkim do obliczania całek oznaczonych ze skomplikowanych funkcji, gdy ich analityczne scałkowanie jest niemożliwe. Metody tego typu noszą nazwę wspomnianych wcześniej '''metod Monte Carlo'''.
Wykorzystana tydzień temu metoda transformacji rozkładu jednorodnego z wykorzystaniem funkcji odwrotnej do dystrybuanty ma ograniczone zastosowanie. Jej zastosowanie jest możliwe tylko wtedy, gdy znana jest jawna postać dystrybuanty oraz można znaleźć funkcję do niej odwrotną. '''Metoda von Neumanna''' pozwala wygenerowanie liczb pseudolosowych, gdy znany jest tylko rozkład g(y). W ogólności metoda działa nawet wtedy, gdy funkcja g(y) ''nie jest'' rozkładem gęstości prawdopodobieństwa (całka z niej nie wynosi 1). Pozwala to na bardzo szerokie wykorzystanie metody von Neumanna - przede wszystkim do obliczania całek oznaczonych ze skomplikowanych funkcji, gdy ich analityczne scałkowanie jest niemożliwe. Metody tego typu noszą nazwę wspomnianych wcześniej '''metod Monte Carlo'''.

Revision as of 11:28, 11 April 2022

Contents

Exercise

Part one: estimation of the Pi (1 pkt.)

Please write a function which estimates the number Pi with the von Neumann (it is arguably one of the most simple examples of the use-case of a Monte Carlo method). In order to calculate the Pi, we randomly generate two numbers x and y from the uniform distribution [0,1] and we check whether the pair falls within the circle of the radius equal to 1. Next, by calculating the ratio of accepted pairs to all of them, you approximate the ratio of areas of the circle to the rectangle. By performing such a random generation, calculate the Pi number. In addition, draw the graph of the resulted points inside and outside the circle:

  • create two objects of type TGraph and fill one of them with accepted pairs (x,y), the second one with rejected pairs. Both plots draw on one canvas,
  • in addition, you can create a TH1D object and fill it with accepted values of x. It will be a distribution of the circle.

Part two: generation of pseudo random numbers from a any probability distribution using the acceptance rejection method of von Neumann (3 pkt.)

Wykorzystana tydzień temu metoda transformacji rozkładu jednorodnego z wykorzystaniem funkcji odwrotnej do dystrybuanty ma ograniczone zastosowanie. Jej zastosowanie jest możliwe tylko wtedy, gdy znana jest jawna postać dystrybuanty oraz można znaleźć funkcję do niej odwrotną. Metoda von Neumanna pozwala wygenerowanie liczb pseudolosowych, gdy znany jest tylko rozkład g(y). W ogólności metoda działa nawet wtedy, gdy funkcja g(y) nie jest rozkładem gęstości prawdopodobieństwa (całka z niej nie wynosi 1). Pozwala to na bardzo szerokie wykorzystanie metody von Neumanna - przede wszystkim do obliczania całek oznaczonych ze skomplikowanych funkcji, gdy ich analityczne scałkowanie jest niemożliwe. Metody tego typu noszą nazwę wspomnianych wcześniej metod Monte Carlo.

Należy stworzyć trzy bardzo podobne funkcje przyjmujące obiekt typu TF1. Powinny one przyjmować funkcję g na przedziale [min,max]:

  • double losujVonNeumann(TF1 *g, double min, double max) - funkcja zwraca jedną liczbę pseudolosową z funkcji g(y),
  • double wydajnoscVonNeumann(TF1 *g, double min, double max, int n) - funkcja zwraca wydajność metody akceptacji i odrzucania von Neumanna dla danej funkcji g(y) oraz zadanej liczby losowań n,
  • double calkaVonNeumann(TF1 *g, double min, double max, int n) - funkcja zwraca całkę oznaczoną (pole powierzchni pod krzywą) z funkcji g(y) na przedzialne [min,max] przy liczbie losowań n.

Część trzecia: metoda akceptacji i odrzucania von Neumanna z funkcją pomocniczą (1 pkt.)

W celu zwiększenia wydajności metody von Neumanna, można posłużyć się ograniczeniem przedziału losowania w postacji zadanej funkcji pomocniczej. W tej części zaimplementować funkcję, która oblicza całkę z funkcji g(y) metodą akceptacji i odrzucania von Neumanna z funkcją pomocniczą s(y):

  • double calkaVonNeumannZPomoc(TF1 *g, TF1 *s, double min, double max, int n, double &wydajnosc) - zwraca całkę na przedziale [min,max] oraz dla zadanej liczby losowań n. Ponadto, funkcja powinna zwrócić przez referencję (ponieważ w języku C/C++ funkcja nie może zwrócić dwóch wartości) wydajność tej metody.

Funkcję s(y) dobieramy tak, by zawsze znajdowała się powyżej funkcji g(y) i można z niej było łatwo wygenerować liczbę pseudolosową (na przykład metodą transformacji rozkładu jednorodnego z wykorzystaniem odwrotności dystrybuanty; na wykładzie przykład z funkcją liniową).

Wszystkie obliczenia należy wykonać dla funkcji typu: Lab07 funkcja2.png

Uwagi

  • Czytamy dokładnie Wykład 5 link slajdy 9-19
  • Do generowania liczb z rozkładu jednorodnego używamy funkcji Uniform z klasy TRandom lub generatora napisanego w poprzednim zadaniu
  • Pamiętajmy, że zawsze akceptujemy wylosowane punkty pod zadaną krzywą w stosunku do wszystkich wylosowanych (stosunek ten ma się do siebie (dla N dążących do nieskończoności) jak stosunki powierzchni obszarów wewnątrz których zostało dokonane losowanie)
  • Jako funkcję pomocniczą przyjmujemy funkcję liniową.
  • W przypadku całkowania z wykorzystaniem funkcji pomocniczej zawsze dobieramy ją w taki sposób, aby można było wygenerować liczbę z jej rozkładu w łatwy sposób (za pomocą odwracania dystrybuanty) - innymi słowy, zamieniamy prostokąt (dwa rozkłady jednorodne) na inny obszar, wewnatrz którego dokonujemy losowań (musimy umieć wylosować liczby z tego obszaru)
  • Funkcja kwadratowa i jej odwrotność:

Odwracanie kwadratowej.png

Wynik

Część pierwsza

Lab07 kolo2.png

Output:

 Liczba Pi wynosi: 3.14392

Części druga i trzecia

Lab07 dist.png

Output:

Calka: 0.199
Wydajnosc: 0.2072
Calka (metoda z funkcja pomocnicza): 0.198745
Wydajnosc (metoda z funkcja pomocnicza): 0.39749
Calka liczona metoda  Integral: 0.198652