
Le distribuzioni di probabilità per generare numeri random su Matlab
In questa lezione ti spiego come usare le distribuzioni di probabilità per generare dei numeri casuali.
Perché cambiare distribuzione? Matlab ti permette di generare dei numeri random usando diverse distribuzioni di probabilità (esponenziale, normale, Poisson, gamma). La scelta della distribuzione dipende da quello che vuoi simulare. Alcuni fenomeni reali sono simulati meglio con una distribuzione piuttosto che un'altra.
Ti faccio qualche esempio pratico.
Genera un numero pseudocasuale con la funzione rand() o randi()
>> rand(1)
In questi casi Matlab utilizza di default la distribuzione uniforme in cui tutti i valori sono uniformemente distribuiti tra tutti i valori possibili.
Ad esempio, genera una matrice 100x100 con valori casuali compresi tra 0 e 1 e assegna la matrice alla variabile x
Questo comando genera diecimila valori casuali.
>> x=rand(100);
Ora visualizza il grafico della distribuzione dei valori tramite un istogramma usando la funzione hist()
>> hist(x)
I valori casuali che hai appena generato sono equamente distribuiti tra 0 e 1
Nota. Nel diagramma l'asse orizzontale indica i valori casuali da 0 a 1 ossia il range dei valori possibili. L'asse verticale invece misura la frequenza con cui i valori si ripetono. Più o meno la frequenza è la stessa per ogni valore.
Se utilizzi altre distribuzioni di probabilità il risultato è molto diverso.
La distribuzione esponenziale
Per generare dei numeri casuali usando la distribuzione esponenziale devi usare la funzione exprnd()
>> exprnd(1)
ans = 0.90844
Ad esempio, digita exprnd(1,3,2) per generare una matrice 3x2 con valori casuali tramite la distribuzione esponenziale usando come valore medio 1.
>> exprnd(1,3,2)
ans =
1.09340 0.28265
0.10781 1.72641
0.20653 0.87235
Cosa cambia rispetto alla distribuzione uniforme?
Per capirlo genera una matrice causale 100x100 usando la funzione exprnd()
>> x=exprnd(1,100,100);
Poi visualizza i valori casuali che hai appena generato tramite un istogramma delle frequenze tramite la funzione hist()
>> hist(x)
Nella distribuzione esponenziale i valori casuali sono concentrati all'inizio dell'intervallo dei valori possibili.
In questo caso i valori vicini allo zero o al valore iniziale dell'intervallo sono molto più frequenti.
La frequenza si riduce in modo esponenziale nei valori più alti.
La distribuzione normale
Per generare dei numeri casuali usando la la distribuzione normale usa la funzione randn()
>> randn(1)
ans = 0.85251
Ad esempio, digita randn(2,3) per creare una matrice casuale 2x3
>> randn(2,3)
ans =
-0.32674 2.24641 -0.19528
-0.37856 0.13721 0.41417
Ora genera una matrice 100x100 di valori casuali usando la distribuzione normale.
>> x=randn(100);
Poi visualizza l'istogramma delle frequenze dei valori casuali tramite la funzione hist()
>> hist(x)
Nella distribuzione normale i valori più frequenti sono quelli centrali nell'intervallo dei valori possibili.
La frequenza dei valori casuali si riduce man mano che ci si allontana dallo zero sia a destra che a sinistra.
La distribuzione normale è caratterizzata da una forma a campana.
La distribuzione Poisson
Per generare dei numeri casuali con la distribuzione Poisson utilizza la funzione poissrnd()
>> poissrnd(1)
ans = 3
La distribuzione Poisson genera i numeri casuali intorno a un valore medio.
Esempio. Quando il parametro della funzione poissrnd(1) è uguale a 1, la funzione genera numeri random in una distribuzione di Poisson con media uguale a 1.
Ad esempio, digita poissrnd(5,2,3) per creare una matrice casuale 2x3 composta da valori casuali intorno al valore medio 5.
>> poissrnd(5,2,3)
ans =
3 7 6
5 2 2
Ora genera una matrice casuale 100x100 di valori casuali intorno al valore medio uguale a 5.
>> x=poissrnd(5,100,100)
Poi visualizza l'istogramma delle frequenze tramite la funzione hist()
>> hist(x)
Nella distribuzione di Poisson i valori casuali si concentrano soprattutto intorno al valore medio 5.
La distribuzione gamma
Per generare dei numeri casuali tramite la distribuzione gamma utilizza il comando randg()
>> randg(1)
ans = 2.5621
Ad esempio, digita randg(100,2,3) per produrre una matrice 2x3 casuale intorno al valore 100
>> randg(100,2,3)
ans =
101.843 98.346 87.956
93.809 99.350 93.122
Ora genera una matrice casuale 100x100 con la distribuzione gamma intorno al valore centrale 5
>> x = randg(5,100,100)
Poi visualizza l'istogramma delle frequenze tramite la funzione hist()
>> hist(x)
Nella distribuzione gamma i valori vicini al valore centrale sono quelli più frequenti.
In questo modo puoi generare numeri casuali su Matlab usando diverse distribuzioni di probabilità.
Puoi usare queste funzioni per generare singoli valori random, vettori oppure matrici composte da valori random.