martes, 16 de junio de 2026

Matrices cuadradas aleatorias con determinante 1 o -1

Objetivo: generar una matriz cuadrada de números enteros aleatorios cuyo determinante sea 1 o -1.

Una primera idea puede ser realizar un bucle en el que generamos una matriz cuadrada de números enteros aleatorios hasta que se satisfaga la condición de que su determinante sea 1 o -1. El problema estaría resuelto, pero el algoritmo no es muy eficiente.

Voy a proponer a continuación otra solución. 

Problema previo: generar una matriz triangular de números enteros aleatorios cuyo determinante sea 1 o -1.

Este problema es muy sencillo teniendo en cuenta que el determinante de una matriz triangular es igual al producto de los elementos de su diagonal.

Únicamente necesitamos rellenar la diagonal con elementos del conjunto {-1, 1}, ceros por encima (o por debajo) de la diagonal y números enteros aleatorios en el resto de elementos de la matriz. 

Ejemplo de función en Python que calcula una matriz triangular de enteros aleatorios (entre -10 y 10, ambos incluidos) utilizando la librería NumPy.

import numpy as np
# Función para crear una matriz triangular de enteros con determinante 1 o -1
# n es la dimensión de la matriz
def matriz_det1(n):
    # Se crea una matriz M_azar con todos sus elementos aleatorios
    M_azar = np.random.randint(-10, 11, size=(n, n))
    # Se elige al azar si se construye una matriz triangular superior o inferior
    if np.random.randint(2):
        # Triangular superior: se cogen los elementos de M_azar por encima de la diagonal
        # con el resto de elementos iguales a 0 y se le suma una matriz diagonal con elementos 1 y -1
        MU = np.triu(M_azar, k=1) + np.diag(np.random.choice([-1, 1], size=n))
    else:
        # Triangular inferior: se cogen los elementos de M_azar por debajo de la diagonal
        # con el resto de elementos iguales a 0 y se le suma una matriz diagonal con elementos 1 y -1
        MU = np.tril(M_azar, k=-1)+ np.diag(np.random.choice([-1, 1], size=n))
    return MU
 

Ejemplo de matriz (10x10) creada con dicho algoritmo:

 

Teniendo resuelto el problema previo, ahora podemos abordar el problema original. Las matrices resultantes del algoritmo anterior tienen el "inconveniente" de no ser lo suficientemente aleatorias, dado que son triangulares y tienen demasiados elementos 0 no aleatorios.

Sin embargo, sabemos que: 

- El determinante del producto de matrices es igual al producto de los determinates (|A·B|=|A|·|B|). Por tanto, si multiplicamos matrices cuyo determinante es 1 o -1 el resultado será una matriz cuyo determinante es 1 o -1.

- El producto de matrices triangulares no tiene porqué ser una matriz triangular.

Utilizando esto, podemos idear un algoritmo para el objetivo principal que consista en crear varias matrices triangulares resultantes del algoritmo anterior y multiplicarlas:

# Función para crear una matriz con determinante 1 o -1
# mediante la multiplicación de matrices triangulares
# n es la dimensión de la matriz y m el número de iteraciones
def genU(n, m):
    # Comenzamos con la matriz identidad
    U = np.eye(n, dtype=int)
    # Creamos "m" matrices triangulares con determinante 1 o -1 y las multiplicamos
    for k in range(m):
        U = U @ matriz_det1(n)
    return U

 Ejemplo de matriz creada con dicho algoritmo (n=5, m=10):

 

 

 


miércoles, 6 de mayo de 2026

Recomendaciones sobre el buen NO uso de los dispositivos en el aula

Todos los docentes tenemos claro que los recursos no son buenos ni malos por sí mismos, sino que es el uso que hacemos de ellos lo que determina su idoneidad.

Abusar de cualquier recurso normalmente implica consecuencias negativas en el aprendizaje, del mismo modo que no utilizar un recurso que aporta valor añadido supone una oportunidad perdida de enriquecer los procesos de enseñanza-aprendizaje.

Por ello, me ha parecido interesante compartir las siguientes recomendaciones sobre cuándo NO utilizar los dispositivos en el aula:

1. ¿El alumnado debe escuchar (explicaciones, debates, etc.)? Si la respuesta es afirmativa, el dispositivo debe estar cerrado.

2. ¿El alumnado debe trabajar de manera individual a su ritmo? Si la respuesta es que todos deben realizar la misma actividad al mismo tiempo, se puede proyectar la actividad en la pizarra y no necesitan emplear sus dispositivos.

3. ¿Supone alguna mejora el hecho de realizarla en el dispositivo (por ejemplo, se autocorrige y da retroalimentación al alumnado, se muestra una visualización o interacción útil para la realización de la actividad, etc.)? Si la respuesta es que es lo mismo hacer la actividad en la pantalla que en papel, no necesitan emplear sus dispositivos. Se proyecta la actividad en la pizarra y trabajan en papel.

Y como creo que en este caso sí aporta valor añadido utilizar la IA para crear una imagen que sintetice la información de una manera más visual, adjunta la tenéis (en castellano y en català).




PD: Cuando se decida emplear los dispositivos, siempre debe hacerse bajo nuestra supervisión. Todo esto forma parte de nuestra competencia digital docente.

domingo, 12 de abril de 2026

Karaoke con Ultrastar Deluxe - Cómo instalarlo en Fedora

Desde hace años utilizo como programa de Karaoke para ratos de ocio el programa UltraStar Deluxe, que puede instalarse en Linux, Windows y MAC.

Imagen generada con IA

Después de probar diferentes métodos de instalación en Fedora y tener que resolver varios problemas con los micrófonos, me quedo con el siguiente método (funcionando a 12/04/26):

    flatpak install flathub eu.usdx.UltraStarDeluxe

El tema está en que no deseo tener las canciones dentro de la instalación local, sino que las tengo en un disco duro externo que puedo utilizar en diferentes dispositivos. Para ello debemos editar el archivo de configuración. 

    nano .var/app/eu.usdx.UltraStarDeluxe/.ultrastardx/config.ini

Buscamos la sección denominada [Directories] y modificamos:

    SongDir=/ruta-a-carpeta-canciones/

Escribimos la ruta a la carpeta donde tengamos todas las canciones.

Como flatpak no tendrá permisos para acceder a dicha carpeta utilizamos el siguiente comando para dárselo:

    sudo flatpak override eu.usdx.UltraStarDeluxe --filesystem=/ruta-a-carpeta-canciones/ 

Y ya podemos divertirnos todo lo que queramos destrozando los oídos a nuestros vecinos. 

Si todavía no conocéis la Comunidad UltraStar España os recomiendo que paséis por allí para ver y descargar vuestras canciones favoritas.

PD: En dicha página está la versión Ultrastar WorldParty. Se desaconseja totalmente su instalación porque se dejó de actualizar hace ya 5 años.