Metodi Computazionali
Generazione di numeri pseudocasuali
A.A. 2009/2010
Generating a random permutation
 
Creare un vettore di n=100 elementi di valori
random usando Mixed Congruential Method
con m=231-1 e a=75
9
15
17
…
…
Esercizio 1: Effettuare n=100 permutazioni
- restituire il nuovo vettore “permutato”
 
P.S.: ogni numero può essere permutato con
qualsiasi altro numero con probabilità uniforme
Generating a random permutation
function [vector]=permutation(vector)
numPerm=length(vector);
K=length(vector);
for i=1:numPerm
U=rand();
I=fix(K*U)+1;
temp=vector(I);
vector(I)=vector(K);
vector(K)=temp;
K=K-1;
end
Generating a Poisson Random Variable
  La
variabile random X è una Poisson con
media λ se:
i
λ
pi = P ( X = i) = e− λ
i!
  Per
generare una serie di poisson random
€
variables:
λ
pi+1 =
pi
i +1
Esercizio 2: generare una poisson random variable
€
Generating a Poisson Random Variable
function [X]=poisson(lambda)
U=rand;
i=0;
p=exp(-lambda);
F=p;
exit=1;
while(exit==1)
if U<F
X=i;
break;
else
p=(lambda*p)/(i+1);
F=F+p;
i=i+1;
end
end
Acceptance Rejection Method
 
Supponiamo di voler simulare il valore di una
variabile random X che assume i seguenti valori
1
 
2
3
4
5
6
7
8
9
10
0.10
0.9
0.9
0.10
0.10
con le seguenti probabilità
0.11
0.12
0.09
0.08
0.12
Esercizio 3: Simulare attraverso il metodo
Acceptance-Rejection
Acceptance Rejection Method
function [X]=acceptanceRejection(vector, probability)
n=length(vector);
q=1/n;
fract=probability/q;
c=max(fract);
fract=fract*(1/c);
while(1)
U1=rand;
Y=fix(n*U1)+1;
U2=rand;
if U2<=fract(Y)
X=Y;
break;
end
end
Calcolo di un integrale singolo
  La
stima di un integrale può essere
ricavata simulando una serie di numeri
pseudo-casuali
1
2 3/2
∫ (1− x )
dx
0
nTrials
€
2 3/2
∑ (1− U )
i=1
nTrials
Esercizio 3: Calcolare il valore
dell’integrale
Calcolo di un integrale singolo
function [value] = integral(nTrials)
randomNumbers = zeros(1,nTrials);
value=0;
for i=1:nTrials
randomNumbers(i)=rand;
end
for i=1:nTrials
value=value + ((1-randomNumbers(i)^2)^(3/2));
end
value=value/nTrials;
Calcolo di un integrale singolo
  Verifichiamo,
attraverso il calcolo degli
integrali messo a disposizione da Matlab,
che il nostro risultato si avvicina al valore
esatto
syms x
f=(1-x^2)^(3/2)
int(f,x,0,1)
Generating a Normal Random Variable
1. 
2. 
3. 
Generare una variabile random Y
esponenziale con rate λ=1
Generare una variabile pseudocasuale U
IF U<= exp(-(Y-1)^2)/2)
Then X=Y;
  Else go to step 1.
 
Esercizio 5
Generating a Normal Random Variable
function [X] = normalRandomVariable(lambda)
while (1)
U1=rand;
Y=-(1/lambda)*log(U1);
U2=rand;
if U2<=exp(-(Y-1)^2)/2
X=Y;
break;
end
end