Método de Gauss en la resolución de sistemas de ecuaciones

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:

\(\left\{ \begin{aligned}x_{1}+2x_{2}-x_{3}+3x_{4} & = & -8\\ 2x_{1}+2x_{3}-x_{4} & = & 13\\ -x_{1}+x_{2}+x_{3}-x_{4} & = & 8\\ 3x_{1}+3x_{2}-x_{3}+2x_{4} & = & -1 \end{aligned} \right.\)

En la plantilla podemos modificar qué queremos que se haga en el problema:

  1. 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.

  2. Con matrices aleatorias

    scd1

    \(\rightarrow\) sistema compatible y determinado con soluciones enteras (el determinante se obliga a que sea 1)

    scd2

    \(\rightarrow\) sistema compatible y determinado con soluciones de cualquier tipo (pueden aparecer fracciones)

    sci

    \(\rightarrow\) sistema compatible e indeterminado

    si

    \(\rightarrow\) 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:

\begin{align*} \begin{aligned} \left(\begin{matrix}1 & 2 & -1 & 3 & -8\\ 2 & 0 & 2 & -1 & 13\\ -1 & 1 & 1 & -1 & 8\\ 3 & 3 & -1 & 2 & -1 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & -2F_{1}+F_{2}\\ F_{3} & \leftrightarrows & F_{1}+F_{3}\\ F_{4} & \leftrightarrows & -3F_{1}+F_{4} \end{Bmatrix} & \longmapsto\\ \left(\begin{matrix}1 & 2 & -1 & 3 & -8\\ 0 & -4 & 4 & -7 & 29\\ 0 & 3 & 0 & 2 & 0\\ 0 & -3 & 2 & -7 & 23 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & F_{3}\\ F_{3} & \leftrightarrows & F_{2}\\ F_{4} & \leftrightarrows & F_{4} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}1 & 2 & -1 & 3 & -8\\ 0 & 3 & 0 & 2 & 0\\ 0 & -4 & 4 & -7 & 29\\ 0 & -3 & 2 & -7 & 23 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & F_{2}+F_{3}\\ F_{3} & \leftrightarrows & F_{3}\\ F_{4} & \leftrightarrows & F_{4} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}1 & 2 & -1 & 3 & -8\\ 0 & -1 & 4 & -5 & 29\\ 0 & -4 & 4 & -7 & 29\\ 0 & -3 & 2 & -7 & 23 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & F_{2}\\ F_{3} & \leftrightarrows & -4F_{2}+F_{3}\\ F_{4} & \leftrightarrows & -3F_{2}+F_{4} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}1 & 2 & -1 & 3 & -8\\ 0 & -1 & 4 & -5 & 29\\ 0 & 0 & -12 & 13 & -87\\ 0 & 0 & -10 & 8 & -64 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & F_{2}\\ F_{3} & \leftrightarrows & F_{3}\\ F_{4} & \leftrightarrows & \frac{F_{4}}{2} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}1 & 2 & -1 & 3 & -8\\ 0 & -1 & 4 & -5 & 29\\ 0 & 0 & -12 & 13 & -87\\ 0 & 0 & -5 & 4 & -32 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & F_{2}\\ F_{3} & \leftrightarrows & F_{4}\\ F_{4} & \leftrightarrows & F_{3} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}1 & 2 & -1 & 3 & -8\\ 0 & -1 & 4 & -5 & 29\\ 0 & 0 & -5 & 4 & -32\\ 0 & 0 & -12 & 13 & -87 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & F_{2}\\ F_{3} & \leftrightarrows & 5F_{3}-2F_{4}\\ F_{4} & \leftrightarrows & F_{4} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}1 & 2 & -1 & 3 & -8\\ 0 & -1 & 4 & -5 & 29\\ 0 & 0 & -1 & -6 & 14\\ 0 & 0 & -12 & 13 & -87 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & F_{2}\\ F_{3} & \leftrightarrows & F_{3}\\ F_{4} & \leftrightarrows & -12F_{3}+F_{4} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}1 & 2 & -1 & 3 & -8\\ 0 & -1 & 4 & -5 & 29\\ 0 & 0 & -1 & -6 & 14\\ 0 & 0 & 0 & 85 & -255 \end{matrix}\right)\begin{Bmatrix}F_{1} & \leftrightarrows & F_{1}\\ F_{2} & \leftrightarrows & F_{2}\\ F_{3} & \leftrightarrows & F_{3}\\ F_{4} & \leftrightarrows & \frac{F_{4}}{85} \end{Bmatrix}\longmapsto\\ \left(\begin{matrix}1 & 2 & -1 & 3 & -8\\ 0 & -1 & 4 & -5 & 29\\ 0 & 0 & -1 & -6 & 14\\ 0 & 0 & 0 & 1 & -3 \end{matrix}\right)\end{aligned} \end{align*}

Resolviendo el sistema escalonado

\(\left\{ \begin{aligned}x_{1}+2x_{2}-x_{3}+3x_{4} & = & -8\\ -x_{2}+4x_{3}-5x_{4} & = & 29\\ -x_{3}-6x_{4} & = & 14\\ x_{4} & = & -3 \end{aligned} \right.\)

se obtienen de soluciones:

\(\left\{ x_{1}:1,\ x_{2}:2,\ x_{3}:4,\ x_{4}:-3\right\}\)

Tipo de sistema:
\(\mathtt{\text{Sistema compatible y determinado}}\)