lettura facile

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

la distribuzione dei valori casuali

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.

la distribuzione esponenziale

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 distribuzione normale

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.

come funziona la distribuzione di Poisson

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.

la distribuzione gamma

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.

 




Non hai risolto il tuo problema? Scrivi una domanda




FacebookTwitterLinkedinLinkedin