Verifica della distribuzione uniforme?
Ciao a tutti. Sto scrivendo un programma che prenda in un vettore 20000 numeri casuali da 1 a 100. Che calcoli gli devo far fare per verificare che i numeri sono distribuiti uniformemente? Qual'è il metodo più semplice? Grazie e buone feste.
No no.. il mio è un problema matematico.. non m'importa se con la funzione rand i numeri che escono sono sicuramente casuali. Io devo fare comunque la verifica attraverso operazioni aritmetiche.. senza funzioni prestabilite. Diciamo che è un esercizio. Non so.. dovrei forse calcolare la frequenza con cui è uscito ogni numero? mi sembra un po' dispendioso.. grazie comunque per la risposta.
1 risposta
- Anonimo1 decennio faRisposta preferita
Dipende dal linguaggio che stai usando.
Molti linguaggi di programmazione oggigiorno hanno già incorporate delle routine per generare numeri pseudo-random già uniformemente distribuiti (in Python c'è random.uniform(), in Java Random.nextInt(), in Perl random_uniform in Math::Random, etc etc); altri linguaggi, come il C, usano dei generatori lineari congruenziali per generare sequenze di numeri pseudo-random distribuiti sul range degli interi (0,2^(32)-1) e che con una buona approssimazione si comportano come numeri distribuiti uniformemente (rand()/((double)RAND_MAX+1) genera degli pseudo-random uniformi su [0,1]).
———————————
Esistono dei metodi per controllare l'uniformità (i test di uniformità), ma non avendone mai operati posso dirti poco a riguardo.
Posso, tuttavia, rimandarti a una pagina che spiega abbastanza bene come funzionano:
http://www.shadlen.org/ichbin/random/testing/testi...
Qui viene spiegato usando come base degli RNG anziché LCG, ma il procedimento dovrebbe comunque essere lo stesso: