Introduzione |
In questa esercitazione genereremo, a partire da numeri uniformente
distribuiti, numeri casuali distribuiti
secondo una distribuzione f(x) qualunque.
Per verificare che i numeri estratti siano effettivamente distribuiti
secondo le funzioni desiderate fitterete gli istogrammi delle variabili estratte
con la densità di probabilità opportuna (correttamente normalizzata).
verificando di "ritrovare" i parametri impostati in simulazione.
Esercizio 1
Esercizio 2
Esercizio 3
Esercizio 1
Generazione di numeri distribuiti secondo una funzione f(x)
utilizzando il metodo di reiezione.
Provate ad esempio la funzione
double reiezione(double f(double*, double*), double* par,
double fmax, double xmin, double xmax)   o
double reiezione(TF1 f,
double fmax, double xmin, double xmax)
Esercizio 2
Generazione di numeri distribuiti secondo la funzione f(x) utilizzando
il metodo di inversione (il metodo e' valido solo per funzioni integrabili).
Applicate il metodo alla funzione sqrt(x) in [0,1].
Notate che con questo metodo, per ogni estrazione di un numero uniformemente
distribuito, si ottiene un numero della sequenza desiderato.
Esercizio 3
Generazione di numeri distribuiti secondo una gaussiana utilizzando
il metodo della gaussiana bidimensionale.
Questo metodo permette, a partire da due numeri η1
e
η2distribuiti uniformemente,
di ottenere due numeri x e y distribuiti gaussianamente
attraverso le trasformazioni:
double gaussiana2D(){ double x; static double y; static bool compute = true; if (compute){ // calcolo x e y una volta ogni due chiamate compute = false; return x; } else { compute = true; return y; } }