Documente Academic
Documente Profesional
Documente Cultură
Estatstica Computacional
Geraca o de variaveis uniformes no (0, 1)
Carlos A. Abanto-Valle
Instituto de Matematica-UFRJ
1 / 18
Conteudo
2 / 18
Motivaca o
Nesta seca o apresentam-se consideraco es para a construca o e
implementaca o de geradores de numeros aleatorios os quais sao
bons para o uso pratico.
Uma alternativa para produzir a mesma sequencia de numeros
aleatorios cada vez que um programa e executado e a utilizaca o
de um gerador de numeros pseudo-aleatorios.
3 / 18
Motivaca o
Antes de discutir as sequencias que parecem ser aleatorias,
embora nao sejam, pode-se especificar que se entende por
gerador de numeros aleatorios: isto e um um mecanismo para
produzir uma sequencia de variaveis aleatorias U1 , U2 , . . . , com
a propriedade
(i) Os Ui U(0, 1)
(ii) Os Ui sao mutuamente independentes.
4 / 18
Motivaca o
Um gerador de numeros aleatorios (muitas vezes chamado de um
gerador de numeros pseudo-aleatorios para enfatizar que so imita
aleatoriedade) produz uma sequencia finita de numeros
u1 , u2 , . . . , uK no intervalo (0, 1).
Tipicamente, os valores gerados dependem em parte da entrada
de parametros especificados pelo usuario.
Qualquer seque ncia constitui um conjunto de possveis
resultados de variaveis aleatorias uniformes independentes
U1 , U2 , . . . , UK
Um bom gerador de numeros aleatorios e aquele que satisfaz a
exigencia de que os pequenos segmentos (em relaca o ao K) da
seque ncia u1 , . . . , uk e difcil de distinguir das realizaco es de
uma variavel aleatoria uniforme e independente.
5 / 18
Motivaca o
We discuss the following general considerations in the construction of
a random number generator:
duraca o do perodo
reprodutibilidade
velocidade
portabilidade
aleatoriedade
6 / 18
O Metodo
xi+1
ui+1 =
(axi + c) mod m
ui
m
O Metodo
Xi = (aXi1 + c)mod m
Assumindo que X0 = 3, a = 9, c = 3, m = 24
8 / 18
O Metodo
No R teremos que
X0<-3;
m<-16
cc<-3
aa<-9
X<-array(0,dim=32)
#######################
X[1]<-(aa*X0+cc)%% m
for(j in 2:32){
X[j]<-(aa*X[j-1]+cc)%% m
}
9 / 18
Xi
10
15
O Metodo
10
15
10
15
20
25
30
20
25
30
0.0
0.2
0.4
Xi
0.6
0.8
10 / 18
O Metodo
O perodo de um gerador e o menor inteiro de modo que
X = X0 . Em nosso exemplo, = 16.
Claramente, queremos fazer perodo tao grande quanto
forpossvel, para evitar a possibilidade de reutilizaca o de
numeros aleatorios.
Ja que esse perodo nao pode exceder m, o modulo e
frequentemente escolhido como um valor proximo do maior
inteiro representavel no computador.
11 / 18
O Metodo
c and m sao primos relativos (maior divisor comum entre c e m e
1)
a 1 e multiplo de q para cada fator primo q de m
a 1 e multiplo de 4 is a multiple of 4, si m e multiplo de 4.
Se c > 0 o metodo chama-se gerador de congruencia linear
misto.
Se c = 0 o metodo chams-se gerador de congruencia linear
multiplicativo.
Xi = aXi1 mod m
12 / 18
O Metodo
Se c > 0, uma boa escolha e fazer m = 2b onde b e o numero de
bits usados para representar inteiros positivos com um
particular combinaca o de computador/linguagem
Por exemplo em computadores de 32 bits, um bit pode ser
reservado para o sinal do inteiro, deixando b = 31.
Estes computadores podem salvar inteiros no intervalo
[231 , 231 1]
Por exemplo: m = 231 , a = 906185749, c = 1, x0 = 3456.
13 / 18
O Metodo
No R
proc1<-function(N,m=2(31),a=906185749,c=1,seedini)
{
X<-array(0,dim=N+1)
X[1]<-seedini;
for (j in 2:(N+1)){
X[j] <-(a*X[j-1]+c)%%(m)
}
return (X)
}
X<-proc1(N=1000,seedini=3456)
14 / 18
Xi
Xi
O Metodo
200
400
600
800
1000
0.0e+00
5.0e+08
1.0e+09
Xi1
1.5e+09
2.0e+09
15 / 18
0.0
0.2
0.4
Ui
0.6
0.8
1.0
O Metodo
0.0
0.2
0.4
Ui
0.6
0.8
1.0
200
400
600
800
1000
0.0
0.2
0.4
Ui1
0.6
0.8
1.0
16 / 18
O Metodo
O perodo de um gerador de congruencia linear multiplicativo
com multiplicador a e modulo m depende do menor valor
positivo menor k de modo que
ak = 1 mod m
Isto porque, quando essa relaca o e satisfeita, a seque ncia comeca
a repetir.
O perodo nao pode ser maior que k.
17 / 18
O Metodo
Por exemplo m = 31 e a = 7, isto e
xi = 7xi1 mod 31
Assumindo x0 = 19, temos a seque ncia
9, 1, 7, 18, 2, 14, 5, 4, 28, 10, 8, 25, 20, 16, 19
O perodo e 15. Assim, neste temos
715 = 1 mod 31
No R
> (7(15))%%(31)
[1] 1
7 nao e uma raz primitiva modulo 31.
18 / 18