Sunteți pe pagina 1din 7

Conteo, muestreo y juegos en Matlab

Martín Villegas, Karen Rosero

Universidad de las Fuerzas Armadas ESPE


Departamento de Eléctrica y Electrónica
Sangolquí - Ecuador
martin@espe.edu.ec, kgrosero@espe.edu.ec

Resumen- En el presente informe se explora la utilidad de


Matlab en el campo de la teoría combinatoria, conteo y
1. Muestreo con reemplazo
muestreo, haciendo uso de los comandos que nos permiten
calcular combinaciones, permutaciones y facilitar predicciones
en algunos juegos de azar, con la utilización de distintas
El rand (n, m) función genera una matiz n x m de números
funciones creadas para tal fin. aleatorios, distribuido uniformemente entre 0 y 1. Un vector
de estos números puede ser utilizado para simular
Palabras Clave- conteo, muestreo, juegos de azar, Matlab experimentos repetidos, donde cada posible resultado tiene
una probabilidad fija. Por ejemplo, considere un experimento
I. INTRODUCCIÓN en el evento A ocurre con probabilidad capacidad 0.5, B se
En esta práctica de laboratorio se utilizará Matlab para produce con una probabilidad de 0,3 y C se produce con una
ayudar a resolver una variedad de problemas en la teoría de la probabilidad de 0,2. Este experimento podría ser simulado de
probabilidad. Los últimos ejercicios requerirán la familiaridad la siguiente manera:
con el teorema de Bayes. Se va a utilizar dos de las funciones
de números aleatorios de Matlab, rand y randperm, para Ejemplo 1:
simular experimentos aleatorios. Estos pueden ser usados
para revisar sus soluciones a problemas sencillos o para los w = rand(1,1)
problemas más complejos donde es difícil o imposible w = 0.9134
encontrar una solución analítica, estos métodos basados en la
simulación son a menudo una buena alternativa. Ejercicio 1:

II. DESARROLLO Si w ≤ 0.5, decimos que el evento A ha ocurrido, si 0.5 ≤ w ≤


0.8 decimos que B ha ocurrido, cualquier otro caso decimos
A. Simulación Simple que C ha ocurrido.
La realización de experimentos de probabilidad es
conocida como muestreo. En teoría de la probabilidad es útil Si el experimento es repetido muchas veces, el resultado
distinguir entre el muestreo con reemplazamiento y muestreo puede usarse para estimar las probabilidades de los eventos.
sin reemplazo. En el primer caso, las condiciones de un La mayoría de los experimentos que hay, la más precisa será
experimento de probabilidad siendo el mismo de un la que se convierte. Se va a investigar esto para el simple
experimento a otro, por lo que las probabilidades no cambien. ejemplo de lanzar un dado de cuatro lados, donde cada
En este último caso, las condiciones cambian, sobre la base número de 1 a 4 ocurre con una probabilidad de 0,25.
del resultado de los experimentos anteriores.
Deberá:
Por ejemplo, considere la posibilidad de seleccionar las
bolas de una bolsa que contiene 3 bolas rojas y 3 bolas 1. Usar w = rand(100,1) para generar un vector aleatorio de
verdes. Si las bolas se sustituyen después de cada dimensión 100, simulando 100 lanzamientos del dado.
experimento, la probabilidad de seleccionar una bola verde o
rojo siempre será 0,5. 2. Decir que un 1 fue lanzado en i experimentos, si w(i) es
menor o igual a 0.25. Contar cuantas veces un 4 fue
Sin embargo, si las bolas no se reemplazan, la selección lanzado de los 100 experimentos y llámalo n.
de una bola verde en el primer experimento hará la selección
de una bola verde menos probable para el segundo 3. Estimar la probabilidad de lanzar un 4 como p(4)=n/100.
experimento. Ejemplos de muestreo con reemplazo incluyen
lanzamiento una moneda o tirar un dado. Ejemplos de 4. Que cerca es este estimado al valor verdadero, o.25?
muestreo sin reemplazo incluyen sorteos de lotería o las repite los pasos anteriores para 500, 1000, 5000 y 10000
selecciones para un equipo de fútbol. experimentos. Que es lo que encuentras.

En Matlab, puede utilizar la función rand para simular el Para esto utilizaremos el siguiente código:
muestreo con reemplazo, y randperm a simular el muestreo
sin reemplazo. function [n prob]=muestreorem(N)
S=.25; Deberá repetir esta simulación para estimar la
t=rand(N,1); probabilidad de sacar una primera bola roja, luego una
n=0; segunda bola verde.
for i=1:N
if(t(i)<=S) Ejercicio 1:
n=n+1;
end 1. Escriba un programa Matlab para repetir la
end simulación de más de 100 veces. Producir un conteo,
prob=n/N; n, de cuantas veces que una bola roja se sacó primera
disp(prob) y una bola verde segunda.

El programa entrega como resultado el valor de la 2. Después de repetir la simulación, estimar la


probabilidad obtenida para el número de intentos dados. probabilidad usando p (rojo , verde) = n /100.

Para N=100 3. Calcular la probabilidad real en el papel. ¿Qué tan


cerca es su estimación?
>> muestreorem(100) 0.2200
ans = 4. Repita los pasos anteriores para 500, 1.000, 5.000 y
10.000 experimentos. Qué es lo que encuentras?
22
Para N=500 Se realizó el programa para el ejercicio propuesto.

>> muestreorem(500) 0.2520 function [n prob]=muestreosin(N)


ans = n=0;
comp=[1 2];
126 bag=[1 1 1 2 2 2];
for i=1:N
Para N=1000 perm=randperm(6);
draw=perm(1:2);
>> muestreorem(1000) 0.2560 balls=bag(draw);
ans = if(isequal(comp,balls))
n=n+1;
256 end
end
Para N=5000 prob=n/N;

>> muestreorem(5000) 0.2438 disp(prob)


ans = >> muestreosin(100)
0.3100
1219 ans =

Para N=10000 31

>> muestreorem(10000) 0.2534


Cálculo teórico
ans =

2534

Se observa que la probabilidad simulada se acerca al valor de


probabilidad calculado.

2. Muestreo sin reemplazo

La función randperm (m) produce una ordenación


aleatoria de los números de 1 a m. Suponga que desea elegir
dos bolas de una bolsa que contiene tres bolas rojas y tres
bolas verdes. Un solo experimento puede ser simulado como
sigue: La probabilidad es 3/6 x 3/5 = 0.333 siendo un valor
aproximado al programa en Matlab.
bag = [ 1 1 1 2 2 2 ]
perm = randperm(6) Realizando el experimento para los demás valores
draw = perm(1:2) tenemos:
balls = bag(draw)
N=500 function [n prob]=moneda(N)
n=0;
>> muestreosin(500) 0.3200 for i=1:N
cuenta2=0;
ans = for j=1:4
A=rand(1);
160 if(A<=.5)
B(j)=1;
N=1000 else
B(j)=2;
>> muestreosin(1000) 0.3070 end
end
ans = for k=1:4
if(B(k)==1)
307 cuenta2=cuenta2+1;
end
N=5000 end
if(cuenta2==2)
>> muestreosin(5000) 0.2920 n=n+1;
end
ans = end
prob=n/N;
1460 disp(prob);

N=10000 >> moneda(100)


0.3300
>> muestreosin(10000) 0.3097 ans =
33
ans =
Tenemos un probabilidad cercana a la calculada para el
3097 experimento de la moneda

B. Problemas
2. Una lotería tiene bolas numeradas del 1 al 10. Cinco
bolas se seleccionan, y el ganador debe coincidir con
Calcular las soluciones a los siguientes problemas. En
todas las cinco bolas (orden no importa). ¿Cuál es la
cada caso, comprobar su respuesta escribiendo un programa
probabilidad de ganar?
en Matlab para simular el problema y estimación de la
probabilidad requerida de una cantidad muy grande de
experimentos, utilizando los métodos de la Sección 2. Usted La probabilidad de acertar n números de bolas es:
tendrá que decidir si el problema es equivalente al muestreo
con reemplazo o el muestreo sin reemplazo. De acertar 0 tenemos:

1. Una moneda justa se lanzó cuatro veces. ¿Cuál es la


probabilidad de obtener dos caras y dos sellos (en
cualquier orden)?
De acertar 1 tenemos:
Cálculo Teórico: Se puede resolver el problema por medio de
la distribución binomial. Siendo n el número de
experimentos, k el número de sucesos y p la probabilidad de
lograr cada suceso.
𝑛
𝑝(𝑛, 𝑘, 𝑝) = ( ) 𝑝𝑘 (1 − 𝑝)𝑛−𝑘 De acertar 2 tenemos:
𝑘
4 1 2 1 4−2
𝑝(𝑛, 𝑘, 𝑝) = ( ) ∗ ( ) ∗ (1 − )
2 2 2

𝑝(𝑛, 𝑘, 𝑝) = 0.375

Código De acertar 3 tenemos:


Para tener un valor acertado en la probabilidad haremos
el experimento unas 100 veces.
𝑃(𝑥 ≥ 1) = 0.176
Código

function [n prob]=doble4(N)
De acertar 4 tenemos n=0;
A=[1 1];
for i=1:N
for j=1:3
for k=1:2
w=rand(1);
De acertar 5 tenemos: if(w<=.25)
B(k)=1;
else

B(k)=2;
end
Para este problema utilizaremos las funciones vistas en el end
anterior laboratorio. if(isequal(B,A))

state = pick_nums(1:10,5); player n=n+1;


= pick_nums(1:10,5); [num_matches break
val_matches] = end
count_matches(state,player); end
disp(1:10) end
disp(state); prob=n/N;
disp(player); disp(prob);
disp(num_matches)
; Para un número de 100 experimentos tenemos:
disp(val_matches)
>> doble4(100)
Para un sorteo realizado obtenemos los siguientes datos:
0.1700
ans =
1 2 3 4 5 6 7 8 9 10
6 1 5 7 10
25946 17
2 Mientras que para un número alto de experimentos tenemos:
65
>>doble4(10000)
Donde la fila 1 representa las bolas enumeradas, la fila 2 los
0.1781
valores del estado, la fila 3 los valores del jugador, la fila 4 el
número de coincidencias y la fila 5 los números coincididos. ans =

Siendo 2 el número de coincidencias su probabilidad es de 0.4 1781


es decir es un valor esperado en este sorteo.
Para un mayor número de experimentos tenemos una
3. Dos dados de cuatro lados se lanzan al mismo aproximación más real a lo calculado.
tiempo. Esto se repite tres veces. ¿Cuál es el
probabilidad de que un doble 4 es lanzado al menos una
4. Un dado de cuatro lados se tira 6 veces. ¿Cuál es la
vez fuera de las tres veces?
probabilidad de sacar dos 4s consecutivamente? (Este es
La probabilidad de obtener dos cuatros en los dados es de mucho más fácil para simular que para calcular a mano!)
1/16. Con lo cual podemos calcular la probabilidad del
problema mediante una distribución binomial.

Como nos pide la probabilidad de que se cumpla al menos


una vez tenemos:

𝑃(𝑥 ≥ 1) = 1 − 𝑃(𝑥 < 1)


0
1 3 1 1 2
1 − 𝑝 (3,0, ) = 1 − ( ) ( ) (1 − )
16 0 16 16
Teniendo como resultado P(x)=0.24
Puede cargar los datos anteriores como dos matrices,
El código del problema es el siguiente: data1 y data2, a partir del archivo lab2.mat. Usted debe ser
capaz de responder a las preguntas que siguen realizando los
function [n prob]=doblecuatro6(N) cálculos directamente en estas matrices utilizando técnicas de
n=0; vectorización. Utilizamos M para denotar el caso de que un
for i=1:N estudiante es de sexo masculino, F para el caso de que un
for j=1:6 estudiante es de sexo femenino; P para el caso de que un
w=rand(1); estudiante está presente, y A para el caso de que un estudiante
if(j==1) está ausente. Obviamente, estos dos pares de eventos son
if(w<=.25) mutuamente excluyentes.
A(j)=1;
else 1. Para cada lectura, usar los datos para encontrar las
A(j)=2; matrices que dan las matrices de probabilidad conjunta
end de estar presente o estar ausente de una lectura, y ser
else hombre o mujer.
if(w<=.25)
if(A(j-1)==1)
n=n+1;
break
else
A(j)=1;
Para las 9h00 tenemos:
end
else
A(j)=2;
end
end
end
end
prob=n/N; Según el Teorema de Bayes:
disp(prob);

Para el caso de 100 experimentos el resultado es igual a:

>> doblecuatro6(100)
0.2400
ans =
24

Donde tenemos una muy buena aproximación con los


cálculos teóricos.
Para las 10h00 tenemos:
C. Caso: Asistencia a clases

El jefe del Departamento está preocupado por la escasa


asistencia a clases entre los estudiantes. Decide encargar un
estudio para investigar las posibles causas. Está interesado en
particular el saber si el calendario de clases afecta a la Según el Teorema de Bayes:
asistencia, y si varía entre hombres o mujeres. El
departamento cuenta con la asistencia a las dos clases con
cursos casi idénticos, donde el primero empieza a las 9h00 y
el segundo a las 10h00, utilizando la base de datos de
alumnos matriculados en cada curso se encuentran los
siguientes datos:
2. Para cada lectura, encontrar dos vectores uno dando es la probabilidad de que la moneda seleccionada sea la
p(M) y p(F) y otra dando p(P) y p(A). cargada, dado que salió cara?

Para las 9h00 tenemos:

Para las 10h00 tenemos:

3. Utilice las respuestas de las dos preguntas anteriores


para el estado, para cada clase, si el sexo del estudiante
que tenga es un factor que afecta a la asistencia de clase, 2. La misma moneda es lanzada una segunda vez.
mediante la búsqueda de si los eventos M y F son Cuál es la probabilidad de que la moneda salga cara,
independientes de los eventos P y A. dado que salió cara en la primera? ¿Porque son dos
eventos no independientes?
Se concluye que los eventos son independientes, no existe
relación entre presencia o falta tomando en cuenta el sexo,
tanto hombres como mujeres tienen una actitud similar dentro
de cada curso.

4. Ahora calcular la matriz que da la probabilidad


condicional de un estudiante que asiste a una
conferencia, dado el sexo del estudiante.

3. Suponga una de las dos monedas es lanzada 2n veces.


Escriba una función en Matlab para calcular la probabilidad de
obtener n caras y n cruces, dado que la moneda seleccionada es
la justa, y dado que la moneda seleccionada es la cargada (este
debería ser un argumento de la función). La función debería
trabajar para cualquier valor de n.

Código

function monedas(n,w)
n_head=0; outcomes_coin=0;
D. Caso: Lanzamiento monedas seguras if w==1
for i=1:2
Este ejemplo requiere calcular desde la distribución for j=1:n
binomial. Suponga estas dos monedas. Una moneda es justa, perm = randperm(2); % random ordering of
con la probabilidad de obtener una cara o una cruz de 0.5. La the numbers 1 to 2
segunda moneda es cargada: la probabilidad de obtener una % simulating the order in which head or
cara es 0.6 y la probabilidad de obtener una cruz es 0.4. tail are drawn respectively
draw = perm(1); % only consider the first
outcome in a tossed
1. Una de las dos monedas es seleccionada (no
sabemos cuál). La moneda es lanzada y sale cara. Cuál
outcomes_coin(1,j) = draw; %acumulador de Prob de H con biased coin en 4 veces: 0.129600
lanzamientos Prob de T con biased coin en 4 veces: 0.025600
end
outcomes_coin2(i,1:n)=outcomes_coin;%acum
ulador de 2 veces los lanzamientos 4. La moneda ha sido seleccionada aleatoriamente.
end Use la función para calcular la probabilidad que la
prob_fairCoin_H = 0.5^n; %probabilidad de
moneda seleccionada sea la cargada, dado que n
salir H con fair coin
lanzamientos son cara y n lanzamientos son cruces.
disp(outcomes_coin2);
Grafique el valor de esta probabilidad para n desde 0 a
fprintf('Prob de H con fair coin en %d
40. Explique al dibujo graficado.
veces: %f\n',n,prob_fairCoin_H);
fprintf('Prob de T con fair coin en %d La moneda cargada tiene una posibilidad mayor de sacar
veces: %f\n',n,prob_fairCoin_H); cara dado que está construida por este motivo que una
end moneda común y corriente.
outcomes_coin=0;
if w==2
for i=1:2
fprintf('Lanzamientos %d',i);
flipped_coin=rand(1,n) %probabilidades
aleatorias en c/lanzamiento
%en dos tiempos distintos.
for j=1:n
if flipped_coin(j)>=0.6
outcomes_coin(j)=1; %acumulacion de Heads
else
outcomes_coin(j)=2; %acumulacion de Tails
end
end
outcomes_coin2(i,1:n)=outcomes_coin;
end
%proabilidades de ser H o T con moneda
sesgada.
prob_biasedCoin_H = 0.6^n;
prob_biasedCoin_T = 0.4^n; III. CONCLUSIONES Y RECOMENDACIONES
disp(outcomes_coin2);
fprintf('Prob de H con biased coin en %d A. Conclusiones
veces: %f\n',n,prob_biasedCoin_H);
fprintf('Prob de T con biased coin en %d  A través de Matlab se puede determinar la solución
veces: %f\n',n,prob_biasedCoin_T); para los diferentes problemas de diferentes
end asignaturas como en este caso se pudo determinar la
solución de algunos problemas de estadística
>> monedas(4,1) mediante la creación de programas.
22122111
 Matlab sirve como herramienta para probar y
Prob de H con fair coin en 4 veces: 0.062500 examinar los datos obtenidos teóricamente.
Prob de T con fair coin en 4 veces: 0.062500
 Matlab agilita la resolución de los problemas.
Para la moneda injusta y 4 caras tenemos:
 Con Matlab podemos establecer experimentos de n
>> monedas(4,2) cantidades con lo cual se puede tener una gran
Lanzamientos 1 aproximación a eventos reales, difíciles de realizar
flipped_coin = en un tiempo determinado

0.0060 0.3867 0.1810 0.9654 B. Recomendaciones

Lanzamientos 2 REFERENCIAS
flipped_coin =
[1] J. Díaz-Verdejo, "Ejemplo de bibliografía", En Actas de las XI Jornadas
de Ingeniería Telemática, vol. 1, n. 1, pp. 1-5, 2013.
0.6427 0.4469 0.6956 0.1633

2 2 2 1
1 2 1 2

S-ar putea să vă placă și