Come generare i numeri random con diverse distribuzioni su Octave
In questa lezione ti spiego come si genera un numero casuale su Octave usando diverse distribuzioni di probabilità.
Octave ti permette di generare i numeri random da diverse distribuzioni di probabilità (esponenziale, normale, Poisson, gamma). A seconda dei casi, puoi scegliere quella più realistica per simulare un fenomeno.
Ti faccio qualche esempio pratico.
Quando generi un numero pseudocasuale con il comando rand() o randi() Octave usa l'algoritmo Mersenne Twister
>> rand(1)
In questo caso i valori sono uniformemente distribuiti su tutti i valori possibili.
Ad esempio, genera una matrice 100x100 casuale e assegna la matrice alla variabile x
Questo comando genera 10.000 valori casuali.
>> x=rand(100);
Poi visualizza la distribuzione dei valori in un istogramma
>> hist(x)
I valori della distribuzione sono equamente distribuiti tra 0 e 1
Nota. Nel diagramma l'asse orizzontale indica i valori casuali da 0 a 1. L'asse verticale indica la frequenza con cui i valori si ripetono.
Per generare i numeri casuali con altre distribuzioni di probabilità devi utilizzare delle funzioni diverse.
La distribuzione esponenziale
Per generare un numero casuale tramite la distribuzione esponenziale usa la funzione rande()
>> rande(1)
ans = 0.90844
Se vuoi generare una matrice 3x2 con valori casuali digita rande(3,2)
>> rande(3,2)
ans =
1.09340 0.28265
0.10781 1.72641
0.20653 0.87235
Per capire cosa è cambiato, genera una matrice 100x100 di valori casuali usando la funzione rande()
>> x=rande(100);
Poi visualizza l'istogramma delle frequenze con la funzione hist()
>> hist(x)
Nella distribuzione esponenziale i valori casuali sono concentrati nei primi valori del range.
I valori vicini allo zero sono più frequenti. La frequenza si riduce esponenzialmente nei valori più alti.
La distribuzione normale
Per generare un numero casuale con la distribuzione normale usa la funzione randn()
>> randn(1)
ans = 0.85251
Se invece vuoi creare una matrice 2x3 con valori random digita randn(2,3)
>> randn(2,3)
ans =
-0.32674 2.24641 -0.19528
-0.37856 0.13721 0.41417
Per capire le caratteristiche della distribuzione normale, genera una matrice 100x100 di valori casuali
>> x=randn(100);
Poi visualizza l'istogramma delle frequenze con la funzione hist()
>> hist(x)
In questo caso i valori più frequenti sono quelli intorno allo zero.
La frequenza si riduce man mano che ci si allontana dallo zero a destra e a sinistra.
La distribuzione normale ha una classica forma a campana.
La distribuzione Poisson
Per generare i numeri casuali con la distribuzione Poisson usa la funzione randp()
>> randp(1)
ans = 3
La distribuzione Poisson genera numeri casuali intorno a un valore medio.
Esempio. Se l'argomento della funzione randp(1) è uguale a 1, la funzione genera numeri random in una distribuzione di Poisson con media uguale a 1.
Per creare una matrice 2x3 composta da valori casuali intorno a 5 digita randp(5,2,3)
>> randp(5,2,3)
ans =
3 7 6
5 2 2
Ora genera una matrice 100x100 di valori casuali fissando 5 come valore centrale.
>> x=randp(5,100,100)
Poi visualizza l'istogramma delle frequenze con la funzione hist()
>> hist(x)
Nell'istogramma i valori casuali vicini al valore 5 sono più frequenti rispetto agli altri.
La distribuzione gamma
Per generare i numeri casuali con la distribuzione gamma usa il comando randg()
>> randg(1)
ans = 2.5621
Per produrre una matrice 2x3 casuale intorno al valore 100 digita randg(100,2,3)
>> randg(100,2,3)
ans =
101.843 98.346 87.956
93.809 99.350 93.122
Ora genera una matrice 100x100 con la distribuzione gamma intorno al valore centrale 5
>> x = randg(5,100,100)
Poi visualizza l'istogramma delle frequenze con la funzione hist()
>> hist(x)
Nella distribuzione gamma i valori vicini al valore centrale sono quelli più frequenti.
In questo modo puoi generare numeri random anche usando diverse distribuzioni di probabilità.
Nota. Le funzioni rande(), randn(), randp() e randg() hanno gli stessi parametri della funzione rand(). Puoi usare queste funzioni per generare singoli valori casuali, vettori oppure matrici composte da valori random.
Se questa lezione online di StemKB su Octave è utile, continua a seguirci.