Neumann 127
Transkrypt
Neumann 127
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 ■ KADD – Generacja liczb losowych 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 2k, zmienne ze znakiem – od -2k-1 do 2k-1 – 1, gdzie k to ilość bitów użytych do zapisania liczby ■ KADD – Generacja liczb losowych 2 Liczby zmiennoprzecinkowe Liczbę zmiennoprzecinkową zapisujemy jako: x=M*RE 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 2emin < |x| < 2emax ■ Dwie liczby są różne, gdy ich mantysy różnią się o minimalną wartość α: ■ x 20 −n x 1=M⋅2 , x 2= M ⋅2 , x= x 1− x 2=⋅2 , = = n =2 x M 2 e e e KADD – Generacja liczb losowych 3 Reprezentacja liczb w ROOT ■ W ROOT zdefiniowane są następujące typy: Nazwa UChar_t Char_t UShort_t Short_t UInt_t Int_t ULong_t Long_t ULong64_t Long64_t Float_t Double_t ■ Typ Ilość bajtów Integer 1 Integer 1 Integer 2 Integer 2 Integer 4 Integer 4 Integer 4 Integer 4 Integer 8 Integer 8 Float Float 4 8 Minimum 0 -128 0 -32768 0 -2147483647 0 -2147483647 0 -9223372036854775808 Maximum 255 127 65535 32767 4294967295 2147483647 4294967295 2147483647 18446744073709551615 9223372036854775807 1.175494351e-38 2.2250738585072014e-308 3.402823466e+38F 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 KADD – Generacja liczb losowych 4 Generatory liniowe kongruentne Komputer, jako urządzenie deterministyczne, może jedynie generować liczby pseudolosowe ■ Najlepiej zbadanym algorytmem jest: ■ x j1= 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 KADD – Generacja liczb losowych 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. 21=2 mod 13 =2, 2 2=4 mod 13 =4, 2 3=8 mod 13 =8, 2 4=16 mod 13 =3, 25=32 mod 13 =6, 2 6=64 mod 13 =12, 2 7=128 mod 13 =11, 2 8=256 mod 13 =9, 29=512 mod 13 =5, 2 10 =1024 mod 13 =10, 2 11=2048 mod 13 =7, 212 =4096 mod 13 =1 a=2 → λ=12, a=3 → λ=3, a=4 → λ=6, a=5 → λ=4, a=6 → λ=13, a=7 → λ=14, 14 a=8 → λ=4, a=9 → λ=3, a=10 → λ=6, a=11 → λ=14, 14 a=12 → λ=3 KADD – Generacja liczb losowych 6 Gen. liniowe multiplikatywne ■ Przyjmując c=0 x j1= 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, x0 i c=0 maksymalny okres ciągu liczb losowych równy jest rzędowi λ(m). a musi być wtedy elementem podstawowym modulo m, a x0 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 KADD – Generacja liczb losowych Testowanie jakości generatorów Wykonujemy dwuwymiarowy wkres par (xi, xi+1) ■ Obsadzonych będzie jedynie (maksymalnie) m z m2 węzłów ■ Szukamy prostych łączących obsadzone węzły sieci, a następnie wybieramy największą z odległości d2 między nimi. ■ Dla rozkładów jednostajnych wielkość ta przybiera wartości w pobliżu minimum: d2 ≈ m-1/2, co oznacza, że przestrzeń jest równomiernie wypełniona ■ Dla rozkładów niejednostajnych (przy źle dobranych parametrach a i m) d2 >> m-1/2 ■ KADD – Generacja liczb losowych 8 1cm 0,89cm 3 0,8 cm 0,49c m Jakość rozkładów - ilustracja 1,77cm m-1/2 1cm Rozkład po lewej stronie ma d2 dużo większe niż m-1/2=0.094 ■ Rozkład po prawej ma d ≈ m-1/2, co oznacza, że dla 2 danego m dobrano optymalny parameter a 9 ■ KADD – Generacja liczb losowych 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 ⋅∏ j=1 m j −1 −l −1 KADD – Generacja liczb losowych 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 y y=y(x)=? f x dx= g y dy gdy f x≡1 1,02cm ■ dy dG y≡g y dy=dx g(y) x x=G y dx 1,59 f(x) ∫ dx=∫ dG y y=G−1 x 1 y min =G−1 0 , y max =G−1 1 0 1x KADD – Generacja liczb losowych 11 Przykład – rozkład Breita-Wignera ■ Szukamy sposobu generacji liczb z rokładu: 2 ■ Najpierw liczymy dystrybuantę: 2 g y= ⋅ 4 y−a2 2 x=G y= 2 ⋅∫−∞ y 2 dz 2 2 4 z−a którą można scałkować przez zamianę zmiennych otrzymując: arctg 2 y−a/ x y= ■ 1 2 Odwracając funkcję otrzymujemy: { } 1 y x=a tg x− 2 2 ■ A granice transformują się następująco: { } − y 0=a tg =−∞ 2 2 { } y 1=a tg =∞ 2 2 KADD – Generacja liczb losowych 12 Rozkład Breita-Wignera – rysunek ■ Tak wygląda rozkład Breita-Wignera (po prawej) otrzymany przez transformację rozkładu jednostajnego (po lewej) KADD – Generacja liczb losowych 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ą ■ KADD – Generacja liczb losowych 14 M. von Neumana – przykład odrzucamy akceptujemy Generujemy parę liczb z rozkładu jednostajnego (yi, ui) ■ Sprawdzamy, czy ui<g(yi) ■ Jeśli tak, akceptujemy liczbę yi, jeśli nie – odrzucamy ją ■ Otrzymany rozkład jest opisany gęstością g(y) 15 ■ KADD – Generacja liczb losowych Metoda von Neumanna – definicje Dana jest funkcja g(y) (nie unormowana) ■ Należy znaleźć jej maksymalną wartość g , lub max wartość gup, co do której zachodzi gup > g(y) ■ Z rozkładu jednorodnego generujemy pary (yi, ui) ■ Granice zmienności y powinny odpowiadać i dziedzinie funkcji g(y). ui generujemy w granicach (0, umax), gdzie umax ≥ gmax ■ Dla każdej pary sprawdzamy warunek u <g(y ) i 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 ■ KADD – Generacja liczb losowych Metoda von Neumanna – c.d. ■ Wydajność metody von Neumanna (procent par zaakceptowanych) jest opisana wzorem: b E= ∫a g y dy b−a umax Jest ona maksymalna, gdy umax = gmax ■ Metodę von Neumanna można uogólnić na funkcję dowolnej ilości zmiennych f(x1, x2, ..., xn) ■ W takim przypadku generujemy zbiór liczb losowych z rozkładu jednostajnego (xi1, xi2, ..., xin, ui) ■ Sprawdzamy warunek ui < fmax(x1, x2, ..., xn) ■ Akceptujemy (lub odrzucamy) cały zestaw zmiennych (xi1, xi2, ..., xin) ■ KADD – Generacja liczb losowych 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 zgodnie z rozkładem s(y) i oraz ui z rozkładu jednostajnego (0, 1.0) ■ Z warunku ui·s(y)<g(yi) akceptujemy (lub nie) yi ■ Zaakceptowane liczby podlegają rozkładowi g(y) ■ y P Y y=∫a ■ y g t st dt=∫a g t dt=G y−G a st Wydajność takiej metody wynosi: b ∫a g y dy E= b ∫a s y dy KADD – Generacja liczb losowych 18 M. von Neumanna z f. pom. - przykład ■ Dana jest gęstość prawdopodobieństwa: g y=cos x/ x11/ 4, 0 y2 Określa ona dwie wartości: g(0) = c oraz g(2) = d ■ W zwykłej metodzie von Neumanna mamy u =c max ■ Jako funkcję pomocniczą wybieramy prostą przechodzącą przez punkty (0, c), (2, d). ■ Rozwiązując prosty układ równań: ■ 8,15cm c 2,55cm d KADD – Generacja liczb losowych c=a⋅0 b d =a⋅2 b otrzymujemy s(y): d −c s y= yc 2 19 Przykład – c.d. ■ Co daje dystrybuantę: S y= ■ d−c 2 y cy 4 Oraz funkcję odwrotną: 2 c− c −c−d −1 y=S x=2 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% ■ KADD – Generacja liczb losowych 20 Genracja liczb o rozkładzie normalnym ■ Rozkład normalny: 1 f x= e−x 2 2 /2 nie ma analitycznej dystrybuanty, nie można więc stosować metody zamiany zmiennych. Używamy metody biegunowej Boxa i Mullera. ■ Generujemy parę liczb (u1, u2) z rozkładów jednostajnych. Dokonujemy zamiany zmiennych v1=2u1 – 1, v2=2u2 – 1 ■ Obliczamy s = v 2 + v 2. Gdy s≥1, odrzuamy parę. 1 2 ■ Otrzymujemy dwie liczby opsiane roz. normalnym: x1=v 1 − 2/ s ln s x 2=v 2 − 2/ s ln s KADD – Generacja liczb losowych 21 Całkowanie metodą Monte-Carlo ■ Rozważmy wzór na wydajność metody von Neumanna y max E= ■ ∫y min g y dy y max − y min u max Przekształcając, mamy: y max I =∫y min = N zaakceptowane N wszystkie N zaakceptowane g y dy= y max − y min u max 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 1 = I N zaakceptowane KADD – Generacja liczb losowych 22 Całka Monte-Carlo – liczba π ■ Obliczymy wartość liczby π przy pomocy metody Monte-Carlo. Użyjemy funkcji: g y= R 2 − y 2 , 0 yR ; 0, 0 yR ■ Jej całka w granicach (0.0, 1.0) wynosi π/4. Dla prostoty przyjmiemy R=1.0. KADD – Generacja liczb losowych 23 Prawo propagacji błędów ■ Możemy obliczyć macierz błędów wielkości Y: T C y =T C x 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 cij=0, dla i≠j, czyli gdy macierz Cx jest diagonalna, możemy napisać: ■ n Y i =∑ j=1 2 ■ ∂ yi ∂xj 2 2 X j Co daje nam, po utożsamieniu σ z błędem pomiarowym, prawo propagacji błędów: y i = n ∑ j=1 ∂ yi ∂xj 2 x j KADD – Generacja liczb losowych 2 24