You are on page 1of 22

Probabilit

Approssimazione continua dellistogramma normalizzato


Nei processi che hanno un numero infinito di risultati possibili, la
probabilit una funzione di una variabile continua ed
rappresentata da una curva e non come sequenza di rettangoli.
Larea sotto la curva sempre pari a 1, mentre una frazione dellarea
indica la probabilit delle ricorrenze di un certo intervallo di
risultati.
Una funzione utile la curva di distribuzione normale o gaussiana. E
detta anche curva a campana e i dati da essa descritti sono
uniformemente distribuiti.

Tipica curva di distribuzione normale o gaussiana

Leffetto dellaumento di sulla curva di distribuzione


normale. Per questo caso = 10, e le tre curve
corrispondono a = 1, = 2 e = 3.

Approssimazione continua dellistogramma normalizzato


La funzione gaussiana funzione di due parametri:
media dei risultati (): identifica il picco della curva a campana ed
il valore che ha la maggiore probabilit di presentarsi;
deviazione standard (): descrive la dispersione dei valori ed
indica la larghezza della base della curva a campana.
A volte si usa la varianza, quadrato della deviazione standard .
Si dimostra quanto segue:
il 68% circa dellarea giace tra i limiti - x +. Quindi se una
variabile normalmente distribuita, la probabilit che un
campione scelto a caso giaccia allinterno di 1 deviazione
standard della media pari al 68%;
il 96% circa dellarea giace fra i limiti -2 x +2
il 99,7% circa dellarea giace fra i limiti -3 x +3
mean(x) media; var(x) varianza; std(x) deviazione
standard

La funzione di probabilit normale la seguente:


p(x)

1
2 2

La probabilit che la variabile random x sia non minore di


a e non maggiore di b si scrive P(a x b).
Pu essere calcolata come segue:
1

P(a x b)
erf b
2
2

a
erf
2

Interpretazione della probabilit dei limiti .

Interpretazione della probabilit dei limiti 2.

Generatore di numeri casuali


Spesso non si dispone di una distribuzione di probabilit
idonea a descrivere i risultati di talune applicazioni, in
particolare la probabilit del verificarsi di un certo fenomeno.
Per fare previsioni si ricorre quindi alla simulazione, che
consiste nelleseguire pi volte il programma utilizzando un
insieme di numeri casuali (random).
I risultati cos ottenuti possono essere utilizzati per stimare
la probabilit cercata.

Numeri casuali uniformemente distribuiti


In questo caso i valori che si trovano allinterno di un intervallo hanno la
stessa probabilit di verificarsi.
La funzione rand genera numeri casuali uniformemente distribuiti
nellintervallo [0,1].
Ad ogni esecuzione viene generato un differente numero casuale, in
quanto lalgoritmo usato da MatLab richiede uno stato per iniziare,
generato dal clock della CPU che quindi sempre in condizioni
differenti.
Per generare la stessa sequenza (stato) di numeri casuali, dalla
versione 7.4 di matLab in poi si utilizza:
s = rand(twister)
rand(twister,s)
rand(twister,0)

salvata stato corrente


ripristina stato s
ripristina stato iniziale

Numeri casuali uniformemente distribuiti


Per generare numeri casuali in un intervallo diverso da [0,1] si pu
utilizzare la seguente formula (intervallo [a,b]):

y = (b-a)* x + a

Esempio:
y=(10-2)*rand+2

x numero casuale uniformemente


distribuito in [0,1]

genera numeri casuali uniformemente


distribuiti nellintervallo [2,10]

y=8*rand(1,1000)+2 genera 1000 numeri casuali


uniformemente distribuiti
nellintervallo [2,10]
mean(y) = ?
min(y) = ?
max(y) = ?

(circa 6)
(circa 2)
(circa 10)

Numeri casuali uniformemente distribuiti (esempi)


>> rand('twister',0)
>> rand
ans =
0.5488
>> rand
ans =
0.7152
>> rand('twister',0)
>> rand
ans =
0.5488
ATTENZIONE:
Lo stato iniziale 0 genera sempre il valore 0.5488

Numeri casuali uniformemente distribuiti (esempi)


>> s=rand('twister');
>> rand('twister',s)
>> rand
ans =
0.8147
>> rand('twister',s)
>> rand
ans =
0.8147

ATTENZIONE:
Lo stato corrente che viene salvato quello relativo
al numero generato con la rand successiva.

Numeri casuali uniformemente distribuiti


(es. lancio dei dadi)
In questo caso occorrono numeri interi.
Si pu ricorrere alla funzione randperm(n) che genera una
permutazione casuale di numeri interi compresi fra 1 e n.
randperm(6) potrebbe generare il vettore [6,1,4,2,5,3]

Numeri casuali normalmente distribuiti


I risultati di molti processi possono essere descritti dalla distribuzione
normale. In questo caso i numeri vicini alla media hanno una probabilit
maggiore di verificarsi.
I valori ottenuti non sono compresi tra un limite inferiore e uno superiore,
come accade nei numeri uniformemente distribuiti, ma lelemento
caratterizzante costituito dalla media ( = 0 ) e dalla deviazione
standard ( = 1 ).
La funzione randn genera infatti un numero normalmente distribuito con
media pari a 0 e deviazione standard pari a 1.
La funzione randn(n) (rand(m,n)) genera una matrice nxn (mxn)
di numeri casuali normalmente distribuiti con media pari a 0 e
deviazione standard 1.
Per gestire lo stato si dovr usare randn() al posto di rand() e
state al posto di twister.

Numeri casuali normalmente distribuiti


Per generare una sequenza di numeri casuali normalmente distribuiti con
media () e deviazione standard () , partendo da una sequenza con
media (0) e deviazione standard (1) basta moltiplicare i valori per e
sommare a ciascun risultato.
Esempio:
y = * x +
Esempio:
y=3*randn(1,2000)+5

genera sequenza di 2000 numeri


casuali con media e dev.std.

mean(y) = ?
std(y) = ?

(circa 5)
(circa 3)

Funzioni numeri casuali (uniformemente distribuiti)


Comando

Descrizione

rand

Genera un numero casuale uniformemente distribuito


fra 0 e 1.

rand(n)

Genera una matrice n n contenente numeri casuali


uniformemente distribuiti fra 0 e 1.

rand(m,n)

Genera una matrice m n contenente numeri casuali


uniformemente distribuiti fra 0 e 1.

s = rand(twister)

Restituisce un vettore di 35 elementi s contenente lo


stato corrente del generatore.

rand(twister,s)

Setta a s lo stato del generatore.

rand(twister,0)

Resetta il generatore al suo stato iniziale.

rand(twister,j)

Resetta il generatore allo stato j, con j intero.

rand(twister,sum(100*clock)) Resetta il generatore a un diverso stato ad ogni


esecuzione.

Funzioni numeri casuali (normalmente distribuiti)


randn

Genera un numero casuale normalmente distribuito con


media 0 e deviazione standard 1.

randn(n)

Genera una matrice n n contenente numeri casuali con


media 0 e deviazione standard 1.

randn(m,n)

Genera una matrice m n contenente numeri casuali con


media 0 e deviazione standard 1.

s = randn(state)

Come rand(twister).

randn(state,s)

Come rand(twister,s).

randn(state,0)

Come rand(twister,0).

randn(state,j)

Come rand(twister,j).

randn(state,sum(100*clock)) Come rand(twister,sum(100*clock)).


randperm(n)

Genera una permutazione casuale di numeri interi fra 1 e n.

La seguente sessione mostra come ottenere la stessa


sequenza di numeri casuali ad ogni utilizzo di rand.
>>rand(twister,0)
>>rand
ans =
0.5488
>>rand
ans =
0.7152
>>rand(twister,0)
>>rand
ans =
0.5488
>>rand
ans =
0.7152

Non occorre iniziare con lo stato iniziale per generare


la stessa sequenza.
Infatti sufficiente fare come di seguito:
>>s = rand(twister);
>>rand(twister,s)
>>rand
ans =
0.6028
>>rand(twister,s)
>>rand
ans =
0.6028

La formula generale per generare un numero casuale y


uniformemente distribuito nellintervallo [a, b] :
y (b a) x a
dove x un numero casuale uniformemente distribuito
nellintervallo [0, 1].
Per esempio, per generare un vettore y contenente 1000
numeri casuali uniformemente distribuiti nellintervallo [2, 10],
occorre scrivere:
y = 8*rand(1,1000) + 2.

Se x un numero casuale con media 0 e deviazione


standard 1, la seguente equazione consente di
generare un nuovo numero casuale y con deviazione
standard e media .
y x
Per esempio, per generare un vettore y contenente
2000 numeri casuali normalmente distribuiti con media
pari a 5 e deviazione standard pari a 3, occorre scrivere:
y = 3 * randn(1,2000) + 5.

You might also like