Generacja liczb pseudolosowych Zapis liczb w komputerze Generatory liczb pseudolosowych Liniowe kongruentne Liniowe mutiplikatywne kongruentne Jakość generatorów Test widmowy Generowanie liczb losowych o dowolnym rozkładzie Transformacja rozkładu jednostajnego Metoda von Neumanna akceptacji i odrzucania Generacja liczb losowych o rozkładzie normalnym Całkowanie metodą Monte-Carlo 1
Zapis liczb w komputerze Liczby pamiętane są w postaci binarnej: 213=1*128+1*64+0*32+1*16+0*8+1*4+0*2+1*1 =011010101 (binarnie) Posługujemy się bajtami jednostkami 8-bitowymi. Dzisiejsze komputery posługują się albo 16-to, albo 32-bitowymi liczbami. Znając liczbę bitów składających się na liczbę możemy wprowadzić zapis dopełniający: -213=1111111100101010 (binarnie 16bitowo) Liczby bez znaku mają wartości od 0 do 2 k, zmienne ze znakiem od -2 k-1 do 2 k-1 1, gdzie k to ilość bitów użytych do zapisania liczby 2
Liczby zmiennoprzecinkowe Liczbę zmiennoprzecinkową zapisujemy jako: x=m*r E gdzie M nazywamy mantysą, R podstawą, a E - wykładnikiem. W nauce posługujemy się notacją z R=10. Komputery zwykle przechowują liczby w formacie z R=2. Mając R, do przedstawienia liczby zmiennoprzecinkowej wystarczy znajomość dwóch liczb całkowitych: M i E. Zakres wartości to 2 emin < x < 2 emax Dwie liczby są różne, gdy ich mantysy różnią się o minimalną wartość α: x 1 =M 2 e, x 2 = M 2 e, x=x 1 x 2 = 2 e, x x = M = 20 2 n=2 n 3
Reprezentacja liczb w ROOT W ROOT zdefiniowane są następujące typy: Nazwa Typ Ilość bajtów Minimum Maximum UChar_t Integer 1 0 255 Char_t Integer 1-128 127 UShort_t Integer 2 0 65535 Short_t Integer 2-32768 32767 UInt_t Integer 4 0 4294967295 Int_t Integer 4-2147483647 2147483647 ULong_t Integer 4 0 4294967295 Long_t Integer 4-2147483647 2147483647 ULong64_t Integer 8 0 18446744073709551615 Long64_t Integer 8-9223372036854775808 9223372036854775807 Float_t Float 4 1.175494351e-38 3.402823466e+38F Double_t Float 8 2.2250738585072014e-308 1.7976931348623158e+308 Typy te są niezależne od architektury, na której działa ROOT, co jest warunkiem koniecznym do przenośności programów 4
Generatory liniowe kongruentne Komputer, jako urządzenie deterministyczne, może jedynie generować liczby pseudolosowe Najlepiej zbadanym algorytmem jest: x j 1 = a x j c mod m tzw. generator liniowy kongruentny (LCG) Ma on okres równy maksymalnie m Aby generator miał maksymalny okres: c i m nie mogą mieć wspólnych dzielników b = a 1 jest wielokrotnością każdej liczby pierwszej p, która jest dzielnikiem m b jest wielokrotnością 4, o ile m jest również wielokrotnością 4 5
Elementy podstawowe rzędy Rozpatrujemy liczby a i m, które nie mają wspólnych dzielników. Najmniejszę liczbę λ, która dla ustalonego a spełnia równanie: a mod m=1 nazywamy rzędem a modulo m. Wszystkie liczby a, które mają maksymalne możliwe λ(m) to elementy podstawowe modulo m. Przykład: m = 13. 2 1 =2 mod 13 =2, 2 2 =4 mod 13 =4, 2 3 =8 mod 13 =8, 2 4 =16 mod 13 =3, 2 5 =32 mod 13 =6, 2 6 =64 mod 13 =12, 2 7 =128 mod 13 =11, 2 8 =256 mod 13 =9, 2 9 =512 mod 13 =5, 2 10 =1024 mod 13 =10, 2 11 =2048 mod 13 =7, 2 12 =4096 mod 13 =1 a=2 λ=12, a=3 λ=3, a=4 λ=6, a=5 λ=4, a=6 λ=13, a=7 λ=14, a=8 λ=4, a=9 λ=3, a=10 λ=6, a=11 λ=14, a=12 λ=3 6
Przyjmując c=0 Gen. liniowe multiplikatywne x j 1 = a x j mod m otrzymujemy generator multiplikatywny liniowy kongruentny (MLCG) Są one szybsze, ale nie dają nigdy wartości 0 i mają krótsze okresy Istnieje twierdzenie, które mówi, że dla danego m, a, x 0 i c=0 maksymalny okres ciągu liczb losowych równy jest rzędowi λ(m). a musi być wtedy elementem podstawowym modulo m, a x 0 oraz m nie mogą mieć wspólnych dzielników. Okres m-1 można osiągnąć tylko dla m będącego liczbą pierwszą. 7
Testowanie jakości generatorów Wykonujemy dwuwymiarowy wkres par (x i, x i+1 ) Obsadzonych będzie jedynie (maksymalnie) m z m 2 węzłów Szukamy prostych łączących obsadzone węzły sieci, a następnie wybieramy największą z odległości d 2 między nimi. Dla rozkładów jednostajnych wielkość ta przybiera wartości w pobliżu minimum: d 2 m -1/2, co oznacza, że przestrzeń jest równomiernie wypełniona Dla rozkładów niejednostajnych (przy źle dobranych parametrach a i m) d 2 >> m -1/2 8
Jakość rozkładów - ilustracja 0,49cm 0,89cm 0,83cm 1,77cm 1cm m -1/2 Rozkład po lewej stronie ma d 2 dużo większe niż m -1/2 =0.094 Rozkład po prawej ma d 2 m -1/2, co oznacza, że dla danego m dobrano optymalny parameter a 1cm 9
Kombinacja generatorów liniowych oddzielnie naprzemiennie Najlepsze wyniki (najdłuższy okres) otrzymuje się łącząc ze sobą kilka (l) generatorów liniowych Maksymalny okres p równy jest wtedy: p=2 l 1 j=1 m j 1 l 10
Transformacja rozkładu jednorodnego Transformację rozkładu jednostajnego możemy wykorzystać jako prosty sposób generacji liczb losowych o skomplikowanych gęstościach prawdopodobieństwa g(y) y f(x) 1 1,02cm dy y=y(x)=? dx 1,59 x f x dx=g y dy gdy f x 1 dg y g y dy=dx dx= dg y x=g y y=g 1 x y min =G 1 0, y max =G 1 1 0 1 x 11
Przykład rozkład Breita-Wignera Szukamy sposobu generacji liczb z rokładu: g y = 2 2 4 y a 2 2 Najpierw liczymy dystrybuantę: x=g y = 2 y 2 4 z a 2 2 dz którą można scałkować przez zamianę zmiennych otrzymując: arctg 2 y a / x y = 1 2 Odwracając funkcję otrzymujemy: y x =a 2 tg { x 1 2 } A granice transformują się następująco: y 0 =a 2 tg { 2 } = y 1 =a 2 tg { 2 } = 12
Rozkład Breita-Wignera rysunek Tak wygląda rozkład Breita-Wignera (po prawej) otrzymany przez transformację rozkładu jednostajnego (po lewej) 13
Metoda von Neumanna Metody generacji liczb losowych przedstawione dotychczas mają ograniczone pole zastosowań. Wymagają znajomości postaci analitycznej dystrbuanty, a także jej odwracalności. Ich stopień skomplikowania rośnie też gwałtownie przy wzroście ilości zmiennych funkcji gęstości Wprowadzimy metodę generacji funkcji pseudolosowych, która wymaga jedynie znajomości funkcji gęstości prawdopodobieństwa i nadaje się do generacji liczb losowych z praktycznie dowolną taką funkcją 14
akceptujemy M. von Neumana przykład odrzucamy Generujemy parę liczb z rozkładu jednostajnego (y i, u i ) Sprawdzamy, czy u i <g(y i ) Jeśli tak, akceptujemy liczbę y i, jeśli nie odrzucamy ją Otrzymany rozkład jest opisany gęstością g(y) 15
Metoda von Neumanna definicje Dana jest funkcja g(y) (nie unormowana) Należy znaleźć jej maksymalną wartość g max, lub wartość g up, co do której zachodzi g up > g(y) Z rozkładu jednorodnego generujemy pary (y i, u i ) Granice zmienności y i powinny odpowiadać dziedzinie funkcji g(y). u i generujemy w granicach (0, u max ), gdzie u max g max Dla każdej pary sprawdzamy warunek u i <g(y i ) Jeśli jest on spełniony akceptujemy y i Otrzymany zbiór wartości y stanowi zestaw liczb losowych opisany gęstością prawdopodobieństwa proporcjonalną do funkcji g(y) 16
Metoda von Neumanna c.d. Wydajność metody von Neumanna (procent par zaakceptowanych) jest opisana wzorem: b a g y dy E= b a u max Jest ona maksymalna, gdy u max = g max Metodę von Neumanna można uogólnić na funkcję dowolnej ilości zmiennych f(x 1, x 2,..., x n ) W takim przypadku generujemy zbiór liczb losowych z rozkładu jednostajnego (x i 1, xi 2,..., xi n, ui ) Sprawdzamy warunek u i < f max (x 1, x 2,..., x n ) Akceptujemy (lub odrzucamy) cały zestaw zmiennych (x i 1, xi 2,..., xi n ) 17
Metoda von Neumanna z f. pomocniczą Mamy funkcję g(y). Szukamy takiej funkcji s(y), dla której const s(y) g(y), oraz łatwo wygenerować zmienne losowe opisane funkcją s(y) Losujemy parę liczb: y i zgodnie z rozkładem s(y) oraz u i z rozkładu jednostajnego (0, 1.0) Z warunku u i s(y)<g(y i ) akceptujemy (lub nie) y i Zaakceptowane liczby podlegają rozkładowi g(y) P Y y = a y s t g t s t dt= a y g t dt=g y G a Wydajność takiej metody wynosi: b g y dy a E= b a s y dy 18
M. von Neumanna z f. pom. - przykład Dana jest gęstość prawdopodobieństwa: g y =cos x / x 1 1/4, 0 y 2 Określa ona dwie wartości: g(0) = c oraz g(2) = d W zwykłej metodzie von Neumanna mamy u max = c Jako funkcję pomocniczą wybieramy prostą przechodzącą przez punkty (0, c), (2, d). d 2,55cm c 8,15cm Rozwiązując prosty układ równań: c=a 0 b d=a 2 b otrzymujemy s(y): s y = d c 2 y c 19
Przykład c.d. Co daje dystrybuantę: S y = d c y 2 cy 4 Oraz funkcję odwrotną: y=s 1 x =2 c c 2 c d c d Generujemy zmienną losową x w granicach S(0) =0 do S(2) = c+d Losujemy zmienną testową u z (0.0, 1.0) Akceptujemy y=s -1 (x), gdy u<g(y)/s(y) Wydajność wzrasta o 50% 20
Genracja liczb o rozkładzie normalnym Rozkład normalny: f x = 1 2 2 e x /2 nie ma analitycznej dystrybuanty, nie można więc stosować metody zamiany zmiennych. Używamy metody biegunowej Boxa i Mullera. Generujemy parę liczb (u 1, u 2 ) z rozkładów jednostajnych. Dokonujemy zamiany zmiennych v 1 =2u 1 1, v 2 =2u 2 1 Obliczamy s = v 1 2 + v 22. Gdy s 1, odrzuamy parę. Otrzymujemy dwie liczby opsiane roz. normalnym: x 1 =v 1 2/ s ln s x 2 =v 2 2/ s ln s 21
Całkowanie metodą Monte-Carlo Rozważmy wzór na wydajność metody von Neumanna y max E= y min g y dy Przekształcając, mamy: = N zaakceptowane y max y min u max N wszystkie y max I = ymin g y dy= N zaakceptowane N wszystkie Możemy obliczyć DOWOLNĄ całkę oznaczoną poprzez prostą generację liczb z rozkładu jednostajnego! Może to być również funkcja dowolnie wielu zmiennych. Względna dokładność wyznaczenia całki wynosi: I I = 1 N zaakceptowane y max y min u max 22
Całka Monte-Carlo liczba π Obliczymy wartość liczby π przy pomocy metody Monte-Carlo. Użyjemy funkcji: g y = R 2 y 2, 0 y R ;0, 0 y R Jej całka w granicach (0.0, 1.0) wynosi π/4. Dla prostoty przyjmiemy R=1.0. 23
Prawo propagacji błędów Możemy obliczyć macierz błędów wielkości Y: C y =T C x T T, Błędy zmiennych Y zależą od całej macierzy kowariancji, a nie tylko od błedów zmiennej x. Tylko i wyłącznie, gdy zmienne X są niezależne czyli c ij =0, dla i j, czyli gdy macierz C x jest diagonalna, możemy napisać: 2 Y i = n y i j=1 x j 2 2 X j Co daje nam, po utożsamieniu σ z błędem pomiarowym, prawo propagacji błędów: y i = j=1 n y i x j 2 x j 2 24