En esta ocasión, el fichero LyX que podéis descargar permite resolver
varios ejercicios de sistemas de ecuaciones modulares que cumplan las
condiciones del Teorema Chino del Resto. De igual forma que en el
artículo anterior, para realizar las divisiones de números enteros se
hace uso del paquete xlop de LaTeX, lo que provoca que existan
algunas limitaciones en los valores permitidos de los coeficientes
(deben ser números naturales).
El código python que contiene el fichero no es muy elegante pero por lo
que he comprobado funciona bien. Destacar que no permite resolver
sistemas de ecuaciones modulares que tienen solución pero en los que no
es directo emplear el Teorema Chino del Resto: si los módulos no son
coprimos entre sí, ni sistemas con ecuaciones redundantes o si las
ecuaciones se pueden simplificar.
Para algunos valores de entrada los cálculos realizados pueden ser redundantes.
Lo único que tendremos que adecuar se comenta en propio fichero y
consiste en:
# Datos a modificar del programa. Tienen que ser enteros positivos y sus valores
# están condicionados por lo permitido por el paquete xlop de LaTeX
# Datos
# Si por ejemplo nuestra congruencia es de la forma:
# a1*x = b1 (mód n1)
# a2*x = b2 (mód n2)
# la matriz de datos es de la forma
# Matrix([[a1,b1,n1],[a2,b2,n2]])
# Para que construya bien la lista de ejercicios el nombre de la variable que
# contiene los datos tiene que ser de la forma E+número de ejercicio,
# como por ejemplo el listado que sigue. En el pdf no se respeta el
# número que ponemos aquí
E1 = Matrix([[1,1,15],[1,1,16]])
E2 = Matrix([[118,18,169],[238,38,13*17]])
E3 = Matrix([[2,5,3],[3,2,7]])
E4 = Matrix([[168,24,220],[56,40,69]])
E5 = Matrix([[168,24,221],[56,40,69]])
E6 = Matrix([[1,5495,7643],[1,7569,8765]])
E7 = Matrix([[1,2,3],[1,3,5],[1,2,7]])
E8 = Matrix([[3,1,2],[1,1,3],[2,3,5]])
E9 = Matrix([[6,2,25],[5,2,7],[7,3,18]])
E10 = Matrix([[3*13,4,11*17],[2,27,135],[10,19,47*7]])
E11 = Matrix([[1,0,7],[1,1,3],[1,7,8],[1,19,23]])
E12 = Matrix([[1,2,3],[1,3,5],[1,6,8],[1,10,11]])
E13 = Matrix([[4,2,9],[5,3,7],[3,4,5],[7,5,22]])
E14 = Matrix([[5,6,11],[3,13,16],[2,9,21],[7,19,25],[4,9,13]])
# Número máximo de ejercicios.
# Si ponemos más de 15 tenemos que aumentar este valor para que se construya
# bien la lista de ejercicios. Si tenemos definidos 10 ejercicios y aquí ponemos
# 3, solo se resolveran los 3 primeros: E1, E2 y E3
maxejer = 15
# Si es True, al final aparece la solución directa con sympy
comprobar = True
#comprobar = False
# La lista de ejercicios que deseamos obtener se construye de forma automática
# a partir de los datos anteriores de la forma:
#ListaEjer = [E1, E2, ....]
ListaEjer = []
for i in range(maxejer):
ejer = 'E'+str(i+1)
if ejer in locals():
ListaEjer.append(locals()[ejer])
# Podemos definirla "a mano con"
# ListaEjer = [E1, E4, E6]
Es decir:
Podemos resolver a la vez tantos ejercicios como deseemos a partir
de una serie de matrices en las que almacenamos los datos de las congruencias.
Podemos optar por comprobar que los cálculos realizados son
correctos obteniendo el resultado de forma directa con sympy.
En el pdf que se puede descargar al final están resueltos los 14
ejercicios que se listan antes. En formato html solo pondré uno de
ellos, en concreto el número 10.