1 van 1

Verdeling van willekeurige getallen

Geplaatst: do 04 apr 2013, 22:57
door JorisL
Hoi,

Ik ben me er nu al 2 dagen het hoofd over aan het breken hoe ik random getallen volgens een bepaalde verdeling moet genereren.

Bij een simulatie die ik moet uitvoeren zal er na een botsing een nieuwe snelheid aan een deeltje gegeven worden welke moet voldoen aan de verdeling
\(f(v_x,v_y,T)=Cv_x\exp \left( \frac{v^2}{2T}\right)\)
(1)

Deze verdeling lijkt erg veel op een normale verdeling.

Ook zo'n verdeling heb ik nodig in een ander deel. Daarvoor heb ik gekeken naar de Box-Muller transformatie. Samen met een boek(zie pdf voor uittreksel) voor verdere uitleg (en een stap voor stap afleiding in het normale geval) ben ik er dan vrij vlug uitgekomen.

Bij (1) kan ik dat niet meteen gebruiken, volgens mij zelfs in z'n geheel niet.

Ik kan stellen dat (T is een parameter)
\(P(v_x,v_y)dv_xdv_y=Cv_x\exp \left( \frac{v^2}{2T}\right) dv_xdv_y=Cv^2\cos\phi\exp \left( \frac{v^2}{2T}\right)dvdv\phi=P(v,\phi )dvd\phi\)
Maar dan kan ik de verdere methode niet gebruiken volgens mij. Omdat ik nog steeds met 2 variabelen zit.

Kan ik random getallen genereren volgens (1) deze methode?

Zo niet, is er een methode die redelijk vlug is die dat kan?

Want ik zal uiteindelijk veel botsingen moeten simuleren.

P.s. Ik wist niet zeker of dit bij kanstheorie thuishoorde dus heb het hier maar geplaatst

Joris

Re: Verdeling van willekeurige getallen

Geplaatst: do 04 apr 2013, 23:53
door 317070
JorisL schreef: do 04 apr 2013, 22:57Ik ben me er nu al 2 dagen het hoofd over aan het breken hoe ik random getallen volgens een bepaalde verdeling moet genereren.

Bij een simulatie die ik moet uitvoeren zal er na een botsing een nieuwe snelheid aan een deeltje gegeven worden welke moet voldoen aan de verdeling
\(f(v_x,v_y,T)=Cv_x\exp \left( \frac{v^2}{2T}\right)\)
(1)
Aangezien je f moet normaliseren, maken die
\(Cv_x\)
niet uit. (Als die
\(C\)
een normalisatiefactor is, dan is
\(v_x\)
automatisch irrelevant.)

Bijgevolg is f normaal verdeeld met gemiddelde 0 en variantie T, je kunt dus
\(v\)
sampelen door een een waarde
\(U_1\)
en
\(U_2\)
te sampelen uit een uniform verdeelde [0, 1):
\(v = T \sqrt{-2 \ln U_1} \cos(2 \pi U_2)\)

Re: Verdeling van willekeurige getallen

Geplaatst: vr 05 apr 2013, 14:22
door JorisL
\(v_x\)
hoort niet bij C. C is de normalisatie factor op zich.

Als ik nu een 1D systeem bekijk kom ik terug op een Rayleigh verdeling waarvoor ik de inversie methode kan toepassen.

Had de prof ook al gemaild, enkele dagen geleden. Daaruit bleek dat ik op die manier ook voor 2D systemen te werk kon door eerst de y-component als normaal verdeeld te bepalen, daarna inversie voor de x-component.

Re: Verdeling van willekeurige getallen

Geplaatst: vr 05 apr 2013, 18:20
door 317070
\(v_x\)
hoort niet bij C. C is de normalisatie factor op zich.
Maakt niet uit. Als ik een willekeurige distributie neem, vermenigvuldig met tien miljoen miljard en daarna weer normaliseer, krijg ik dezelfde distributie als ik gewoon zou normaliseren.

Dus of er nu
\(C\)
,
\(Cv_x\)
of
\(10000Cv_x\)
staat, het is net hetzelfde. Ze zijn toch onafhankelijk van
\(v\)
en maken dus niet uit voor de distributie van
\(v\)
.

Dat, of ik moet je verkeerd begrijpen.

Bedoel je eventueel dat de verdeling van
\(v_x\)
en
\(v_y\)
als volgt is en je een punt (
\(v_x\)
,
\(v_y\)
) wil sampelen?
\(P(v_x,v_y|T)=Cv_x\exp \left( \frac{v_x^2+v_y^2}{2T}\right)dv_x dv_y \)
dan kun je beter eerst
\(v_y\)
sampelen:
\(P(v_y|T)= dv_y \displaystyle\int_{-\infty}^\infty Cv_x\exp \left( \frac{v_x^2+v_y^2}{2T}\right)dv_x \)
\(P(v_y|T)= dv_y C'\exp \left( \frac{v_y^2}{2T}\right) \displaystyle\int_{-\infty}^\infty v_x\exp \left( \frac{v_x^2}{2T}\right)dv_x \)
\(P(v_y|T)= dv_y C'\exp \left( \frac{v_y^2}{2T}\right)\)
Dit is gewoon een normale verdeling.

Daarna proberen
\(v_x\)
te samplen:
\(P(v_x|v_y,T)= Cv_x\exp \left( \frac{v_x^2+v_y^2}{2T}\right)dv_x\)
Maar vermits je distributie negatief wordt, is er een randvoorwaarde die je me waarschijnlijk bent vergeten te vertellen. :D

Anyways, als ik vergeet nog naar dit topic te kijken, bekijk het volgende eens: http://en.wikipedia....tings_algorithm

Het algoritme kan sampelen uit alle distributies, maar kan misschien al te traag voor je zijn.