Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Generisanje raspodela

[es] :: Art of Programming :: Generisanje raspodela

Strane: 1 2

[ Pregleda: 8217 | Odgovora: 27 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
..-chandran.sbs.auckland.ac.nz



+3 Profil

icon Re: Generisanje raspodela29.01.2004. u 02:08 - pre 246 meseci
Citat:
thetrooper:
Citat:
Da li nad diskretnim skupom realnih brojeva ili neprekidnim

Koliko ja znam, kompjuterski je nemoguće napraviti model skupa neprekidnih realnih brojeva, tako da bismo morali da se zadovoljimo nekim diskretnim skupom.

Ma jeste nemoguce ali mozes da gledas kao da je neprekidan pa da aproksimiras slucajnu vrednost na najblizu mogucu realnu koju racunar moze predstaviti. Da nije tako onda bi funkcija Rand() najvise vracala vrednosti oko broja 0.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Generisanje raspodela29.01.2004. u 12:18 - pre 246 meseci
Sto se tice uniformnih generatora slucajnih brojeva i teorije u vezi
njih, priznajem da sam maltene totalno neupucen. Iako je primena RNG-a
veoma siroka, covek prosto nema vremena za sve.
No, s obzirom da na IRC-u cesto diskutujem sa pametnijim ljudima od
sebe, uvek nesto novo naucim. Tako sam jednom davno cuo za gospodina
Pierre L’Ecuyer-a (http://www.iro.umontreal.ca/~lecuyer) profesora na
Univerzitetu u Montreal-u. I procitao sam jedan clanak na ovu temu, a za
ovu priliku sam ga nasao (ubio sam se trazeci):
http://www.iro.umontreal.ca/~lecuyer/myftp/papers/handstat.pdf . Takodje
prilazem i C kod koji sam koristio u par navrata.
Code:

/* uniform [0,1] random number generator
developed by Pierre Lecuyer based on a clever
and tested combination of two linear congruential
sequences
*/

/*
s1 and s2 are the seeds (nonnegative integers)
*/

#include <math.h>

double uni()
{
static long s1 = 55555;
static long s2 = 99999;
static double factor = 1.0/2147483563.0;
register long k,z;

k= s1 /53668;
s1 =40014*(s1%53668)-k*12211;
if (s1 < 0) s1 += 2147483563;
k=s2/52774;
s2=40692*(s2%52774)-k*3791;
if (s2 < 0) s2 += 2147483399;

/*
z = abs(s1 ^ s2);
*/
z= (s1 - 2147483563) + s2;
if (z < 1) z += 2147483562;

return(((double)(z))*factor);
}


Filipe, mislim da je vrlo lako odrediti vreme izvrsavanja ove funkcije. :)
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Generisanje raspodela29.01.2004. u 12:27 - pre 246 meseci
Izvanredno, ali nam još uvek treba generator uniformno raspodeljenih
pravouglih koordinata u krugu. Ti si dao početnu implementaciju
za uniformno raspodeljenu slučajnu promenljivu od 0 do 1.

f
 
Odgovor na temu

chupcko
Negde
Beograd

Član broj: 5560
Poruke: 1141

Sajt: www.google.com


+63 Profil

icon Re: Generisanje raspodela29.01.2004. u 12:41 - pre 246 meseci
Gledam i cudim se, sta li je ovde problem :)

Pola njih prica o generisaju slucajne promenljive sa uniformnom raspodelom, a pola o nekim transformacijama :).

E sada koliko sam ja shvatio problem je u tome da se napravi uniformni generator tacaka unutar nekog kruga.
Da budemo jos malo precizni, jel tako da je doupsteno koristiti neku funkciju koja daje uniformnu raspodelu unutar segmenta [0,1]. Takooooooooo jeeeeeeeee.

E da je u pitanu kvadrat, odavno bi se to resilo lako, lepo x=rand(); y=rand(); radi posao, ali mi ne zelimo kvadrat, zelimo krug.

Neko bi rekao: pa ajde daj uniformno po kvadratu, pa ce i na nekovom njegovom podskupu biti isto uniformno, pa cemo da secemo ako je izvan kruga, e to nece ici, jer ljudi zele algoritam u konacno mnogo koraka, bez petlji, jer ako u petlji cekamo da tacka padne unutar kruga, to moze da se desi posle bas puno koraka (jelte, ne mozemo da garantujemo da ce to da se desi bas u prvih 10 koraka), neko kakve je srece moze da nikada ne doceka, nema veze sto je uniformna raspodela, ona je uniformna u beskonacnosti, a konacno je diskretna :)))).

Dobro, ajde ne mora tako, sto ne bi iskoristili polarni kordinatni sistem, neka jedna promenjljiva ide od 0 do 2pi, a druga od 0 do 1 dobili bi lepo definisane tacke unutar kruga, ali ovakva raspodela nije bas uniformna, ili jeste :). Naravno tu su sada pale rasprave oko diskretnosti i nediskretnosti. da li je matrica ovakva ili ovakva ...

Nekako deluje logicno da ovako dobijen skup tacaka nije u uniformnoj rapodeli, jer blizu (0,0) ima vise tacaka gustina :)))).

E sada ispada da problem nije bas tako trivijalan, treba naci neko genijalno mapiranje segmenta [0,1] ili pak prozivoda vise segmenata [0,1] na krug. Dakle ajde da vidimo neke peanove krive ili sta vec :).

Dakle nije problem dobiti jednu uniformnu promenljivu iz segmenta [0,1], pitanje je samo da li statisticki zadovoljava uniformnost i na malim uzorcima :), nego je problem bas to, unutar kruga ....
CHUPCKO
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Generisanje raspodela29.01.2004. u 12:56 - pre 246 meseci

Pitanje koje se naravno postavlja sada je - ako je generisanje jedne
koordinate uniformno, da li je generisanje dve koordinate takodje
uniformno. Ja se, kao sto rekoh, takvim stvarima ne bavim, ali verovatno
je odgovor - DA.
Citat:
Izvanredno, ali nam još uvek treba generator uniformno
raspodeljenih pravouglih koordinata u /krugu/. Ti si dao početnu
implementaciju za uniformno raspodeljenu slučajnu promenljivu od 0 do
1.


Sto se tice onog koda gore, ja bih tu jos dodao racunanje ona dva seed-a
na osnovu UNIX timestamp-a ili neceg slicnog...

Pozdrav
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.dialup.xtra.co.nz



+3 Profil

icon Re: Generisanje raspodela29.01.2004. u 13:19 - pre 246 meseci
Citat:
filmil:
Izvanredno, ali nam još uvek treba generator uniformno raspodeljenih
pravouglih koordinata u krugu.

Znaci mi samo biramo tacku u krugu a verovatnoca da se nadje u nekom delu zavisi od povrsine tog dela, je l' tako?
Ok, ako je tako onda je lako.
Definisemo R kao rastojanje od (0,0) i Fi kao fil...kao ugao.
Ako su X i Y slucajne promenjive sa unoformnom raspodelom u [0,1] onda je R=sqrt(X) a Fi=2*Pi*Y

Dalje je lako izracunati koordinate.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Generisanje raspodela29.01.2004. u 13:30 - pre 246 meseci
Citat:
Dalje je lako izracunati koordinate.


Još samo kad bismo saznali i zašto je baš tako...

f

 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.dialup.xtra.co.nz



+3 Profil

icon Re: Generisanje raspodela29.01.2004. u 14:06 - pre 246 meseci
Neka je F(r) funkcija raspodele promenljive R. Lako je videti da je
F(r)=0 za r<0
F(r)=r^2 za 0<r<1
F(r)=1 za r>=1
jer je funkcija raspodele F(r) u stvari verovatnoca da se promenljiva R bude izmedju 0 i r (tacnije -beskonacno do r). A ta verovatnoca je proporcionalna povrsini i zato imamo r^2 u drugom slucaju.

Dalje, poznata stvar iz verovatnoce je da ako imamo neku uniformnu pormenljivu X na intervalu [0,1] i neku promenljivu R sa funkcijom raspodele F(r) onda mozemo R izabrati kao invF(X).
Znaci dovoljno je generisati X i pomocu inverzne funkcije naci R.

Ako vam treba dokaz za ovo napisacu ali me mrzi sada da razmisljam. Mada cini mi se da sam prvi put to naucio dok sam bio na ETF-u iz knjige iz verovatnoce od Merklea, pa verovatno tu ima dokaz. Nisam siguran ali cini mi se da sam tu to prvi put video.
 
Odgovor na temu

[es] :: Art of Programming :: Generisanje raspodela

Strane: 1 2

[ Pregleda: 8217 | Odgovora: 27 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.