Page 87 - cepe2012.pdf
P. 87
i i
“cepeMathBookFC” — 2012/12/11 — 19:57 — page 77 — #81
i i
10. SIMULACI ´ ON 77
esta secci´ on es exponer los fundamentos matem´ aticos que subyacen en algunas de las
implementaciones de los mecanismos para generar n´ umeros aleatorios. En varios de
estos procedimientos se tiene como punto de partida el saber generar n´ umeros dentro
del intervalo unitario Œ0; 1 con distribuci´ on uniforme. Hay dos aspectos importantes
por resaltar. Primero, la mayor´ ıa de los m´ etodos utilizados para generar n´ umeros
aleatorios no son completamente aleatorios, de modo que los resultados que se obtienen
se denominan seudoaleatorios; en el siguiente p´ arrafo daremos un ejemplo de ello.
Segundo, debido a que las computadoras tienen una precisi´ on limitada para representar
a los n´ umeros reales, no todos los n´ umeros del intervalo Œ0; 1, por ejemplo, son
susceptibles de ser generados como n´ umeros aleatorios, s´ olo un n´ umero finito de ellos
pueden ser escogidos. Si para alg´ un entero m la fracci´ on 1=m es el n´ umero positivo m´ as
peque˜ no que una computadora puede representar, entonces los ´ unicos n´ umeros en el
intervalo Œ0; 1 que pueden representarse son 0; 1=m; 2=m; 3=m; : : : ; m=m. Teniendo
estas consieraciones en mente, revisaremos a continuaci´ on un mecanismo particular
que puede usarse para generar n´ umeros seudoaleatorios enteros.
Simulaci´ on de v.a.s discretas
El siguiente procedimiento puede ser usado para generar valores seudoaleatorios dentro
del conjunto f0; 1; 2; : : : ; mg, en donde m un entero positivo fijado de antemano. Sean
a y b dos enteros fijos, y sea X 0 cualquier valor dentro del conjunto indicado. Para
cada n 0 se calcula de manera iterada
(7) X nC1 WD aX n C b m´ odulo .m C 1/:
Por ejemplo, si se toma m D 100, a D 5, b D 13 y X 0 D 23 se obtiene la sucesi´ on de
n´ umeros enteros:
23; 27; 47; 46; 41; 16; 93; 74; 80; 9; 58; 0; 13; 78; 100; 8; 53; 76; 90; 59; : : :
El c´ odigo Python para obtener esta sucesi´ on usando la ecuaci´ on (7) es el siguiente:
>>> m=100
>>> a,b=5,13
>>> n=20 # Numero de iteraciones
>>> x=23 # Valor inicial
>>> for j in range (1,n+1):
>>> print x,
>>> x=(a*x+b)%(m+1) # El operador % calcula modulo
Es importante observar que la sucesi´ on num´ erica que se obtiene a partir de (7) es
peri´ odica, pues siendo el algoritmo completamente determinista, en cuanto un valor
generado aparece por segunda vez, la cadena de enteros previamente obtenida se repite
una infinidad de veces. Es conveniente, por tanto, escoger un valor grande para m a fin
de que este fen´ omeno de repetici´ on no aparezca demasiado pronto. Por ejemplo, si se
toma m D 10, a D 9, b D 9 y X 0 D 1 se obtiene la sucesi´ on:
1; 7; 6; 8; 4; 1; 7; 6; 8; 4; 1; : : :
i i
i i