Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Kako bi napravili generator slučajnih brojeva iz Gama raspodele

  • 7 odgovora
  • 7.731 pregleda

Najnovija ↓

Kako bi napravili generator slučajnih brojeva iz Gama raspodele 17.03.2008. u 19:38 · pre 226 meseci #1
Rec je o sledećem:(da bi lakše pojasnio poslužiću se koordinatnim sistemom) U okviru koordinatnog sistema postoji osnovni oblik Gama funkcije G(2,1,) ucrtan tako da vrednosti na X-osi uzimaju vrednosti od 0 do 1 sa korakom od 0,01. Na Y-osi koordinatnog sistema nalazi se vrednosti funkcije raspodele. Svakoj vrednosti sa X-ose odgovara određena vrednost sa Y-ose.
Generator bi trebao da bude formulisan tako da bira slučajne vrednosti sa X-ose u intervalu (0,1) sa korakom od 0,01, i da na osnovu njih izračunava vrednosti koje će odgovarati Gama raspodeli oblika G(2,1,).

Nadam se da se neko bavio ovim problemom
Re: Kako bi napravili generator slučajnih brojeva iz Gama raspodele 17.03.2008. u 20:50 · pre 226 meseci #2
To kako si opisao graf Gama funkcije indikuje da pricas o transponovanoj kumulativnoj distribuciji Gamma funkcije.

(c) Wikipedia:


Protpostavljam da radis random generator brojeva koji pretvara uniformni generator brojeva u generator "iskrivljen" gamma funkcijom, verovatno za neku MonteCarlo ili HyperCube simulaciju.

Kao prvo mislim da nemas potrebe da samplujes u koracima od 0.01 jer je CDF game kontinualna funkcija i postoji za svako x [0,1], tako da ti je sasvim ok da samplujes za bilo koji realan broj iz tog opsega. E sad :), posto ovo ukljucuje reseavanje integralne jednacine :

x = cdf(y) = integral (0 do y) od pdf(a, 2, 1)*da po x, gde je pdf distribucija verovatnoce bazirana na gama funkciji, i koja je sama po sebi integral, smucice ti se zivot da sve to iskodiras. Ali, pomoc postoji. U zavisnosti od toga koji programski jezik koristis postoje vec gotove matiematicke biblioteke koje imaju funkcije za samplovanje cdf-a:

C, C++: GSL - GNU Scientific Library GPL licenca
.NET: nMath managed library - komercijalni paket, u principu managed wrapper oko BLAS i LAPACK biblioteka. Trebaju ti Core i Stats paketi.

za ostale programeske jezike ne znam, verovatno neko drugi moze da ti da vise informacija o tome.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Kako bi napravili generator slučajnih brojeva iz Gama raspodele 17.03.2008. u 23:11 · pre 226 meseci #3
Ok. U pravu si, reč je o simulaciji :)

Čitajući forum skontao sam da se dosta pravih odgovora daje onda kada je problem postavljen baš onako kako treba, pa hajde da ga definišem u pravom obliku: potrebno je napraviti generator koji će vrednost X (npr. X=150) varirati tako da odstupanje od zadate vrednosti X odgovara Gama raspodeli.

Programski jezik koji koristim za generator je C.
Re: Kako bi napravili generator slučajnih brojeva iz Gama raspodele 18.03.2008. u 11:53 · pre 226 meseci #5
Hmm, sve zavisi od toga kako hoces da "mapiras" okolinu broja X sa G(a,b), to bi trebalo da ti je u postavci zadatka.

funkcije za sve ovo imas u GSL - GNU Scientific Library. Tu imas i funkciju gsl_ran_gamma (const gsl_rng * r, double a, double b) koja vraca random broj iz gama distribucije.

Medjutim pretpostavljam da kad bi umesto standardne gama distribucije G(shape, scale) koristio opstu gama distribuciju G(location, shape, scale) uz location=X da bi iz njenog CDF-a direktno samplovanjem dobio brojeve koji ti trebaju, ali nigde nisam video biblioteku koja to direktno odradjuje, a adaptacija CDF formule po lokaciji nekako prevazilazi moje matematicke skilove :)
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Kako bi napravili generator slučajnih brojeva iz Gama raspodele 23.07.2008. u 17:02 · pre 222 meseca #6
Pozdrav.

Evo ovako, potreban mi je Generator saobracaja (paketa) sa Poasonovom raspodelom, kako bih odradio jednu simulaciju mreze (nekog rutera). Elem, problem je u tome sto mi je to prvi put da se srecem sa tako necim, i sa simulacijom i sa generatorom saobracaja. Sta je uopste generator saobracaja? Neka petlja koja se vrti i isporucuje pakete?
Koliko sam video, na netu postoje gotova resenja tog generatora u C++, medjutim, kod je strahovito nerazumljiv.
Da li neko zna nesto vise o tome, bilo kakva info ce dobro doci, jer se opasno dvoumim da batalim taj rad i pokusam sa nekim drugim.
Pozdrav :)
Re: Kako bi napravili generator slučajnih brojeva iz Gama raspodele 25.07.2008. u 17:33 · pre 222 meseca #8
Ako imas generator za bilo koju apsolutno neprekidnu raspodelu, od njega mozes napraviti generator za bilo koju drugu raspodelu. No, posto je to matematicko pitanje, neka se tema preseli na odgovarajuci forum, pa da tamo odgovorim.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme