01 · Punto de partida
El ladrillo continuo del simulador
¿Un retardo entre 2 y 5 segundos? ¿Una posición al azar en [0,10)? ¿Ruido ±0,5 sobre una señal? Todos son U(a,b): probabilidad repartida pareja en un intervalo continuo.
Es la salida cruda del generador base y la entrada de casi todos los métodos continuos: invertirla da exponenciales y otras leyes (Temas 22–27), y sin ella no hay Monte Carlo ni jitter.
- ¿Por qué a + (b−a)·U ya es exacto?
- ¿Qué densidad, CDF, media y varianza debe reproducir?
- ¿El borde b se incluye o no? ¿Importa?
- ¿Cuándo el flotante rompe la uniformidad?
02 · Definición
Densidad plana y rampa lineal
f(x) = 1/(b−a) en [a,b), F(x) = 0 si x < a, (x−a)/(b−a) si a ≤ x < b, 1 si x ≥ b. E[X] = (a+b)/2, Var(X) = (b−a)²/12.
Escala y desplaza
(b−a) estira [0,1) al ancho pedido; +a lo ubica. Transformación lineal exacta, sin rechazo ni tablas.
Planicie total
Cualquier subintervalo de igual largo tiene igual probabilidad. El histograma con N grande es plano a la altura 1/(b−a).
O(1) base
Una multiplicación + una suma por muestra. Alimenta inversa, Box-Muller, jitter y Monte Carlo.
| Caso | Media | Varianza | Densidad |
|---|---|---|---|
| U(0,1) | 0,50 | 0,0833 | 1,0 |
| U(2,8) | 5,00 | 3,00 | 0,1667 |
| U(−1,1) | 0,00 | 0,3333 | 0,50 |
03 · Anatomía
Bordes, flotante y resolución
- Fórmula canónica
a + (b - a) * Ucon U ∈ [0,1). Da [a,b): el a sale, el b exacto casi nunca. En continuo, incluir o no un punto mide 0.- Orden de operaciones
- Con |a| ≫ (b−a) se pierde resolución (cancelación). Preferir
a * (1 - U) + b * Usi el intervalo está lejos del cero. - Resolución finita
- El doble tiene 2⁵³ valores en [0,1): intervalos de ~10⁻¹⁶. Con (b−a) > 2⁵³ o con bin ultra fino, usar enteros nativos o
uniformde la librería. - No discretizar sin querer
int(),round()o pocos decimales convierten U(a,b) en discreta. Mantener flotante hasta el modelo que lo pida (Temas 17, 34).
Escala lineal
Exacta y auditable
Media y varianza calzan con (a+b)/2 y (b−a)²/12. Dos momentos verifican el generador.
Módulo o recorte
Deforma bordes
U % ancho + a o clampear colas apila masa en los extremos. El histograma lo delata con N grande.
04 · Para qué sirve una planicie
De la base al modelo
- 1Tiempos y posiciones.
Retardos, llegadas uniformes en una ventana, puntos al azar en un segmento.
- 2Entrada de la inversa.
X = F⁻¹(U) con U ~ U(0,1) genera exponenciales, Weibull y más. (Temas 5, 22, 27)
- 3Jitter y Monte Carlo.
Ruido ±h para romper empates, e integración promediando f sobre U(a,b).
- 4Regla de escala.
Si necesitás otro ancho o centro, reescalá: no busques otro generador.
05 · Representación en Python
Escala canónica y auditoría de momentos
Implementación directa más chequeo de media/varianza contra (a+b)/2 y (b−a)²/12.
Python en tu navegador. Probá a = −3, b = 3: la varianza teórica es 3,0.
import random
random.seed(170)
a, b = 2.0, 8.0
N = 12000
def uniforme_continua(a, b):
return a + (b - a) * random.random()
m = [uniforme_continua(a, b) for _ in range(N)]
media = sum(m) / N
var = sum((x - media) ** 2 for x in m) / N
print("media:", round(media, 3), "teórica:", (a + b) / 2)
print("var:", round(var, 3), "teórica:", round((b - a) ** 2 / 12, 3))
print("min:", round(min(m), 3), "max:", round(max(m), 3))
Media ≈ 5,0 y var ≈ 3,0. El mínimo roza 2 y el máximo roza 8 sin pasarse.
06 · Exploración
Laboratorio: planicie que se muda y se estira
Movete a, el ancho y N. El histograma usa 20 bines entre a y b: cada barra debe pegarse a la línea 1/20 = 0,05. Con N chico hay ruido; con N grande, planicie.
Planicie U(a,b)
X = a + (b − a)·U
Con a 2, b 8 y N 6000, planicie en 0,05 por bin.
20 bines entre a y b vs línea teórica. Probá ancho 10 con N = 200 (ruido) y N = 12000 (plano).
Preguntas para explorar
- Con a = 2 y ancho 6, ¿media y varianza teóricas?
- Mové a de 0 a 5 con ancho fijo. ¿Cambia la forma o solo la ubicación?
- Duplicá el ancho. ¿La altura por bin cambia? ¿Y la varianza?
Ver respuestas sugeridas
- b = 8, media 5,0 y varianza 36/12 = 3,0.
- Solo la ubicación: la planicie se traslada, la forma y la altura por bin (0,05) no cambian.
- La altura por bin sigue en 0,05 (son 20 bines relativos); la varianza se cuadruplica con el ancho.
07 · Comprensión
Confusiones frecuentes
«U(0,1) y U(a,b) son otro generador»
No: es el mismo generador reescalado. Pedir otra función base para cada intervalo es deuda técnica.
«El borde b incluido no importa nunca»
En continuo un punto mide 0, pero en código b exacto puede romper un índice o una inversa con log(0). Fijar el convenio [a,b).
«Con N = 100 ya se ve plana»
Con 20 bines y N = 100 hay ~5 puntos por bin: ruido ±0,02. La planicie exige miles de réplicas.
«Redondeo a 2 decimales y sigue uniforme»
Redondear crea una discreta de centésimas con bordes a mitad de peso. Mantener flotante completo.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: retardo auditado
Retardo U(2,8), N = 12000, semilla 171: verificá media 5,0 y var 3,0.
import random
random.seed(171)
a, b, N = 2.0, 8.0, 12000
m = [a + (b - a) * random.random() for _ in range(N)]
media = sum(m) / N
print(round(media, 3), round(sum((x-media)**2 for x in m)/N, 3))
Ver solución razonada
≈ 5,0 y ≈ 3,0 (típicamente 4,95–5,05 y 2,9–3,1). Desvíos mayores con N = 12000 ya huelen a bug.
Ejercicio 2: cazar el módulo
Compará a + (b−a)·U vs (a + 7·U) % 6 + 2 con a = 2, b = 8 y 20000 tiros. ¿Qué bordes se deforman?
import random
random.seed(172)
a, b, N = 2.0, 8.0, 20000
bien = [a + (b - a) * random.random() for _ in range(N)]
random.seed(172)
mal = [(a + 7 * random.random()) % 6 + 2 for _ in range(N)]
print("bien min/max:", round(min(bien), 2), round(max(bien), 2))
print("mal min/max: ", round(min(mal), 2), round(max(mal), 2))
Ver solución
Bien cubre [2,8) parejo; mal pliega la cola que supera 8 sobre [2,3): ese bin queda con doble masa. El histograma lo delata.
Ejercicio 3: jitter simétrico
Con U(−1,1) sumá jitter a 2000 señales y verificá que la media del ruido ≈ 0 y la varianza ≈ 1/3.
Ver una posible respuesta
import random
random.seed(173)
a, b, N = -1.0, 1.0, 2000
m = [a + (b - a) * random.random() for _ in range(N)]
media = sum(m) / N
print(round(media, 3), "vs 0.0")
print(round(sum((x-media)**2 for x in m)/N, 3), "vs 0.333")
Media ≈ 0 (±0,03) y var ≈ 0,33. El jitter simétrico no sesga la señal, solo la dispersa.
09 · Síntesis
Ideas para recordar
- U(a,b) = a + (b−a)·U(0,1): escala y desplaza, sin rechazo.
- Densidad 1/(b−a), media (a+b)/2, varianza (b−a)²/12.
- Convenio [a,b): el b exacto se rechaza o se evita.
- Histograma plano con N grande; N chico es ruido, no sesgo.
- Base de inversa, jitter y Monte Carlo.
En el próximo tema mediremos esperas: la exponencial con −ln(U)/λ.