Práctica 1
COMPETENCIA: Analizar los conceptos básicos de probabilidad, específicamente
el de aleatoriedad y VARIABLE ALEATORIA, como base de los procesos de
simulación estocástica.
DESCRIPCIÓN:
Realizar un programa que genere números aleatorios para simular los siguientes
eventos:
a. Lanzar una moneda.
b. Tirar un dado de seis lados.
c. Tirar dos dados de seis lados.
El programa debe mostrar el menú con las tres opciones y preguntar el número de veces
que va a simularse el evento, lanzarse la moneda o dados. Mostrar el detalle de los
lanzamientos y el conteo de las coincidencias de los resultados obtenidos.
Para el reporte registrar los datos obtenidos:
- Explicación de los resultados en términos de los conceptos de aleatoriedad, variable aleatoria y probabilidad.
- Explicar la sección del código que resuelve el problema buscar.
- Gráficar los resultados obtenidos (Barras.)
Lanzar una moneda
Sabemos que la probabilidad de que nuestra variable aleatoria (1 si es el anverso, 2 si el reverso) es , y por el teorema de los grandes números después de un número grande de lanzamientos tendrá converger a ese valor. De hecho, esta es una distribución de Bernoulli. Dicho número grande está dado por el umbral de error que queremos asumir. Para nuestro caso .
Simulación
Generamos una matriz de experimentos dado el evento de lanzar una moneda. La idea es separar el experimento de las repeticiones.
simulate(
lambda: [random.randint(1, 2)],
lambda experiment: [experiment() for _ in range(0,10000)]
)
Resultados
Vemos que nuestro experimento aleatorio muestra los resultados esperados (la convergencia hacia ) . Que fue obtenido con experimentos pseudoaleatorios.
Lanzamientos
1 51.2%
2 48.8%
Tirar un dado de seis lados
Sabemos que la probabilidad de que nuestra variable aleatoria (los valores del dado de 1 al 6) es Por el teorema de los grandes números después de un número grande de lanzamientos tendrá converger a ese valor. También sigue una distribución de Bernoulli. Dicho número grande está dado por el umbral de error que queremos asumir. Para nuestro caso .
Simulación
Generamos una matriz de experimentos dado el evento de tirar un dado de seis lados. La idea es separar el experimento de las repeticiones que son independientes entre sí.
simulate(
lambda: [random.randint(1, 6)],
lambda experiment: [experiment() for _ in range(0,50000)]
)
Resultados
Vemos que nuestro experimento aleatorio muestra los resultados esperados (la convergencia hacia ) . Que fue obtenido con experimentos pseudoaleatorios.
Tiros
1 17.1%
5 17.1%
6 16.7%
2 16.6%
3 16.6%
4 15.9%
Tirar dos dados de seis lados
Sabemos que las probabilidades de nuestra variable aleatoria (los valoes del dado de 2 al 12 que son obtenidos tras sumar de valores de los dados) son Por el teorema de los grandes números después de un número grande de lanzamientos tendrá converger a esos valores; nuestra hipótesis es que es el valor con mayor probabilidad de ocurrir. También sigue una distribución de Bernoulli. Dicho número grande está dado por el umbral de error que queremos asumir. Para nuestro caso .
Simulación
Generamos una matriz de experimentos dado el evento de tirar dos dados de seis lados y sumar ambas caras. La idea es separar el experimento de las repeticiones.
simulate(
lambda: [sum([random.randint(1, 6),random.randint(1, 6)])],
lambda experiment: [experiment() for _ in range(0,50000)]
)
Resultados
Vemos que nuestro experimento aleatorio muestra los resultados esperados (la convergencia hacia ) . Que fue obtenido con experimentos pseudoaleatorios.
Tiros
7 16.7%
8 14.1%
6 13.7%
5 11.3%
9 10.9%
10 8.5%
4 8.2%
11 5.6%
3 5.5%
12 2.8%
2 2.8%
Conclusiones
Por los resultados, podemos concluir que las hipótesis fueron exitosas: el teorema de los grandes números se ha cumplido.
Referencias
https://gist.github.com/sanchezcarlosjr/a8633fd691febea9c88f3c86aba173d8