Generazione ed uso di numeri pseudocasuali - "E. Fermi"

Generazione
ed uso
di numeri
pseudocasuali
A.C. Neve – Numeri pseudocasuali
1
Nella maggior parte dei problemi di simulazione di sistemi reali è molto sentita l’esigenza di
poter utilizzare variabili casuali aventi una ben determinata distribuzione statistica anche se,
quasi sempre, la richiesta si riferisce a numeri casuali uniformemente distribuiti in un certo
intervallo di valori.
La simulazione di sistemi probabilistici può fornire risultati tanto più affidabili quanto
maggiore è il numero di eventi con i quali si sollecita il sistema, è quindi evidente che simili
problemi dovranno essere affrontati con l’aiuto di elaboratori elettronici i quali, per
definizione, sono degli automi deterministici a stati finiti e quindi non idonei alla generazione
di eventi casuali.
Solo attraverso lo sviluppo di opportuni algoritmi è possibile generare numeri casuali che
però non potranno mai essere effettivamente casuali e pertanto vengono detti pseudocasuali.
Affinché questi algoritmi possano essere ritenuti validi dovranno soddisfare alcune specifiche
caratteristiche:
•
•
•
•
•
•
Uniforme distribuzione statistica in un certo intervallo di valori
Indipendenza statistica
Riproducibilità della sequenza di valori
Non ripetitività su un prefissato periodo
Alta velocità di generazione
Minimo utilizzo dello spazio di memoria
In questa sede, saranno volutamente trascurati i metodi di generazione analogica i quali, pur
risultando effettivamente casuali, richiedono dell’hardware aggiuntivo e presentano alcuni tipi
di inconvenienti come la non riproducibilità delle sequenze, instabilità e criticità del controllo.
Il primo metodo storicamente noto per la generazione di numeri pseudocasuali è attribuito a
Von Neuman ed è detto Metodi dei Quadrati Centrati (middle square), esso si sviluppa
secondo le seguenti modalità:
•
•
•
•
•
si sceglie a caso un numero di n cifre (detto seme)
se ne calcola il quadrato
si aggiungono a sinistra eventuali zeri fino ad arrivare a 2n cifre
si eliminano le prime n/2 cifre e le ultime n/2 cifre
il numero ottenuto è pseudocasuale e viene usato per ottenere il successivo
questo metodo presenta l’inconveniente che i numeri generati non hanno una uniforme
distribuzione statistica e che il periodo risulta molto breve.
Un metodo alternativo, derivato da quello di Von Neuman, è detto Metodo dei Prodotti
Centrati. Questo metodo parte con il prodotto di due numeri di n cifre e la successiva
estrazione delle n cifre centrali. Questo metodo è affetto dagli stessi problemi del precedente
ma presenta una ciclicità più lunga.
Operando con numeri a quattro cifre, la ciclicità non supera alcune migliaia ed è molto
frequente la tendenza a convergere verso lo zero.
A.C. Neve – Numeri pseudocasuali
2
METODI CONGRUENZIALI
I metodi più utilizzati per la generazione di numeri pseudocasuali sono quelli congruenziali i
quali utilizzano l’aritmetica modulare.
Dati due numeri A e B l’operatore mod è così definito:
A mod B = A – (INT(A/B))*B
A mod B = A
Modulo
se B ≠ 0
se B = 0
In pratica è il resto della divisione intera
Sono poi definite le seguenti operazioni:
Addizione modulare
Prodotto modulare
Inversione
(12 + 16) mod 17 = 11
(8*10) mod 17 = 12
2-1 = 9 (infatti (2*9) mod 17 = 1)
Dati due numeri A e B, essi si dicono congruenti modulo M se la
loro differenza risulta essere multipla intera del loro modulo.
Congruenza Per es. 20 ed 8 sono congruenti modulo 4
Infatti: (20 mod 8) = 4
e poi 20 – 8 = 12 che è multiplo intero di 4
e si ha che 20 mod 4 = 8 mod 4
Analogamente 18 e 16 sono congruenti modulo 2.
I metodi congruenziali, usati per la generazione di sequenze di numeri pseudocasuali, si
basano su una relazione di congruenza esprimibile attraverso una relazione ricorsiva del tipo:
X i +1 = ( A ⋅ X i + C ) mod M
con Xi, A, C ed M interi arbitrari non negativi.
Assegnato un valore Xo di innesco (diverso da zero), il modulo M e le costanti A e C, è
possibile determinare tutti i successivi valori della sequenza che risulterà così riproducibile.
Esiste sempre un valore h dell’indice i tale che Xh = Xo , si ha così la ripetizione della
sequenza dopo un periodo h che dipende dai valori di A, C, M.
Questo indice h esiste perchè i resti della divisione per M possono essere solo 0,1,2, ... M-1
pertanto, al massimo dopo M cicli verrà generato il valore iniziale.
I metodi congruenziali più noti sono quelli di Lehmer (detto moltiplicativo) e di Rotemberg
(detto misto). Esiste anche il metodo di Fibbonacci (detto additivo) che però utilizza una
relazione di congruenza leggermente diversa da quella prima introdotta. Ci sono infine i
metodi di MacLaren e Marsaglia che sfruttano un metodo composito dei primi due.
A.C. Neve – Numeri pseudocasuali
3
METODO di LEHMER
Questo metodo prevede per la costante C il valore nullo per cui la relazione di congruenza
diventa:
X i +1 = ( A ⋅ X i ) mod M
I valori di A ed M dipendono generalmente dal tipo di elaboratore utilizzato.
Solitamente si attribuisce ad M il valore 2n con n pari al grado di parallelismo dell’elaboratore
usato.
La costante A deve risultare prima rispetto ad M e diversa da 1 così da evitare la generazione
di una sequenza di numeri uguali.
Alcuni autori suggeriscono l’utilizzo della massima potenza dispari di 5 tale che A < 2n.
Altri invece consigliano l’uso di un valore di A sufficientemente grande e tale che nella sua
rappresentazione binaria non vi siano troppi zeri.
Altri ancora, infine, propongono l’uso di un valore di A ricavato dalla relazione
A = 1 + (2 + 8 ⋅ k ) con K = 1,2,3,4.......,
in modo che risulti congruente con 3 secondo il modulo 8.
I numeri pseudocasuali che si ottengono risultano compresi nell’intervallo ]0÷M[.
Per ottenere un generatore standard nell’intervallo ]0÷1[ sarà sufficiente dividere per M i
valori ottenuti. Il generatore così ottenuto potrebbe sembrare caratterizzato da una
distribuzione continua dei valori nell’intervallo ]0÷1[, in realtà è sempre discreto e con un
passo di discretizzazione pari ad 1/M.
Una volta realizzato il generatore di numeri pseudocasuali sarebbe necessario verificare se le
sequenze ottenute soddisfano le specifiche richieste per mezzo di opportuni test la cui validità
è comunque sempre relativa.
É possibile dimostrare che nessuna classe finita di prove può garantire la pseudocasualità di
una sequenza finita di numeri, si può infatti verificare che una sequenza di numeri, pur avendo
superato un certo numero di test, non sia idonea per una specifica applicazione.
Si può asserire quindi che: il fatto che una o più sequenze di numeri generati per
mezzo di un algoritmo iterativo che soddisfi un certo insieme di test statistici è
una condizione necessaria ma non sufficiente a garantire la pseudocasualità sella
sequenza stessa.
Esistono in bibliografia molti tipi di test, i più noti sono: il test di frequenza, il test di
autocorrelazione, il test di autocovarianza, il test del chi-quadro oltre a quelli più elementari
come i test della media, della varianza e del valor quadratico medio.
Per questi ultimi test si ottengono i seguenti valori:
Valori attesi
Media
Varianza
Valor Quadratico Medio
A.C. Neve – Numeri pseudocasuali
0.5000000
0.0833333
0.3333333
A = 75
M = 65536
0.4999999
0.0833323
0.3333231
A = 783
M = 65529
0.4653915
0.0833781
0.2999674
4
METODO di ROTEMBERG
Questo metodo è detto misto in quanto utilizza la relazione di congruenza nella sua forma più
completa:
X i +1 = ( A ⋅ X i + C ) mod M
Anche in questo caso i valori di A, C ed M dipendono dal tipo di elaboratore usato.
Esiste un teorema il quale asserisce che:
Una sequenza congruente lineare presenta un periodo pari ad M se e solo se:
• C ed M sono primi tra loro
• (A-1) è multiplo intero di P per ogni numero P che divide M
• Se M è multiplo di 4, (A-1) è multiplo dello stesso valore
Di solito si sceglie per M il valore 2n con n grado di parallelismo del computer usato.
Per la costante A, la maggior parte degli autori suggerisce un valore fornito dalla relazione
A = (2s + 1) con s ≥ 2
Questa scelta è molto conveniente se il software è scritto in assembly in quanto il tempo di
esecuzione può essere ridotto realizzando il prodotto A∗Xi tramite uno schift a sinistra di s
posizioni del registro contenente Xi e poi sommando 1.
Per il valore della costante C l’importante è che sia prima rispetto ad M e dispari.
Le sequenze di numeri pseudocasuali che si possono ottenere con il metodo di Rotemberg
sono generalmente più lunghe di quelle ottenibili con il metodo di Lehmer.
Per quel che riguarda il comportamento statistico, i due metodi possono ritenersi simili.
Valori attesi
Media
Varianza
Valor Quadratico Medio
A.C. Neve – Numeri pseudocasuali
0.5000000
0.0833333
0.3333333
A = 129
C=1
M = 65536
0.4997787
0.0833130
0.3330918
A = 32773
C=3
M = 65536
0.4979933
0.0839504
0.3309477
5
METODO di FIBONACCI
Questo metodo è un caso particolare dei metodi additivi utilizzati per cercare di rendere ancor
più lunghe le sequenze generabili.
L’idea di base consiste nel far dipendere il valore Xn+1 da entrambi i valori Xn ed Xn-1 invece
che solo da Xn. In queste condizioni il periodo della sequenza può arrivare fin a M2.
Il più semplice di questi metodi è quello di Fibonacci
X i +1 = ( X i + X i −1 ) mod M
che però non risulta statisticamente molto affidabile.
Il metodo più generale ed un pò più efficiente è:
X i +1 = ( X i + X i − k ) mod M
Mitchell e Moore hanno messo a punto questa versione:
X i +1 = ( X i −24 + X i −55 ) mod M
con M pari e Xo, X1, ....X54 interi arbitrari non tutti pari.
Le costanti 24 e 55 non sono scelte a caso ma sono valori che consentono un periodo teorico
della sequenza pari a 255 – 1 (in realtà è inferiore).
I valori 24 e 55 sono detti lags e la sequenza è nota come lagged Fibonacci (LFG)
Una evoluzione di questo metodo è poi quello dei generatori LFG paralleli.
Per quel che riguarda i metodi congruenziali, autorevoli riferimenti bibliografici consigliano:
Knuth
Goodman Miller
Gordon
Leormont Lewis
M
231
231 - 1
231
231
A.C. Neve – Numeri pseudocasuali
A
Int(π*10 )=314159265
75
513
216 + 3 = 65539
8
C
453806254
0
0
0
6
GENERATORI STANDARD
La maggior parte dei software applicativi e dei linguaggi di programmazione mettono a
disposizione degli utenti delle funzioni per la generazione di numeri pseudocasuali con
distribuzioni uniformi nell’intervallo 0÷1.
Questi generatori vengono molto spesso considerati continui ma in realtà risultano discreti
anche se con un passo di discretizzazione molto piccolo.
Da quanto visto in precedenza, un generatore di numeri pseudocasuali genera numeri interi
compresi nell’intervallo 1÷M, quindi discreto. Un generatore standard si ottiene dividendo per
M tutti i numeri generati con i metodi prima esposti.
Per M = 65536, i numeri generati saranno distanziati tra loro di un passo di discretizzazione
pari a 1/M e cioè di 0.000015259 mentre per M=231 il passo risulterà di 4.656612 10-10,
l’entità di quest’ultimo valore consente pertanto, con buona approssimazione, di considerare il
generatore come se fosse continuo.
Qualsiasi sequenza di numeri pseudocasuali può essere sempre generata partendo da un
generatore standard di numeri pseudocasuali.
Un generatore continuo di numeri pseudocasuali compresi nell’intervallo N1÷N2 si ottiene
operando un semplice cambio di scala sui valori generati da un generatore standard:
si moltiplica il numero compreso nell’intervallo 0÷1 per la differenza (N2 – N1) e si aggiunge
poi N1.
GENERATORI DISCRETI
L’esempio classico è quello della simulazione del lancio di un solo dado che rappresenta il
tipico esempio di generatore discreto equiprobabile (dado non truccato!).
Si consideri un generatore standard di numeri pseudocasuali compresi nell’intervallo [0÷1[.
Il numero generato dal lancio di un dado di otterrà dalla relazione:
NDADO = INTERO(Ncasuale * 6) + 1
Infatti:
moltiplicando per 6 il numero Ncasuale , il suo valore sarà compreso tra 0 e 5.999999
estraendone l’intero, il suo valore potrà essere 0, 1, 2, 3, 4, 5
sommando infine 1, il suo valore potrà essere 1, 2, 3, 4, 5, 6 cioè come un dado.
Essendo questo generatore equiprobabile, ci si aspetta di ottenere una sequenza che contenga
la stessa quantità di 1, 2, 3, 4, 5, e 6.
Questa verifica può essere effettuata per mezzo dell’esame dell’istogramma di frequenza.
Nella figura seguente si può osservare l’istogramma di frequenza della simulazione di 600
lanci di un dado. Il risultato non sembra molto soddisfacente in quanto solo il 4 si è verificato
un numero di volte pari a quella atteso (100) mentre il 3 ed il 5 sono molto lontani.
Un indice della qualità di questa sequenza può essere ottenuto calcolando il ripple del grafico:
Ripple = (Max – Min)/Valore-atteso = (113 – 85)/100 % = 28%
Come si vede il risultato è alquanto scadente poiché il campione usato è molto piccolo e di
conseguenza la simulazione che si effettuerà non sarà attendibile.
A.C. Neve – Numeri pseudocasuali
7
L’attendibilità della simulazione di un sistema probabilistico è notevolmente influenzata dalle
caratteristiche del campione usato e dalla sua dimensione.
In questo semplice esempio la stabilità dei risultati dipende essenzialmente dalla dimensione
del campione usato.
Ponendo N = 10.000 lanci si ottiene un ripple del 10% circa
Ponendo N = 30.000 lanci si ottiene un ripple del 5% circa
Ponendo N = 50.000 lanci si ottiene un ripple del 3% circa
Ponendo N = 100.000 lanci si ottiene un ripple del 2% circa
Ponendo N = 200.000 lanci si ottiene un ripple dell'1% circa
Ponendo N = 1.000.000 lanci si ottiene un ripple dello 0.5 % circa
Queste informazioni sono di estrema importanza per valutare l'attendibilità di una simulazione
operata con questi tipi di sequenze numeriche.
Simili considerazioni risultano valide per la simulazione del lancio di due dadi (provare).
Un pò diversa è invece la realizzazione di generatori discreti con distribuzione non uniforme.
Il metodo più usato è quello della probabilità cumulata con griglia di uscita.
In pratica si utilizzano gli intervalli della probabilità cumulata come griglia per la selezione
dell’evento da generare.
Si consideri come esempio un generatore discreto di numeri interi compresi tre 1 e 9 avente la
seguente distribuzione di probabilità:
come si può notare la somma delle probabilità dei nove eventi è pari ad 1.
A.C. Neve – Numeri pseudocasuali
8
Con questa distribuzione si costruisce la seguente griglia nella quale l’ampiezza di ogni
intervallo è proporzionale alla probabilità dell’evento corrispondente:
0
0.20
1
0.35
2
0.45
3
0.49 0.51
4
5
0.55
6
0.65
7
0.80
8
1.0
9
Il funzionamento del metodo è il seguente:
• per mezzo di un generatore standard equiprobabile si genera un numero compreso tra 0 ed 1
• si individua l’intervallo della griglia al quale appartiene il numero
• si associa il valore della griglia di uscita appartenente all’intervallo
per es. se il numero generato è pari a 0.245456, appartenendo all’intervallo 0.2÷0.35, il valore
generato in uscita sarà il 2; se il numero generato è pari a 0.632908, appartenendo
all’intervallo 0.55÷0.65, il valore generato in uscita sarà il 7.
GENERATORI CONTINUI CON DISTRIBUZIONE NON UNIFORME
Disponendo di un generatore standard (con distribuzione continua ed uniforme nell’intervallo
0÷1) di numeri pseudocasuali è possibile generare delle sequenze continue con qualsiasi
distribuzione di probabilità per mezzo della trasformazione inversa.
Si consideri una variabile casuale continua x avente funzione di densità di probabilità f(x).
Di questa funzione si determina la corrispondente funzione di ripartizione F(x)
x
r = F ( x) = ∫ f ( x) ⋅ dx
0
(si rammenta che la funzione di ripartizione F(x) di una variabile aleatoria indica la probabilità
che la variabile assuma un valore minore o uguale ad x)
Si determina poi l’espressione analitica (se esiste) della funzione inversa cioè x = F-1(r).
La determinazione del campione della variabile x si ottiene generando un valore di r compreso
tra 0 ed 1 e sostituendolo nell’espressione della funzione di ripartizione inversa.
GENERATORI CON DISTRIBUZIONE LINEARE
Si consideri una distribuzione lineare con la seguente densità di probabilità:
f(x)
P
2
B-A
A
A.C. Neve – Numeri pseudocasuali
x
B
x
9
Dovendo risultare l’area sottesa dalla curva uguale a 1, si ha che il valore massimo nel punto B
sarà pari a:
S = 1 = h ⋅ ( B − A) ⋅
1
2
⇒
h=
2
B− A
 y − y0
x − x0 
L’equazione della retta congiungente i punti A e P 
=
 risulta essere:
 y1 − y 0 x1 − x 0 
f ( x) =
2 ⋅ ( x − A)
( B − A) 2
La sua funzione di ripartizione è data da:
x
x
2 ⋅ ( x − A)
x2
2⋅ A⋅ x
⋅
dx
=
−
2
2
( B − A)
( B − A) 2
A ( B − A)
F ( x) = ∫ f ( x) ⋅ dx = ∫
A
x
A
=
( x − A) 2
=r
( B − A) 2
operando la trasformazione inversa della funzione di ripartizione si ottiene:
x = A + ( B − A) ⋅ r
usando per r un valore compreso nell’intervallo [0÷1] e generato per mezzo di un generatore
standard, si ottiene per x un campione appartenente ad una distribuzione lineare.
Nel caso di una distribuzione lineare con pendenza negativa si ha che:
f ( x) =
2 ⋅ ( B − x)
( B − A) 2
⇒
x = B − ( B − A) ⋅ r
Nelle figure seguenti sono proposti i grafici delle distribuzioni di frequenza relativi alla
simulazione di un generatore di numeri pseudocasuali con distribuzione lineare tra 10 e 100
rispettivamente per la generazione di 10.000 ed 1.000.000 di campioni.
A.C. Neve – Numeri pseudocasuali
10
GENERATORI CON DISTRIBUZIONE ESPONENZIALE
La generica rappresentazione di una distribuzione esponenziale decrescente è la seguente:
f ( x) = λ ⋅ e − λ ⋅x
∞
con λ > 0
e
∫λ ⋅e
−λ ⋅ x
⋅ dx = 1
0
f(x)
λ
x
La rappresentazione così proposta garantisce l’unitarietà dell’area sottesa dalla curva.
La relativa funzione di ripartizione risulta:
x
x
0
0
F ( x) = ∫ f ( x) ⋅ dx = ∫ λ ⋅ e −λ ⋅ x ⋅ dx = 1 − e −λ ⋅ x = r
operando la trasformazione inversa della funzione di ripartizione si ha che:
x=−
1
λ
⋅ ln(1 − r ) con r compreso nell’intervallo [0÷1[
con r estratto da una distribuzione uniforme per mezzo di un generatore standard.
(λ rappresenta la frequenza media di interarrivo se x rappresenta il tempo e 1/λ è il tempo
medio di interarrivo).
Nelle figure seguenti sono proposti i grafici delle distribuzioni di frequenza relativi alla
simulazione di un generatore di numeri pseudocasuali con distribuzione esponenziale con
λ = 0.8 rispettivamente per la generazione di 10.000 ed 1.000.000 di campioni.
A.C. Neve – Numeri pseudocasuali
11
GENERATORI CON DISTRIBUZIONE GAUSSIANA
La generica rappresentazione di una distribuzione gaussiana è la seguente:
f ( x) =
1
σ ⋅ 2π
⋅e
−
( x−µ )2
2⋅σ 2
con µ = media e σ = deviazione standard
si rammenta che, nell’intervallo µ ±3 σ ricadono il 99.7% dei campioni
f(x)
µ - 3σ
µ
µ + 3σ
x
In questo caso non esiste, in forma esplicita, la funzione F(x) di ripartizione per cui non è
possibile far uso del metodo della trasformazione inversa.
Una distribuzione gaussiana può essere sufficientemente approssimata dalla somma di un certo
numero di campioni estratti da distribuzioni uniformi 0÷1 (generatori standard), il numero di
questi generatori è compreso tra 10 e 24 ma generalmente si consiglia 12.
La relazione matematica attraverso la quale è possibile ottenere una accettabile sequenza di
numeri con distribuzione gaussiana con media µ e scarto σ è la seguente:
x=µ+
σ
N
N
⋅ ∑ ri − 
2
N / 12  i =1
con N = numero di generatori standard ed ri = generico campione di tali generatori.
Per N = 12 la precedente relazione diventa:
 12

x = µ + σ ⋅ ∑ ri − 6
 i =1

Nelle figure seguenti sono proposti i grafici delle distribuzioni di frequenza relativi alla
simulazione di un generatore di numeri pseudocasuali con distribuzione gaussiana con µ = 0 e
σ = 1 rispettivamente per la generazione di 10.000 ed 1.000.000 di campioni.
A.C. Neve – Numeri pseudocasuali
12
GENERATORI HARDWARE DIGITALI
La generazione di numeri pseudo casuali si ottiene facendo uso di registri a scorrimento (shift
register) retroazionati tali cioè da riportare in ingresso un segnale proveniente dalla
combinazione dei bit di uscita.
Un registro a scorrimento di M bit viene pilotato con un clock a frequenza fo.
L’ingresso del registro a scorrimento viene pilotato dall’uscita di una porta ex-OR i cui ingressi
sono collegati alle uscite del registro a scorrimento (N e M) una delle quali è sempre l’ultimo
bit M.
La lunghezza massima della sequenza di numeri così ottenibile è pari a 2M-1 poiché lo stato
formato da tutti zero bloccherebbe la generazione dei numeri.
Questo valore della lunghezza della sequenza può essere ottenuto solo con una opportuna scelta
dei valori di N ed M.
Una volta generata l’intera sequenza, questa tornerà a ripetersi in modo periodico.
La tabella seguente descrive i valori di M ed N e le relative lunghezze delle sequenze ottenibili.
M
4
5
6
7
9
10
11
15
20
25
31
35
39
N
3
3
5
6
5
7
9
14
17
22
28
33
35
Lunghezza
15
31
63
127
511
1023
2047
32767
1048575
33554431
2147483647
34359738367
549755813887
A.C. Neve – Numeri pseudocasuali
1
2
3
N
M
13
Nel caso in cui si volessero utilizzare dei registri di dimensione multipla di 8 bit, si dovranno
utilizzare più di due linee di retroazione come descritto dalla seguente tabella.
M
8
16
24
N1
4
4
17
N2
5
13
22
N3
6
15
23
Lunghezza
255
65535
16777215
Nelle figure seguenti sono proposti i circuiti di due generatori di numeri pseudocasuali
rispettivamente ad 8 e 16 bit.
A.C. Neve – Numeri pseudocasuali
14
METODO DI MONTECARLO
Il metodo di Montecarlo fu ideato da S. Ulam e J. Von Neumann (altre fonti lo attribuiscono
ad E. Fermi) per lo studio di problemi troppo complessi per essere risolti analiticamente o
troppo costosi per essere affrontati sperimentalmente.
Questo metodo, basato sulla tecnica del campionamento casuale, fu usata dal naturalista
Buffon per la determinazione del valore del π per mezzo della misura della posizione di un
ago ripetutamente lanciato su un foglio quadrettato.
Il metodo di Montecarlo consente il raggiungimento di attendibili risultati in situazioni anche
molto complesse grazie alla legge dei grandi numeri per la quale un fenomeno statistico tende
a fornire risultati deterministici se sollecitato con un numero molto elevato di eventi casuali.
L’esecuzione delle simulazioni dovranno iniziare con un numero limitato di eventi che sarà
poi man mano aumentato in modo da verificare la tendenza dei valori a stabilizzarsi
nell’intorno dei risultati cercati.
L’esempio classico dell’uso del metodo di Montecarlo è la misura del valore di π.
Si consideri un quadrato di lato unitario contenente al suo interno un arco di cerchio di raggio
unitario centrato nell’origine.
Per mezzo di un generatore di numeri
pseudocasuali compresi nell’intervallo
[0,1] ed uniformemente distribuiti,
verranno generate delle coppie Xn,Yn
che rappresenteranno dei punti
all’interno del quadrato.
Tutti questi punti dovranno essere
divisi in due gruppi:
quelli appartenenti a tutto il quadrato e
quelli appartenenti al settore circolare.
Essendo il generatore equiprobabile, è
ragionevole ipotizzare che il numero di
punti presenti nelle due aree risulti
proporzionale al valore delle aree stesse
e cioè:
Numero di punti interni al settore circolare Area del settore circolare π ⋅ r 2 / 4 π
=
=
=
Numero di punti interni al quadrato
Area del quadrato
4
r2
da cui: π = 4 ⋅
N punti cerchio
N totale di punti
in quanto il numero di punti interni al quadrato corrisponde al numero totale di punti usati per
la simulazione.
Il conteggio dei punti interni al settore circolare si ottiene valutando, per ogni punto, la
distanza del punto dall’origine e cioè se:
A.C. Neve – Numeri pseudocasuali
15
Dn =
X n2 + Yn2 ≤ 1 allora il punto appartiene al settore altrimenti al quadrato.
I risultati ottenibili dalle simulazioni presentano degli errori con i seguenti ordini di
grandezza:
Numero totale di punti
100
1.000
10.000
100.000
1.000.000
Errore sul calcolo del π
6%
2%
0,5%
0,1%
0,04%
Un altro classico esempio riguarda il calcolo dell’integrale definito.
Si rammenta che, dal punto di vista geometrico, il valore di un integrale definito coincide con
il valore dell’area sottesa dalla curva tra i due estremi di integrazione.
Si consideri come esempio la funzione:
f ( x) = 3x 2 + 2 x + 1
ed il relativo integrale definito:
B
5
A
1
INTEGRALE = ∫ f ( x)dx = ∫ 3 x 2 + 2 x + 1 = 152
Anche in questo caso, per mezzo di un generatore di numeri pseudocasuali uniformemente
distribuiti, verranno generate delle coppie Xn,Yn tali che:
Xn sia compreso tra A e B
Yn si compreso (in questo caso) tra 0 ed f(B) (in generale è necessario valutare, caso per caso,
la dimensione verticale del rettangolo).
A.C. Neve – Numeri pseudocasuali
16
Tutti questi punti dovranno essere divisi in due gruppi:
quelli appartenenti a tutto al rettangolo e quelli appartenenti all’area sottesa dalla curva.
Essendo il generatore equiprobabile, è ragionevole ipotizzare che il numero di punti presenti
nelle due aree risulti proporzionale al valore delle aree stesse e cioè:
B
∫A f ( x)dx
Numero di punti nell' area sottesa dalla curva Area sottesa dalla curva
=
=
Numero di punti interni al rettangolo
Area del rettangolo
( B − A) ⋅ f ( B)
da cui:
B
∫ f ( x)dx = ( B − A) ⋅ f ( B) ⋅
A
Numero di punti nell' area sottesa dalla curva
Numero totale di punti
Il conteggio dei punti appartenenti all’area sottesa dalla curva si ottiene confrontando il valore
della funzione nel punto Xn con il valore di Yn e cioè:
f ( Xn) ≤ Yn allora il punto appartiene all’area sottesa dalla curva.
se
I risultati ottenibili dalle simulazioni presentano degli errori con i seguenti ordini di
grandezza:
Numero totale di punti
100
1.000
10.000
100.000
1.000.000
Errore sul calcolo
dell’integrale
10%
4%
2%
1,7%
1,3%
Un ulteriore classico esempio è quello del lancio di due dadi.
E’ ben noto che il funzionamento del sistema consiste nel lancio di due dadi e la successiva
somma dei due singoli risultati. Le combinazioni dei possibili risultati possono essere
schematizzate dalla seguente tabella:
1
2
3
4
5
6
1
2
3
4
5
6
7
2
3
4
5
6
7
8
3
4
5
6
7
8
9
4
5
6
7
8
9
10
5
6
7
8
9
10
11
6
7
8
9
10
11
12
Come si può notare, il 2 ed il 12 si possono
ottenere solo con una singola combinazione (1+1)
e (6+6) senza altre possibilità, mentre il 7 è
ottenibile con diverse combinazioni (6+1, 5+2,
4+3, 3+4, 2+5, 1+6).
E’ pertanto ragionevole ipotizzare che la
probabilità di ottenere il 7 è superiore a quella di
ottenere il 2 o il 12.
In considerazione del fatto che il numero totale di eventi è 36, è possibile calcolare le
probabilità teoriche dei singoli eventi.
A.C. Neve – Numeri pseudocasuali
17
Valore
2
3
4
5
6
7
8
9
10
11
12
1/36
2/36
3/36
4/36
5/36
6/36
5/36
4/36
3/36
2/36
1/36
Probabilità
2.77% 5.55% 8.33% 11.11% 13.88% 16.66% 13.88% 11.11% 8.33% 5.55% 2.77%
Prob. %
La simulazione di questo sistema è abbastanza semplice:
per mezzo di due generatori standard ([0÷1[ equiprobabile) si simulano i due dadi per mezzo
della relazione:
NDADI = NDADO1 + NDADO2 = (INTERO(N1casuale*6)+1) + (INTERO(N2casuale*6)+1)
La distribuzione degli eventi risulterà triangolare con il massimo in corrispondenza del 7.
I risultati ottenibili dalle simulazioni presentano dei valori della probabilità degli eventi
caratterizzata dai seguenti ordini di grandezza:
2
3
4
5
6
7
8
9
10
11
12
Prob. con
N=500
3.4
5.4
7.6
11.6
14
17.4
13.4
11.2
6.8
5.2
4.0
Prob. con
N=1500
2.56
5.92
8.32
8.84
15.2
16.32
13.68
10.32
9.24
6.36
3.24
Prob. con
N=10000
2.86
5.52
8.56
11.28
13.18
17.71
14.06
10.99
8.3
5.65
2.89
Prob. con
N=50000
2.75
5.37
8.44
11.02
13.91
16.67
13.97
11.15
8.34
5.59
2.76
Prob. con
N=1000000
2.79
5.58
8.29
11.14
13.87
16.60
13.89
11.16
8.30
5.54
2.78
Come si può notare, all’aumentare del numero di eventi il valore della probabilità si avvicina
sempre di più a quella teorica e con una ripetibilità dei risultati sempre maggiore.
A.C. Neve – Numeri pseudocasuali
18