En una entrada anterior publiqué una entrada en la que se explicaba cuáles son las posibilidades de ganar en el juego de los Euromillones y en otrop la Bonoloto o Lotería Primitiva. Un juego de azar popular en algunos países europeos. Para ello primero se explicó cómo calcular el número total de combinaciones que existen en el juego y la posibilidad de conseguir una cantidad de aciertos de la combinación ganadora. Aplicando el proceso de cálculo solamente a Euromillones. Para obtener la probabilidad de ganar a otro juego, con diferente número reglas, en esta entrada vamos a crear una calculadora de probabilidades de ganar a la lotería en Matlab.
Implementación del proceso de cálculo
La semana pasada se mostró cómo calcular el número de combinaciones que existe en un juego de azar donde se selecciona k bolas de un conjunto de n. Para lo que es necesario usar el coeficiente binomial. El cual se encuentra disponible en Matlab mediante la función nchoosek
. Así el número de combinaciones totales se puede calcular usando la expresión
nchoosek(numeros_1, aciertos_1) * nchoosek(numeros_2, aciertos_2)
donde numeros_1
son los números del primer conjunto, aciertos_1
son los números que se extraen de primer conjunto, numeros_2
son los números de segundo conjunto y aciertos_2
son los números que se extraen de segundo conjunto.
Por otro lado, las combinaciones con una cantidad dada de fallos en el primer y segundo conjunto se pueden obtener con la siguiente expresión:
nchoosek(aciertos_1, aciertos_1 - fallos_1) * ... nchoosek(numeros_1 - aciertos_1, fallos_1) * ... nchoosek(aciertos_2, aciertos_2 - fallos_2) * ... nchoosek(numeros_2 - aciertos_2, fallos_2)
donde fallos_1
son los fallos en primer conjunto y fallos_1
en el segundo.
Creación de una aplicación
Con esto se puede crear una aplicación gráfica en Matlab, para lo que se puede escribir el siguiente código.
function h = loteria_() % Posción del monitor monitor = get(0, 'MonitorPositions'); position_h = monitor(3) / 2 - 536 / 2; position_w = monitor(4) / 2 - 536 / 2; % Figura base h = uifigure('Name', 'Calculadora probabilidades lotería', ... 'Resize', 'Off', ... 'Position', [position_h, position_w, 536, 482]); % Objetos uilabel(h, ... 'Position', [41, 438, 124, 22], ... 'Text', 'Combinación primaria'); combinacinPrimaria = uieditfield(h, 'numeric', ... 'Position', [180, 438, 100, 22], ... 'Value', 50); uilabel(h, ... 'Position', [315, 438, 96, 22], ... 'Text', 'Aciertos primaria'); aciertosPrimaria = uieditfield(h, 'numeric', ... 'Position', [426, 438, 100, 22], ... 'Value', 5); uilabel(h, ... 'Position', [26, 406, 139, 22], ... 'Text', 'Combinación secundaria'); combinacinSecundaria = uieditfield(h, 'numeric', ... 'Position', [180, 406, 100, 22], ... 'Value', 12); uilabel(h, ... 'Position', [299, 406, 112, 22], ... 'Text', 'Aciertos secundaria'); aciertosSecundaria = uieditfield(h, 'numeric', ... 'Position', [426, 406, 100, 22], ... 'Value', 5); uilabel(h, ... 'Position', [15, 373, 150, 22], ... 'Text', 'Número de combinaciones'); numeroCombinaciones = uieditfield(h, 'numeric', ... 'Editable', 'Off', ... 'Enable', 'Off', ... 'Position', [180, 373, 100, 22]); uibutton(h, ... 'Position', [427, 373, 100, 22], ... 'ButtonPushedFcn', @calcular, ... 'Text', 'Calcular'); resultsTable = uitable(h, 'Position', [11, 10, 515, 339]); function calcular(~, ~) resutls = zeros(((aciertosPrimaria.Value + 1) * ... (aciertosSecundaria.Value + 1)), 4); combinaciones = nchoosek(combinacinPrimaria.Value, aciertosPrimaria.Value) * ... nchoosek(combinacinSecundaria.Value, aciertosSecundaria.Value); for fallos_1 = 0:aciertosPrimaria.Value for fallos_2 = 0:aciertosSecundaria.Value row = fallos_1 * (aciertosSecundaria.Value + 1) + fallos_2 + 1; resutls(row, 1) = aciertosPrimaria.Value - fallos_1; resutls(row, 2) = aciertosSecundaria.Value - fallos_2; resutls(row, 3) = ... nchoosek(aciertosPrimaria.Value, aciertosPrimaria.Value - fallos_1) * ... nchoosek(combinacinPrimaria.Value - aciertosPrimaria.Value, fallos_1) * ... nchoosek(aciertosSecundaria.Value, aciertosSecundaria.Value - fallos_2) * ... nchoosek(combinacinSecundaria.Value - aciertosSecundaria.Value, fallos_2); resutls(row, 4) = 100 * resutls(row, 3) / combinaciones; end end numeroCombinaciones.Value = combinaciones; resultsTable.ColumnName = {'Aciertos 1', 'Aciertos 2', 'Combinaciones', 'Probabilidad (%)'}; resultsTable.Data = resutls; end end
La cual una vez lanzada tiene la siguiente forma:
Al pulsar el botón calcular se pueden obtener los resultados para el juego.
Conclusiones
En esta entrada se ha creado una calculadora de probabilidades de ganar a la lotería en Matlab. Así podemos comprobar lo poco probable que es ganar a uno de estos juegos. Y lo fácil que es no acertar ningún número, aunque intuitivamente pueda parecer lo contrario.
Publicidad
Publicidad