Lasciatemi prefazione tutto questo con il fatto che niente di tutto questo è veramente casuale, ho Sto parlando di generatori di numeri pseudo casuali.
Lasciatemi anche dire che non ho mai dovuto fare questo per il codice di qualità della produzione. Ho fatto questo per un compito hw, però, in Python. Ho simulato variabili casuali di Poisson.
Il modo in cui ho fatto fatto uso dei seguenti fatti:
- Una variabile casuale di Poisson è una somma di variabili aleatorie esponenziali.
- Possiamo utilizzare il metodo di trasformazione inversa per generare variabili casuali esponenziali. http://en.wikipedia.org/wiki/Inverse_transform_sampling.
In particolare, è possibile utilizzare il fatto che: se X 1 , ..., X n sono indipendenti normali variabili aleatorie esponenziali, allora Z = min (k: X + ... + X k < & lambda;) - 1 è Poisson (& lambda;).
Così, con questo, ho scritto il seguente codice in Python per generare valori di Poisson:
utilizzo
class Poisson:
"""Generate Poisson(lambda) values by using exponential
random variables."""
def __init__(self, lam):
self.__lam = lam
def nextPoisson(self):
sum = 0
n = -1
while sum < self.__lam:
n += 1
sum -= math.log(random.random())
return n
Esempio della classe è:
# Generates a random value that is Poisson(lambda = 5) distributed
poisson = Poisson(5)
poisson_value = poisson.nextPoisson
ho postato qui perché è buono per sapere che esistono questi tipi di relazioni e questo metodo di trasformazione inversa ti offre un modo generale per affrontare la generazione di valori casuali seguendo una particolare distribuzione continua.
In realtà, sembra che il collegamento indichi anche il metodo "nextGaussian" per creare anche le variabili normali. – gnovice