2011-09-05 15 views

risposta

11

uniforme:
generare un numero casuale nell'intervallo [0,1] con uniform distribution:

double X=((double)rand()/(double)RAND_MAX); 

Exponentional
generando un exponentional random variable con parametro lambda:

-ln(U)/lambda (where U~Uniform[0,1]). 

normale:
il modo più semplice [anche se richiede tempo] sta utilizzando il numero central limit theorem, [somma abbastanza uniformemente distribuito] ma ci sono altri metodi nello wikipedia page come lo che genera 2 variabili casuali indipendenti: X, Y ~ N (0, 1)

X=sqrt(-2ln(U))*cos(2*pi*V) 
Y=sqrt(-2ln(U))*sin(2*pi*V) 
where U,V~UNIFORM[0,1] 

trasformandosi da X ~ N (0,1) alla Z ~ N (m, s^​​2) è semplice: Z = s*X + m

anche se è possibile generare questi numeri casuali, io sto da @ Suggerimento di Amigable Clark Kant di utilizzare una libreria esistente.

+0

Se la piattaforma supporta C++ 11, è disponibile il nuovo potente numero casuale. Supporta già 20 distribuzioni comuni. Vedi le [Domande frequenti su C++ 11] (http://www.stroustrup.com/C++11FAQ.html#std-random). – ManuelAtWork

Problemi correlati