El ejercicio que se muestra en esta entrada es un ejercicio tipo de cómo
resolver y clasificar un sistema de ecuaciones usando sympy y LaTeX/LyX.
Permite definir los datos del sistema de forma manual o generados de
forma aleatoria. Solo funciona para matrices cuadradas. Al final de la
entrada hay enlaces para descargar el fichero fuente así como el pdf que
se obtendría con los datos de ejemplo con la opción de resolución manual.
En la web, así como con diferentes librerías de python, se puede
obtener de forma directa la solución de un sistema por Gauss. Por
ejemplo, usando numpy hay programas que también permiten obtenerla, pero
usando números decimales. Mi idea cuando comencé a resolver este tipo de
ejercicios es buscar la solución partiendo de dos premisas:
Intentando buscar siempre que fuese posible pivotes 1 (mediante una
función que implementa el Algoritmo de Euclides extendido)
Trabajar con fracciones lo mínimo posible.
Bajo esas premisas, yo al menos, no he encontrado ninguna solución en internet.
El código python no está escrito de forma muy elegante, pero por lo que
he comprobado funciona aceptablemente bien. Si detectáis algún error en
él os agradecería que me lo comentéis en el formulario de
contacto que hay en la
página web.
Tanto los sistemas que se construyen y muestran en el pdf final como la
solución obtenida, se generan de forma dinámica al compilar el fichero LyX/LaTeX.
Un posible enunciado del ejercicio a resolver es de la forma:
Resuelve y clasifica el sistema de ecuaciones por el método de Gauss:
En la plantilla podemos modificar qué queremos que se haga en el problema:
m
datos <<a mano>>, en ese caso se deben establecer los valores con
los que trabajar en el fichero. El enunciado anterior se ha
construido con los datos de partida del fichero que se ha subido a
la web.
Con matrices aleatorias
scd1
→ sistema compatible y determinado con
soluciones enteras (el determinante se obliga a que sea 1)
scd2
→ sistema compatible y determinado con
soluciones de cualquier tipo (pueden aparecer fracciones)
sci
→ sistema compatible e indeterminado
si
→ sistema incompatible
Las opciones anteriores se consiguen modificando la variable:
#Tipo de sistema que se va a resolver
tipo="m"
Cambiando el valor anterior de la variable tipo se pueden
obtener diferentes sistemas con su clasificación y posibles soluciones,
también los pasos realizados en su resolución usando el método de Gauss.
El código está preparado para resolver sistemas de cualquier orden,
aunque si se opta por matrices de orden mayor que 6 puede ser muy lento
o incluso no terminar su ejecución. Para establecer los valores con los
que trabajar, si se opta por matrices aleatorias, se pueden modificar
las variables:
#orden de la matriz para los tipos aleatorios
dim=4
#valores entre los que obtener los números de las matrices aleatorias
v1=-5
v2=5
En el caso de optar por introducir las matrices <<a mano>> debemos
modificarlas en:
if tipo=="m":
#Datos del sistema
# matriz de coeficientes
A=Matrix([[1,2,-1,3],[2,0,2,-1],[-1,1,1,-1],[3,3,-1,2]])
# matriz de términos independientes
B=Matrix([-8,13,8,-1])
Al compilar el fichero con la opción de matrices introducidas de forma
manual con los datos anteriores, se obtiene algo similar a:
Solución:
Escribamos la matriz ampliada, si podemos la simplificamos: