• Nie Znaleziono Wyników

Zadania z Języka C dla grup 7. i 9.

N/A
N/A
Protected

Academic year: 2021

Share "Zadania z Języka C dla grup 7. i 9."

Copied!
2
0
0

Pełen tekst

(1)

Zadania z Języka C dla grup 7. i 9.

Zestaw VI - styczeń 2016 (c.d.)

19. Generator Boxa-Mullera. W wielu sytuacjach, np. kiedy próbujemy modelo- wać komputerowo różne procedury pomiarowe, pojawia się potrzeba generowania liczb pseudolosowych o rozkładzie Gaussa (tzw. rozkładzie normalnym). Punktem wyjścia jest tutaj generator o wartości oczekiwanej 0 i wariancji 1, dla którego gęstość prawdopodobieństwa dana jest wzorem:

N (0, 1; x) = 1

exp−x2/2.

Następnie, stosując proste przeskalowanie x0 = σx + µ można otrzymać x0 podle- gające rozkładowi Gaussa o dowolnie wybranej wartości oczekiwanej µ i wariancji σ2, zwykle oznaczanemu symbolem N (µ, σ2; x).

Jeśli założyć, że mamy dany generator liczb losowych o rozkładnie równomiernym na przedziale (0, 1), to liczby losowe o rozkładzie zbliżonym do N (0, 1; x) możemy otrzymywać na dwa (najczęściej spotykane) sposoby:

a) Wygenerować 12 liczb losowych 0 < x < 1, dodać je, a sumę pomniejszyć o 6.

b) Wygenerować 2 liczby losowe x i y, a następnie zastosować transformację Boxa-Mullera

u =

−2 ln x · cos(2πy), v =

−2 ln x · sin(2πy),

w wyniku której otrzymujemy liczby u i v podlegające rozkładowi N (0, 1; x).

Na pierwszy rzut oka wydaje się, że drugi sposób jest bardziej efektywny, ze względu na konieczność generowanie tylko 2 wyjściowych liczb losowych. Tak jednak być nie musi, gdyż obliczanie logarytmu i funkcji trygonometrycznych jest dość czasochłonne. Proszę napisać osobne funkcje stosujące te dwie metody, jak również programy, które pozwolą porównać rzeczywiste czasy generacji np. 106 liczb losowych o rozkładzie Gaussa.

Generację ciągu liczb metodą Boxa-Mullera można nieco przyspieszyć, stosując w odpowiedniej funkcji zmienne statyczne. Dla przykładu, w funkcji

void moja_funkcja(...) {

static int n=0;

n++;

...

}

(2)

zmienna n pozwala ustalić, z którym kolejnym wywołaniem funkcji mamy do czy- nienia. W przypadku funkcji generującej liczby losowe metodą Boxa-Mullera, można zadbać o to, aby przy nieparzystym wywołaniu była wykonywana cała pro- cedura począwszy od losowania liczb x i y a skończywszy na zwróceniu u jako liczby wylosowanej, zaś przy wywołaniu parzystym po prostu zwracana była wartość v (zapamiętana wcześniej w innej zmiennej statycznej). To samo można oczywiście osiągnąć za pomocą zmiennych globalnych, jednak mechanizm zmiennych statycz- nych jest zdecydowanie bardziej elegancki, a w praktyce pozwala uniknąć trudnych do wykrycia błędów w bardziej skomplikowanych programach. (W istocie, zmienne statyczne to takie ukryte zmienne globalne, widoczne tylko w bloku, w którym zo- stały zadeklarowane.)

20. Rozkład Wignera. Napisać możliwie najbardziej efektywny generator liczb lo- sowych o tzw. rozkładzie Wignera, dla którego gęstość prawdopodobieństwa dana jest wzorem:

P (x) = π

2x exp(−πx2/4).

Po wylosowaniu ok. 106 liczb stworzyć histogram rozkładu i prostą wizualizację wyników np. w programie gnuplot.

Wskazówka: Rozkładowi takiemu podlega np. promień wodzący punktu na płasz- czyźnie r =

u2 + v2, jeżeli u i v podlegają rozkładowi Gaussa.

Cytaty

Powiązane dokumenty

równomierność – jednostajność rozkładu, czyli stałość prawdopodobieństwa wystąpienia każdej wartości). W naszej pracy zajmiemy się metodami analizy losowości

Napisz funkcję isInCircle typu int, która będzie losowała punkt w kwa- dracie [0, 1]×[0, 1] i zwracała wartość 1, jeśli punkt znajduje się wewnątrz koła o promieniu 13.

Proszę napisać funkcje, która mnoży dwie liczby typu unsigned (albo unsigned long), a wynik zapamiętuje w dwóch innych zmiennych, z których jedna przechowuje najmłodsze bity

Jaką siłę wskaże waga sprężynowa, jeżeli ruch po równi odbywa się bez tarcia.. Jaki powinien być współczynnik tarcia f między klockiem i szalką wagi, aby klocek

Wybierając najbliŜszą wartośc całkowitą otrzymać moŜna skalę, symetryzującą dane o planetach.. Jest to

Wybierając najbliższą wartośc całkowitą otrzymać można skalę, symetryzującą dane o

Utwórz tablicę 10x5, wypełnij ją losowymi liczbami całkowitymi (0 : 20), a następnie sprawdź w którym wierszu jest największa suma (wypisz liczby na ekran, obok podaj sumę

wyszukaj gwiazdy znajdujące się w odległości x parseków od Ziemii (należy uwzględnić iż obiekt gwiazdowy opisany jest przy pomocy lat świetlnych);. wyszukaj gwiazdy o temperaturze