2013-01-22 17 views
5

Sto provando a generare 10000 numeri casuali presi da una distribuzione normale di log associata alla distribuzione normale media = 0,3 e std. dev. = 0,05 in MATLAB.Genera numeri casuali lognormali in MATLAB?

Sto utilizzando la funzione integrata lognrnd.

Il mio tentativo è quello di fare:

R = lognrnd(0.3,0.05,10000,1)

Tuttavia, quando ho tracciare l'istogramma di R utilizzando hist(R), la trama associata è normale, non registra normale.

Dove sto incasinando? Se la media = 0,3 e std. dev. = 0,05 della distribuzione normale, i numeri normali di log generati non dovrebbero avere una media = 0,3 e std. dev = 0,05?

Grazie ragazzi.

risposta

6

I numeri generati sono in realtà dalla distribuzione log-normale. Il grafico sembra solo simile per i tuoi parametri. Confronta hist(R) con hist(log(R)) - la forma è praticamente la stessa.

Quanto media e la deviazione, un'occhiata a lognrnd documentation:

mu and sigma are the mean and standard deviation, respectively, 
of the associated normal distribution. 

quindi generato numeri dovrebbero avere media e la deviazione differente.

MODIFICA: non sono sicuro se Matlab consente di specificare direttamente i parametri di distribuzione lognormale, ma è possibile ricavare un set di parametri dall'altro. Supponendo M e V sono desiderati parametri della variabile lognormale, è possibile calcolare mu e sigma utilizzando seguenti formule:

x = 1 + V/M^2 
sigma = sqrt(log(x)) 
mi = log(M/sqrt(x)) 

Vedi wikipedia per la conversione opposta.

+0

OK - cosa succede se voglio generare un numero casuale da una distribuzione normale del registro che ha una media = 0,3 e std. dev = 0,05? – Zack

+1

Vorrei aggiungere che se dovessi aumentare il tuo sigma (per esempio, .5) e usare un istogramma più raffinato 'hist (R, 100)' vedresti qualcosa di più simile alla curva lognormale distorta che ti aspettavi. – RussH

+0

Grazie per aver accettato, ma ho fatto un errore nei calcoli. Vedi le formule aggiornate (le ho testate e i risultati sembrano corretti). – rburny