






Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Explicación acerca de números aleatorios en Python
Tipo: Apuntes
1 / 12
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!







Los historia de los números aleatorios nace en los años cuarenta con la creación del método conocido como Simulación de Monte Carlo por Metropolis y Ulam.
Inicialmente, en los años cuarenta la simulación de procesos estocásti- cos estuvo restringida al proyecto secreto del departamento de defensa de los estados unidos.
Más tarde Lehmer propuso el generador lineal de congruencia, el cual se ha convertido en método más usado en la actualidad. Este es un generador de números aleatorios que es utilizado por otros generadores para procidir buenos números aleatorios.
Los números aleatorios son aquellos que pueden ser generados a partir de fuentes de aleatoriedad, las cuales son de naturalza física (dados, ruletas, mecanísmos electrónicos o mecánicos, etc.)
Los números pseudo aleatorios son aquellos que tienen un com- portamiento similar a la naturaleza aleatoria, pero están ceñidos a un
patrón de naturaleza matemática, que hace que su comportamiento sea determinístico.
Secuencias no correlacionadas. Esto significa que en una sucesión de números aleatorios, una subsecuencia de números aleatorios no debe estar relacionada con ningúna otra.
Independencia estadística y equiprobabilidad. Lo cual implica que la probabilidad de aparición de un número en una sucesión de números aleatorios debe ser la misma para cada uno de los elemen- tos. Además, la aparición de un elemento en una serie no excluye la aparición de cualquier otro. Período máximo. Los generadores de números aleatorios son cí- clicos, por lo cual es deseable que cada uno de los elementos aparezca solo una vez en la secuencia antes que empiece a repetirse. Lo que se requiere es que el período del ciclo sea largo.
Uniformidad. Los números aleatorios pueden ser modelados median- te la función de densidad de probabilidad de la variable aleatoria uni- forme estandar.
Eficiencia. La cual se mide en términos de utilización de la CPU
1.2. Generador de congruencia lineal
Los generadores de números aleatorios son rutinas para generar una secuencia de números aleatorios.
Lo primero que se quiere es que los números aleatorios que se generen tengan un gran período.
Al hacer las pruebas estadísticas, estos números deben tener las pro- piedades estadísticas de los números aleatorios.
Ejemplo. m = 10, a = c = x o = 7.
x 1 = (7 · 7 + 7) m´od 10 = 6 x 2 = (7 · 6 + 7) m´od 10 = 9 x 3 = (7 · 9 + 7) m´od 10 = 0 x 4 = 7 x 5 = 6
x ¯ = 7, 6 , 9 , 0 , 7 , 6 , 9 , 0 , .... Se llega a un ciclo que tiene un período muy corto, donde no están todos los números del 0 al 9. Este ejemplo mues- tra una de las propiedades de los generadores lineales congruentes que es que éstos llegan a un ciclo.
O sea que este algoritmo tiene un período de 4. y los números aleatorios en si se detrminan entre [0, 1], o sea, que se deben dividir entre el módulo U¯ = ¯x/m = 0, 7 , 0 , 6 , 0 , 9 , 0 , ....
Un ejemplo de una serie que se genera con un período completo es a = 5, c = 7, m = 8 y x o = 5.
Los buenos generadores son los que generan un período completo.
El número máximo del módulo debe se obtiene de la forma m = P e , donde P es la base del sistema numérico que utiliza el computador y e es el número de bits del computador. Generalmente se utiliza base 2 o base 10.
Para escoger al multiplicador a se toman las siguientes dos reglas:
a = 1 + M CM (P 1 , P 1 , ..P 1 , P k − 1 , P k , 4) × t (1.5)
si 4 divide al módulo, siendo t un número entero positivo y P 1 , ..P 1 , P k − 1 , P k son números primos de m. Ó
a = 1 + M CM (P 1 , P 1 , ..P 1 , P k − 1 , P k ) × t (1.6)
si 4 no divide al módulo.
La semilla es un número entre 0 y menor que m 0 ≤ x o < m
Para escoger c se debe tener en cuenta que debe ser un entero positivo menor que m y dbe ser primo relativo con m, o sea que su máximo común divisor entre c y m MCD(c, m) = 1 debe ser 1 , no existe otro numero que los pueda dividir a los dos simutaneamente.
La función de Euler permite determinar el número de valores que puede tomar c
ϕ(m) =
∏^ k
i =
P (^) ie i −^1 (P i − 1) (1.7)
Ejemplo. Calcular los valores de a, c y x o para un módulo de m = 48 que permita obtener un período completo.
Para encontrar a vemos si 4 divide a m = 48. En este caso si divide al módulo, entonces se encuentran los factores primos de m:
48 = 2^4 · 31 P e^1 · P e^2 (1.8)
donde P 1 = 2, e 1 = 4 y P 2 = 3, e 2 = 1, así que a puede tomar los valores a = 1 + M CM (2, 3 , 4) × t = 1 + 12 × t (1.9)
tal que a = 1, 13 , 25 , 37.
Los posibles valores de la semilla son x o = 0, 1 , 2 , 3 , 4 , .., 47.
Para encontrar el número de términos que puede tener c se tiene
ϕ(48) = P 1 e 1 −^1 (P 1 −1)P 2 e 2 −^1 (P 2 −1) = 2^3 (2−1)· 30 (3−1) = 16 (1.10)
o sea que c puede tomar 16 valores.
c además debe ser primo relativo de m = 48, entonces c puede tomar los valores:
c = 1, 5 , 7 , 11 , 13 , 17 , 19 , 23 , 25 , 29 , 31 , 37 , 39 , 41 , 43 , 47. (1.11)
import random random.random()
Cada vez que se importa random, la secuencia subsiguiente de llama- das random.random() producirá números diferentes.
Para fines de depuración, es útil obtener la misma secuencia de núme- ros aleatorios cada vez que ejecutamos el programa. Esta funcionali- dad se obtiene configurando una semilla antes de que comencemos a generar números.
Con un valor dado de la semilla, se genera una y solo una secuencia de números.
random.seed()
La función
random.uniform(a,b)
genera números aleatorios uniformes en el intervalo medio abierto [a, b). de igual manera, la función
random.normalvariate(a,b)
genera números aleatorios de la distribución normal en el intervalo medio abierto [a, b).
1.3. Método Monte Carlo
Se desea calcular un integral numérica del tipo: ∫ (^) b
a
f (x)dx (1.16)
donde x es una variable aleatoria con distribución uniforme continua en [a, b]. Si x es una variable aleatoria, entonces f (x) también será una variable aleatoria. Se sabe que el valor esperado de una función f (x) por definición será:
E(f (x)) =
∫ (^) b
a
f (x)h(x)dx (1.17)
donde h(x) es la función de densidad de probabilidad. Se define una densidad de probabilidad en el intervalo [a, b] con una función no ne- gativa en ese intervalo que está normalizada, ∫ (^) b
a
h(x)dx = 1 (1.18)
La varianza de f tambien conocida como dispersión se determina de la forma: 〈∆f 〉^2 = 〈f 2 〉 h − 〈f 〉^2 h (1.19)
donde 〈∆f 〉 se llama la desviación estándar de f y es una medida de cuánto se desvıa f de su promedio. Si se asume la función de densidad constante en el intervalo de integración se tiene:
h(x) = const =
b − a
y el valor esperado de f (x) por definición será:
E(f (x)) =
∫ (^) b
a
f (x)h(x)dx =
b − a
∫ (^) b
a
f (x)dx (1.21)
de donde se obtiene que
y =
x − a b − a
, x = (b − a)y + a, dx = (b − a)dy (1.27)
Finalmente, se obtiene: ∫ (^) b
a
f (x)dx = (b − a)
∫ (^1)
0
f (a + (b − a)y)dy (1.28)
Si los límites son ∫ (^) ∞
0
f (x)dx (1.29)
Se utiliza la siguiente función:
y =
x + 1
y se obtiene ∫ (^) ∞
0
f (x)dx =
∫ (^1)
0
y^2
f
( 1 y
) dy (1.31)
Muchas veces dividir el espacio en inteervalos para resolver de forma numérica un integral resulta no conveniente desde el punto de vista computacional.
Una alternativa es escoger N puntos aleatoriamente distribuidos en un rectángulo formado por [a, b] × [0, f max ]. De esos N puntos vamos a escoger N ′^ que se encuentran bajo la curva y i < f (x i ).
Lo anterior se puede representar geometricamente como sigue:
∫ (^) b
a
f (x)dx = (b − a)f max
Ejemplo. Los mesones P i son partículas inestables con una masa en reposo de 140 MeV/c^2. Su tiempo de vida en el sistema en reposo es 2 , 6 −^8 s. Si su energía cinética es de 200 MeV, escribe un programa que simule cuántos piones sobrevivirán después de haber recorrido 20 m. Comience con una muestra inicial de 108 piones. Suponga que los piones son monoenergéticos.