Numeri pseudocasuali
• Il periodo deve essere il pi` u lungo possibile;
• la distribuzione deve essere uniforme in [0, 1]
p(x)=costante in [0, 1];
• le correlazioni devono essere trascurabili
D
x
n+1· x
nE
−
Dx
n+1Ehx
ni = 0;
• distribuzioni uniformi:
– metodi lineari congruenti;
– metodi Fibonacci lagged;
– metodi non lineari, etc
• distribuzioni non uniformi:
– distribuzione gaussiana e metodo di Box- M¨ uller
– distribuzione qualsiasi;
Metodi lineari congruenti (LCM)
• x
n+1= (a · x
n+ b) mod m;
• di solito b = 0;
• a ` e primo;
• m ` e primo, oppure m = 2
nProblema
overflow per moltiplicazione per a.
Soluzione
m = a · q + r con r < q scrivo x
n= z · q + w allora
a · x
n= a · (z · q + w) = a · q · z + a · w
= (a · q + r) · z − r · z + a · w a · x
n= m · z − r · z + a · w
con r · z < q · z < x
n< m e a · w < a · q < m
Quindi a · w − r · z ` e minore di m ed il risulato ` e a · x
nmod m = a · w − r · z(+m) =
a · (x
nmod m) − r · (x
n/q) (+m) Esempio:
a = 16807 m = 2147483647 q = 127773 r =
2836
Metodi Fibonacci lagged
• Simili alla successione di Fibonacci, ma con pi` u termini;
• usano LCM come ”starter” per i primi ter- mini;
• hanno periodo molto lungo e scarse corre- lazioni;
• pi` u successioni indipendenti con la stessa
regola. Occorre una certa attenzione alle
condizioni iniziali;
Esempio: r250
• x
n=
P250j=1a
qx
n−q• periodo N ≈ 2
250• a
q= 0 escluso che per q = 103, 250 per cui a
q= 1
• quindi x
n= x
n−103+ x
n−250• in realt` a si usa xor: x
n= x
n−103xor x
n−250• memorizzo gli ultimi 250 termini in uno
stack circolare per non dover spostare ad
ogni passo un intero vettore
Metodo di Box-M¨ uller
Voglio una distribuzione gaussiana: se x
1e x
2hanno distribuzione uniforme p
xin (0, 1) cerco la distribuzione p
ydi y
1e y
2definiti da
y1 = p
−2 ln x1sin(2πx2) y2 = p
−2 ln x1 cos(2πx2)
Quindi
x1 = exp −12(y12 + y22)e
p
y(y
1) p
y(y
2) dy
1dy
2= p
x(x
1) p
x(x
2) dx
1dx
2= dx
1dx
2p
y(y
1) p
y(y
2) ∂(y
1, y
2)
∂(x
1, x
2) = 1
∂(y1, y2)
∂(x1, x2) =
−1 x1
√−2 ln x1 sin(2πx2) 2π√
−2 ln x1cos(2πx2)
−1 x1
√−2 ln x1 cos(2πx2) −2π√
−2 ln x1 sin(2πx2)
∂(y
1, y
2)
∂(x
1, x
2) = 2π x
1Percio‘ py(y1) py(y2) = x1 = 1
2πe−(y21+y22)/2 py(y1) = 1
√2πe−y12/2 py(y2) = 1
√2πe−y22/2
Gaussiana con media e varianza qualsiasi
• voglio una distribuzione di probabilit` a della forma
√ 1
2πσ exp
−(x − µ)
2/2σ
2• per ottenere la stessa distribuzione con me- dia µ basta aggiungere µ ai numeri random generati
• per ottenere una varianza σ
2basta molti- plicare il numero random per σ . Se
p
x(x) = 1
√ 2π exp
−x
2/2
allora, definendo y = σ · x ottengo
p
y(y) = 1
√ 2πσ exp
−y
2/2σ
2Distribuzioni qualsiasi
Se voglio ottenere una distribuzione con pro- babilit` a p(x) arbitraria limitata superiormente.
• suppongo che mi interessi 0 ≤ x ≤ a
• suppongo che p(x) ≤ b ∀x in [0, a]
• scelgo un numero a caso x con distribuzione uniforme nel range [0, a]
• scelgo un secondo numero a caso y con yǫ[0, b]
• se y < p(x) accetto il numero, altrimenti
procedo con altri due numeri
Applicazioni
Integrazione con numeri pseudocasuali Data f (x) voglio calcolare
Z b
a
f (x) dx
dove so che f (x) ` e compresa tra zero e f
max.
• genero coppie di numeri che corrispondono a un punto nel rettangolo che ha lati tra a e b e tra zero e f
max.
• calcolo la percentuale P di punti che cadono sotto la curva y = f (x)
• l’integrale vale P · (b − a) · f
maxTest di uniformit` a e correlazioni
0 0.5 1
x 0.0496
0.0498 0.05 0.0502 0.0504
frazione
0 0.2 0.4 0.6 0.8 1
xn+1
0 0.2 0.4 0.6 0.8 1
x n