1 KADD – Generacja liczb losowych 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
24
Embed
Generacja liczb pseudolosowychkisiel/kadd/Wyklad5.pdf · możemy wprowadzić zapis dopełniający:-213=1111111100101010 (binarnie – 16bitowo) Liczby bez znaku mają wartości od
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1KADD – Generacja liczb losowych
Generacja liczb pseudolosowych■ Zapis liczb w komputerze■ Generatory liczb pseudolosowych
■ 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
2KADD – Generacja liczb losowych
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
3KADD – Generacja liczb losowych
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ść α:
x1=M⋅2e , x2= M ⋅2e , x=x1−x2=⋅2e , x
x=
M
= 20
2n=2−n
4KADD – Generacja liczb losowych
Reprezentacja liczb w ROOT
■ W ROOT zdefiniowane są następujące typy:
■ Typy te są niezależne od architektury, na której działa ROOT, co jest warunkiem koniecznym do przenośności programów
■ 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ą.
x j1=a⋅x j mod m
8KADD – Generacja liczb losowych
Testowanie jakości generatorów
■ Wykonujemy dwuwymiarowy wkres par (xi, x
i+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 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) d2 >> m-1/2
9KADD – Generacja liczb losowych
Jakość rozkładów - ilustracja
■ Rozkład po lewej stronie ma d2 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
1,77cm
0,49
cm
1cm
0,89cm 0,83
cm
1cm
m-1/2
10KADD – Generacja liczb losowych
Kombinacja generatorów liniowych
■ 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
lm j−1
oddzielnieoddzielnie naprzemiennienaprzemiennie
11KADD – Generacja liczb losowych
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
x
y=y(x)=?y
g(y)
1,59dx
1,02
cm
dy
f xdx=g ydy
x
f(x)
0 1
1
gdy f x≡1
dG y≡gydy=dx
∫ dx=∫ dG y
x=G y
ymin=G−10 , y
max=G−11
y=G−1x
12KADD – Generacja liczb losowych
Przykład – rozkład Breita-Wignera■ Szukamy sposobu generacji liczb z rokładu:
■ Najpierw liczymy dystrybuantę:
którą można scałkować przez zamianę zmiennych otrzymując:
■ Odwracając funkcję otrzymujemy:
■ A granice transformują się następująco:
g y= 2
⋅2
4 y−a2 2
x=G y= 2
⋅∫−∞
y 2
4 z−a2 2 dz
x y=arctg 2 y−a/
1
2
y x=a2
tg { x−12 }
y 0=a2
tg {−2 }=−∞ y 1=a
2
tg {2 }=∞
13KADD – Generacja liczb losowych
Rozkład Breita-Wignera – rysunek
■ Tak wygląda rozkład Breita-Wignera (po prawej) otrzymany przez transformację rozkładu jednostajnego (po lewej)
14KADD – Generacja liczb losowych
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ą
15KADD – Generacja liczb losowych
M. von Neumana – przykład■ 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)
akceptujemyakceptujemy
odrzucamyodrzucamy
16KADD – Generacja liczb losowych
Metoda von Neumanna – definicje■ Dana jest funkcja g(y) (nie unormowana)■ Należy znaleźć jej maksymalną wartość g
max, lub
wartość gup, co do której zachodzi g
up > g(y)
■ Z rozkładu jednorodnego generujemy pary (yi, u
i)
■ Granice zmienności yi powinny odpowiadać
dziedzinie funkcji g(y). ui generujemy w granicach
(0, umax
), gdzie umax
≥ gmax
■ Dla każdej pary sprawdzamy warunek ui<g(y
i)
■ Jeśli jest on spełniony akceptujemy yi
■ Otrzymany zbiór wartości y stanowi zestaw liczb losowych opisany gęstością prawdopodobieństwa proporcjonalną do funkcji g(y)
17KADD – Generacja liczb losowych
Metoda von Neumanna – c.d.
■ Wydajność metody von Neumanna (procent par zaakceptowanych) jest opisana wzorem:
■ 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 (xi
1, xi
2, ..., xi
n, ui)
■ Sprawdzamy warunek ui < f
max(x
1, x
2, ..., x
n)
■ Akceptujemy (lub odrzucamy) cały zestaw zmiennych (xi
1, xi
2, ..., xi
n)
E=∫a
bg ydy
b−aumax
18KADD – Generacja liczb losowych
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: yi zgodnie z rozkładem s(y)
oraz ui z rozkładu jednostajnego (0, 1.0)
■ Z warunku ui·s(y)<g(y
i) akceptujemy (lub nie) y
i
■ Zaakceptowane liczby podlegają rozkładowi g(y)
■ Wydajność takiej metody wynosi:
E=∫a
bg ydy
∫a
bs ydy
P Y y=∫a
yst
g t st
dt=∫a
yg t dt=G y−Ga
19KADD – Generacja liczb losowych
M. von Neumanna z f. pom. - przykład■ Dana jest gęstość prawdopodobieństwa:
■ 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).
g y=cos x/ x11/4, 0 y2
2,55
cm8,
15cmc
d
■ Rozwiązując prosty układ równań:
otrzymujemy s(y):
c=a⋅0 bd=a⋅2 b
s y= d−c2
yc
20KADD – Generacja liczb losowych
Przykład – c.d.■ Co daje dystrybuantę:
■ Oraz funkcję odwrotną:
■ 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%
y=S−1 x=2c−c2−c−d
c−d
S y= d−c4
y2cy
21KADD – Generacja liczb losowych
Genracja liczb o rozkładzie normalnym
■ Rozkład normalny:
nie ma analitycznej dystrybuanty, nie można więc stosować metody zamiany zmiennych. Używamy metody biegunowej Boxa i Mullera.
■ Generujemy parę liczb (u1, u
2) z rozkładów
jednostajnych. Dokonujemy zamiany zmiennych v
1=2u
1 – 1, v
2=2u
2 – 1
■ Obliczamy s = v12 + v
22. Gdy s≥1, odrzuamy parę.
■ Otrzymujemy dwie liczby opsiane roz. normalnym:
f x= 1
2e−x2/2
x1=v1−2/ s ln s x2=v2−2/ s ln s
22KADD – Generacja liczb losowych
Całkowanie metodą Monte-Carlo
■ Rozważmy wzór na wydajność metody von Neumanna
■ Przekształcając, mamy:
■ 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=∫ymin
ymax
g y dy=N zaakceptowane
N wszystkie ymax− ymin umax
E=∫ymin
ymax
g y dy
ymax− ymin umax
=N zaakceptowane
N wszystkie
II= 1
N zaakceptowane
23KADD – Generacja liczb losowych
Całka Monte-Carlo – liczba π■ Obliczymy wartość liczby π przy pomocy metody
Monte-Carlo. Użyjemy funkcji:
■ Jej całka w granicach (0.0, 1.0) wynosi π/4. Dla prostoty przyjmiemy R=1.0.
g y =R2 − y2 , 0 yR ;0, 0 yR
24KADD – Generacja liczb losowych
Prawo propagacji błędów
■ Możemy obliczyć macierz błędów wielkości Y:
■ 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ć:
■ Co daje nam, po utożsamieniu σ z błędem pomiarowym, prawo propagacji błędów: