# Resolución de Sistemas de Ecuaciones.

rowmul(x,i,r):=rowop(x,i,i,1-r);

## 1.- Resuelve los siguientes sistemas de ecuaciones:


    x - 2y +  z = 7
a) 2x - 5y + 2z = 6
   3x + 2y -  z = 1


    x +  y -  z = 6
b) 2x +  y - 3z = 1
   3x + 2y - 4z = 8


     5x + y      -  t = 5
c)   2x + y - 2z +  t = 1
     3x     + 2z - 2t = 4


   x -  y +  z -  u +  v = 0
d) x +  y + 2z + 2u -  v = 0
  -x + 5y +  z + 7u - 5v = 0


      2x1 + 2x2 -  x3       + x5 =  2
e)   - x1 -  x2 + 2x3 - 3x4 + x5 =  1
       x1 +  x2 - 2x3       - x5 = -1


               6x3 +  2x4 -  4x5 - 8x6 = 8
               3x3 +   x4 -  2x5 - 4x6 = 4
f) 2x1 - 3x2 +  x3 +  4x4 -  7x5 +  x6 = 2
   6x1 - 9x2       + 11x4 - 19x5 + 3x6 = 0

## En todos los casos haremos lo mismo, escribiremos la matriz
ampliada del sistema, encontraremos su forma escalonada reducida
y escribiremos el sistema, equivalente al primero, donde habremos
dejado las incógnitas principales (dependientes) en el lado
izquierdo de las ecuaciones y las incógnitas libres (independientes)
en el lado derecho de las ecuaciones. Por último, a las variables
libres se las renombrará con los nombres de los parámetros que 
queramos utilizar.

Para terminar, construiremos una función adecuada que nos permita 
comprobar que las soluciones encontradas, efectivamente, lo son.  

## Resuelve el siguiente sistema:

    x - 2y +  z = 7
a) 2x - 5y + 2z = 6
   3x + 2y -  z = 1


Llamemos AB a la matriz ampliada del sistema.

                  1 -2  1  7
Es decir,    AB = 2 -5  2  6
                  3  2 -1  1

AB:matrix([1,-2,1,7],[2,-5,2,6],[3,2,-1,1]);

Ahora, calculamos la forma escalonada reducida de la matriz AB.

rowop(AB,2,1,2);
rowop(%,3,1,3);

rowmul(%,2,-1);

rowop(%,3,2,8);

rowmul(%,3,-1/4);

rowop(%,1,3,1);

rowop(%,1,2,-2);

AB_R:%;

La matriz ampliada AB ya la hemos reducido a su forma escalonada reducida, y puesto que

en esta última, es decir, en la matriz escalonada reducida, la última columna (la de los 

términos del lado derecho de las ecuaciones), NO ES COLUMNA PIVOTE, podemos afirmar que

el SISTEMA ES COMPATIBLE (es decir, tiene solución/es).

Por otro lado, a la vista de esta última matriz, a la que he llamado  AB_R, podemos afirmar

que el sistema
               x - 2y +  z = 7
           a) 2x - 5y + 2z = 6
              3x + 2y -  z = 1


es equivalente al sistema

                    x       =  2
                       y    =  8
                          z = 21

Como en el sistema simplificado todas las variables son principales, es decir, no hay 

variables libres en el lado derecho, podemos afirmar que el SISTEMA COMPATIBLE es 

DETERMINADO, es decir, tiene solución única, la que aparece arriba:

                                x =  2
                                y =  8
                                z = 21

Ahora, para comprobar que efectivamente la solución encontrada lo es, definimos la siguiente 

función:

            f(x,y,z):=[x-2*y+z,2*x-5*y+2*z,3*x+2*y-z]

Evidentemente, la terna (x=2,y=8,z=21) será solución del sistema <---> f(2,8,21) = (7,6,1)

Veamos pues:

f(x,y,z):=[x-2*y+z,2*x-5*y+2*z,3*x+2*y-z];

f(2,8,21);

Luego hemos encontrado la solución del sistema.

## En Maxima exixten tres instrucciones (comandos) relacionados con
sistemas de ecuaciones lineales,

linsolve([ec1,...,ec4],[var1,...var7])  resuelve un sistema de
                                        4 ecuaciones y 7 incóg-
                                        nitas.

coefmatrix([ec1,...,ec4],[var1,...var7]) obtiene la matriz de 
                                         coeficientes de un sis-
                                         tema de 4 ecuaciones y
                                         7 incógnitas.

augcoefmatrix([ec1,...,ec4],[var1,...var7]) obtiene la matriz
                                          ampliada de un sistema
                                          de 4 ecuaciones y 7
                                          incógnitas. 

NOTA: Cuando utilicemos el comando "augcoefmatrix" para obtener
la matriz ampliada de un sistema, la última columna de dicha
matriz es la de los términos del lado derecho de las ecuaciones,
pero los escribe a todos ellos cambiados de signo. Es decir, es
como si en cada ecuación pasase los términos del lado derecho a
la izquierda de su respectiva ecuación.

Es decir, para el sistema de antes,

                     x - 2y +  z = 7
                 a) 2x - 5y + 2z = 6
                    3x + 2y -  z = 1

el comando "augcoefmatrix", aplicado a dicho sistema, que sería,
  
augcoefmatrix([x-2*y+z=7,2*x-5*y+2*z=6,3*x+2*y-z=1],[x,y,z]);

devuelve la matriz,
                          1 -2  1 -7
                          2 -5  2 -6
                          3  2 -1 -1

que es como si las ecuaciones las hubiera escrito como,

                       x - 2y +  z - 7 = 0
                   a) 2x - 5y + 2z - 6 = 0
                      3x + 2y -  z - 1 = 0



OJO: EL COMANDO "linsolve" SE UTILIZA PARA RESOLVER ECUACIONES
LINEALES. SI LAS ECUACIONES NO SON LINEALES SE UTILIZA OTRA 
INSTRUCCIÓN: "solve".

## Resolvamos el sistema anterior utilizando la instrucción
                "linsolve"

linsolve([x-2*y+z=7,2*x-5*y+2*z=6,3*x+2*y-z=1],[x,y,z]);

También podríamos haber hecho,

ec1:x-2*y+z=7;
ec2:2*x-5*y+2*z=6;
ec3:3*x+2*y-z=1;

de esa forma habríamos definido tres variables, ec1, ec2 y ec3, cada una de las cuales
contendría las ecuaciones primera, segunda y tercera, respectivamente, del sistema.

Después habríamos escrito,

linsolve([ec1,ec2,ec3],[x,y,z]);

para resolver el sistema.

veámoslo,

ec1:x-2*y+z=7;
ec2:2*x-5*y+2*z=6;
ec3:3*x+2*y-z=1;

linsolve([ec1,ec2,ec3],[x,y,z]);

## Hagamos ahora uso de los comandos "coefmatrix" y "augcoefmatrix"
para ver como actúan.

coefmatrix([x-2*y+z=7,2*x-5*y+2*z=6,3*x+2*y-z=1],[x,y,z]);
augcoefmatrix([x-2*y+z=7,2*x-5*y+2*z=6,3*x+2*y-z=1],[x,y,z]);

## o también,

coefmatrix([ec1,ec2,ec3],[x,y,z]);
augcoefmatrix([ec1,ec2,ec3],[x,y,z]);

## Resuelve el siguiente sistema:

    x +  y -  z = 6
b) 2x +  y - 3z = 1
   3x + 2y - 4z = 8

Llamemos AB a la matriz ampliada del sistema.

                  1  1 -1  6
Es decir,    AB = 2  1 -3  1
                  3  2 -4  8

AB:matrix([1,1,-1,6],[2,1,-3,1],[3,2,-4,8]);

Ahora, calculamos la forma escalonada reducida de la matriz AB.

rowop(AB,2,1,2);
rowop(%,3,1,3);

rowmul(%,2,-1);

rowop(%,3,2,-1);

## La matriz de arriba es una forma escalonada de la matriz AB y,
como podemos ver, la última columna, la de los términos inde-
pendientes de las ecuaciones, ha quedado como una columna pivo-
te. De manera que podemos asegurar que el sistema b) es
INCOMPATIBLE (es decir, no tiene soluciones).

El motivo es muy sencillo de entender, las mismas operaciones 
elementales que hemos hecho sobre la matriz ampliada AB para ob-
tener la matriz escalonada, pero hechas sobre el sistema de 
ecuaciones,
             x +  y -  z = 6
         b) 2x +  y - 3z = 1
            3x + 2y - 4z = 8

llevarían a éste hasta el siguiente sistema equivalente,

             x + y - z =  6
                 y + z = 11
                     0 =  1  ( <--->  0x +0y +0z = 1)

que como podemos ver es INCOMPATIBLE, pues para cualesquiera
valores que les demos a las incógnitas x, y, z, el valor de
0x +0y +0z siempre será 0 que es distinto de 1.

## Veamos ahora que pasa si le pido a Maxima que resuelva el
sistema B) mediante la instrucción "linsolve". 

kill(ec1,ec2,ec3);

ec1:x+y-z=6;
ec2:2*x+y-3*z=1;
ec3:3*x+2*y-4*z=8;

linsolve([ec1,ec2,ec3],[x,y,z]);

## Como podemos ver en la salida de arriba aparece una lista vacía
lo que indica que el sistema no tiene soluciones.

## Resuelve el siguiente sistema:

     5x + y      -  t = 5
c)   2x + y - 2z +  t = 1
     3x     + 2z - 2t = 4

Llamemos AB, como siempre, a la matriz ampliada del sistema.

                  5  1  0 -1  5
Es decir,    AB = 2  1 -2  1  1
                  3  0  2 -2  4

AB:matrix([5,1,0,-1,5],[2,1,-2,1,1],[3,0,2,-2,4]);

Ahora, calculamos la forma escalonada reducida de la matriz AB.

rowmul(AB,1,1/5);

rowop(%,2,1,2);
rowop(%,3,1,3);

rowmul(%,2,5/3);

rowop(%,3,2,-3/5);

La matriz de arriba ya está en forma escalonada y como la útima columna, la de los

términos independientes, no es columna pivote, ya podemos asegurar que el sistema

es COMPATIBLE.

Ahora continuamos, empezando por el último pivote y regresando hacia atrás hasta encontrar

la forma escalonada reducida (ÚNICA).

rowop(%,1,2,1/5);

## Una vez encontrada la forma escalonada reducida de la matriz AB

escribimos el sistema reducido equivalente al sistema original,

Es decir, el sistema,

              5x + y      -  t = 5
         c)   2x + y - 2z +  t = 1
              3x     + 2z - 2t = 4

es equivalente al nuevo sistema simplificado,

               x     +  2/3 z - 2/3 t =  4/3
                   y - 10/3 z + 7/3 t = -5/3

Ahora, dejamos las incógnitas principales (las de los pivotes) en
el lado izquierdo y pasamos las incógnitas libres al lado derecho.

              x     =  4/3 -  2/3 z + 2/3 t
                 y  = -5/3 + 10/3 z - 7/3 t

Como podemos ver, las variables principales (variables dependien-
tes) ya están despejadas en función de las variables libres (va-
riables independientes).

Ya sólo nos falta renombrar a las variables libres con los nom-
bres de los parámetros que queramos utilizar. Por ejemplo, si
llamamos "m" a la variable z y "n" a la variable t, resulta que
las soluciones del sistema son:

            x =  4/3 -  2/3 m + 2/3 n
            y = -5/3 + 10/3 m - 7/3 n
            z =  m
            t =  n

 donde m, n son números reales cualesquiera.


De manera que el sistema es COMPATIBLE INDETERMINADO (es decir,
tiene infinitas soluciones).

Ahora voy a comprobar que he resuelto bien el sistema. Para ello, dado el sistema:

              5x + y      -  t = 5
         c)   2x + y - 2z +  t = 1
              3x     + 2z - 2t = 4

definimos la función f(x,y,z,t):=[5*x+y-t,2*x+y-2*z+t,3*x+2*z-2*t]. Entonces, tal y como
hemos definido la función f sucederá que dada una lista ordenada de números (s1,s2,s3,s4),
esta lista será una solución del sistema si, y sólo si, f(s1,s2,s3,s4)=(5,1,4). 

Procedamos pues a la comprobación.

f(x,y,z,t):=[5*x+y-t,2*x+y-2*z+t,3*x+2*z-2*t];

f(4/3-2/3*m+2/3*n,-5/3+10/3*m-7/3*n,m,n);

ratsimp(%);

Luego hemos resuelto bien el sistema.

## Veamos como lo habría resuelto Maxima utilizando la instrucción
"linsolve"

linsolve([5*x+y-t=5,2*x+y-2*z+t=1,3*x+2*z-2*t=4],[x,y,z,t]);

expand(%);

## Resuelve el siguiente sistema:

   x -  y +  z -  u +  v = 0
d) x +  y + 2z + 2u -  v = 0
  -x + 5y +  z + 7u - 5v = 0


Como el sistema es homogeneo es compatible, pues un sistema
homogeneo siempre tiene a la solución trivial como solución.

Ahora se trata de ver si es la única solución o si, por el 
contrario, tiene más soluciones.


En este caso podemos trabajar con la matriz de los coeficientes
del sistema, ya que la ampliada es dicha matriz a la que se le 
habría añadido una última columna llena de ceros, por lo que
las operaciones elementales por filas realizadas en dicha 
matriz ampliada, no cambiaría en nada la última columna de ceros


Llamemos A a la matriz de coeficientes del sistema.

                  1 -1  1 -1  1  
Es decir,     A = 1  1  2  2 -1
                 -1  5  1  7 -5

A:coefmatrix([x-y+z-u+v=0,x+y+2*z+2*u-v=0,-x+5*y+z+7*u-5*v=0],[x,y,z,u,v]);

Ahora calculamos la forma escalonada reducida de la matriz A.

rowop(A,2,1,1);
rowop(%,3,1,-1);

rowop(%,3,2,2);

rowmul(%,2,1/2);

rowop(%,1,2,-1);

A_ER:%;

He llamado A_ER a la matriz escalonada reducida por filas que hemos encontrado a partir
de la matriz A (de coeficientes del sistema).

## Una vez encontrada la forma escalonada reducida de la matriz A,
a la que he llamado A_ER, escribimos el sistema reducido 
equivalente al sistema original,

Es decir, el sistema,

            x -  y +  z -  u +  v = 0
    d)      x +  y + 2z + 2u -  v = 0
           -x + 5y +  z + 7u - 5v = 0

es equivalente al nuevo sistema simplificado,

    x    + 3/2 z + 1/2 u     = 0
       y + 1/2 z + 3/2 u - v = 0 

               
Ahora, dejamos las incógnitas principales (las de los pivotes) en
el lado izquierdo y pasamos las incógnitas libres al lado derecho.

    x     = - 3/2 z - 1/2 u
       y  = - 1/2 z - 3/2 u + v

Como podemos ver, las variables principales (variables dependien-
tes) ya están despejadas en función de las variables libres (va-
riables independientes).

Ya sólo nos falta renombrar a las variables libres con los nombres
de los parámetros que queramos utilizar. Por ejemplo, si llamamos
"m" a la variable z, "n" a la variable u y "r" a la variable v,
resulta que las soluciones del sistema son:

   x = - 3/2 m - 1/2 n
   y = - 1/2 m - 3/2 n + r
   z =  m
   u =  n
   v =  r

 donde m, n y r son números reales cualesquiera.


De manera que el sistema es COMPATIBLE INDETERMINADO (es decir,
tiene infinitas soluciones).

Ahora voy a comprobar que he resuelto bien el sistema. Para ello, dado el sistema:

            x -  y +  z -  u +  v = 0
    d)      x +  y + 2z + 2u -  v = 0
           -x + 5y +  z + 7u - 5v = 0

definimos la función f(x,y,z,u,v):=[x-y+z-u+v,x+y+2*z+2*u-v,-x+5*y+z+7*u-5*v]. Entonces, tal y
como hemos definido la función f sucederá que dada una lista ordenada de números:
                         (s1,s2,s3,s4,s5)
esta lista será una solución del sistema si, y sólo si, f(s1,s2,s3,s4,s5)=(0,0,0). 

Procedamos pues a la comprobación.

f(x,y,z,u,v):=[x-y+z-u+v,x+y+2*z+2*u-v,-x+5*y+z+7*u-5*v];

f(-3/2*m -1/2*n,-1/2*m -3/2*n+r,m,n,r);

ratsimp(%);

Luego hemos resuelto bien el sistema.

## Veamos como lo habría resuelto Maxima utilizando la instrucción
"linsolve"

linsolve([x-y+z-u+v=0,x+y+2*z+2*u-v=0,-x+5*y+z+7*u-5*v=0],[x,y,z,u,v]);

expand(%);

## Resuelve el siguiente sistema de ecuaciones:

       2x1 + 2x2 -  x3       + x5 =  2
e)    - x1 -  x2 + 2x3 - 3x4 + x5 =  1
        x1 +  x2 - 2x3       - x5 = -1

Introduciomos la matriz ampliada del sistema a la que voy a llamar AB

AB: matrix([2,2,-1,0,1,2],[-1,-1,2,-3,1,1],[1,1,-2,0,-1,-1]);

Ahora calculo la forma escalonada reducida de la matriz AB:

rowswap(AB,1,3);

rowop(%,2,1,-1);rowop(%,3,1,2);

rowswap(%,2,3);

rowmul(%,3,-1/3);

rowmul(%,2,1/3);

rowop(%,1,2,-2);

A la vista de la última matriz, que es la forma escalonada reducida por filas de la matriz ampliada del sistema
vemos que las soluciones son:

x1 = 5/3 - m - n                        x1 = 5/3 - m - n
x3 = 4/3     - n                        x2 = m
x4 = 0                      es decir,   x3 = 4/3     - n
x2 = m                                  x4 = 0
x5 = n                                  x5 = n

            donde m y n son números reales cualesquiera.

Ahora voy a comprobar que he resuelto bien el sistema. Para ello, dado el sistema:

                                2x1 + 2x2 -  x3       + x5 =  2
                               - x1 -  x2 + 2x3 - 3x4 + x5 =  1
                                 x1 +  x2 - 2x3       - x5 = -1

definimos la función f(x,y,z,t,u)=(2x+2y-z+u,-x-y+2z-3t+u,x+y-2z-u). Entonces, tal y como hemos
definido la función f sucederá que dada una lista ordenada de números (s1,s2,s3,s4,s5), esta lista
será una solución del sistema si, y sólo si, f(s1,s2,s3,s4,s5)=(2,1,-1). 

Procedamos pues a la comprobación.

f(x,y,z,t,u):=[2*x+2*y-z+u,-x-y+2*z-3*t+u,x+y-2*z-u];

f(5/3-m-n,m,4/3-n,0,n);

ratsimp(%);

Luego hemos resuelto bien el sistema.

## Por últmo, si queremos, también podemos resolver el sistema mediante
la orden "linsolve".

linsolve([2*x1+2*x2-x3+x5=2,-x1-x2+2*x3-3*x4+x5=1,x1+x2-2*x3-x5=-1],[x1,x2,x3,x4,x5]);

expand(%);

## ¿SON LAS MISMAS SOLUCIONES LAS ENCONTRADAS POR MAXIMA Y POR 
NOSOTROS? 

## Resuelve el siguiente sistema,

               6x3 +  2x4 -  4x5 - 8x6 = 8
               3x3 +   x4 -  2x5 - 4x6 = 4
f) 2x1 - 3x2 +  x3 +  4x4 -  7x5 +  x6 = 2
   6x1 - 9x2       + 11x4 - 19x5 + 3x6 = 0


Llamemos AB, como siempre, a la matriz ampliada del sistema.

                  0  0  6  2  -4 -8  8
Es decir,         0  0  3  1  -2 -4  4
             AB = 2 -3  1  4  -7  1  2
                  6 -9  0 11 -19  3  0 

AB:matrix([0,0,6,2,-4,-8,8],[0,0,3,1,-2,-4,4],[2,-3,1,4,-7,1,2],[6,-9,0,11,-19,3,0]);

Ahora, calculamos la forma escalonada reducida de la matriz AB.

rowswap(AB,1,3);

rowop(%,4,1,3);

rowop(%,3,2,2);
rowop(%,4,2,-1);

rowswap(%,3,4);

Como podemos ver arriba, ya hemos encontrado una matriz en forma escalonada por filas

equivalente a la matriz AB.


Ahora continuamos el algoritmo (fase regresiva) hasta encontrar la matriz 

en forma escalonada reducida equivalente a AB.

/*aquí voy a poner los tres pivotes a uno*/
rowmul(%,3,-1/4); rowmul(%,2,1/3); rowmul(%,1,1/2);

rowop(%,2,3,-4/3);
rowop(%,1,3,1/2);

rowop(%,1,2,1/2);

Como podemos ver arriba, ya hemos encontrado la forma escalonada reducida

equivalente a la matriz AB.

Una vez encontrada la forma escalonada reducida de la matriz AB

escribimos el sistema reducido equivalente al sistema original,

Es decir, el sistema,

               6x3 +  2x4 -  4x5 - 8x6 = 8
               3x3 +   x4 -  2x5 - 4x6 = 4
f) 2x1 - 3x2 +  x3 +  4x4 -  7x5 +  x6 = 2
   6x1 - 9x2       + 11x4 - 19x5 + 3x6 = 0

es equivalente al nuevo sistema simplificado, donde ya hemos dejado las
incógnitas principales (las de los pivotes) en el lado izquierdo y hemos
pasado las incógnitas libres al lado derecho.


     x1 = -1/4 + 3/2 x2 - 11/6 x4 + 19/6 x5     
     x3 =   2           -  1/3 x4 +  2/3 x5      
     x6 =  1/2

 
Como podemos ver, las variables principales (variables dependien-
tes) ya están despejadas en función de las variables libres (va-
riables independientes).

Ya sólo nos falta renombrar a las variables libres con los nom-
bres de los parámetros que queramos utilizar. Por ejemplo, si
llamamos "m" a la variable x2, "n" a la variable x4 y "r" a la 
variable x5, resulta que las soluciones del sistema son:

            x1 = -1/4 + 3/2 m - 11/6 n + 19/6 r
            x2 =  m
            x3 =   2           -  1/3 n +  2/3 r
            x4 =  n
            x5 =  r
            x6 = 1/2

 donde m, n, r son números reales cualesquiera.


De manera que el sistema es COMPATIBLE INDETERMINADO (es decir,
tiene infinitas soluciones).

Ahora voy a comprobar que he resuelto bien el sistema. Para ello, dado el sistema:

               6x3 +  2x4 -  4x5 - 8x6 = 8
               3x3 +   x4 -  2x5 - 4x6 = 4
   2x1 - 3x2 +  x3 +  4x4 -  7x5 +  x6 = 2
   6x1 - 9x2       + 11x4 - 19x5 + 3x6 = 0

definimos la función,
f(x1,x2,x3,x4,x5,x6):=[6*x3+2*x4-4*x5-8*x6,3*x3+x4-2*x5-4*x6,
2*x1-3*x2+x3+4*x4-7*x5+x6,6*x1-9*x2+11*x4-19*x5+3*x6].
 
Entonces, tal y como hemos definido la función f sucederá que dada una lista ordenada de
números (s1,s2,s3,s4,s5,s6), esta lista será una solución del sistema si, y sólo si, 
f(s1,s2,s3,s4,s5)=(8,4,2,0). 

Procedamos pues a la comprobación.

f(x1,x2,x3,x4,x5,x6):=[6*x3+2*x4-4*x5-8*x6,3*x3+x4-2*x5-4*x6,
2*x1-3*x2+x3+4*x4-7*x5+x6,6*x1-9*x2+11*x4-19*x5+3*x6];

f(-1/4+3/2*m-11/6*n+19/6*r,m,2-1/3*n+2/3*r,n,r,1/2);

ratsimp(%);

Luego hemos resuelto bien el sistema.

## Por últmo, si queremos, también podemos resolver el sistema mediante
la orden "linsolve".

linsolve([6*x3+2*x4-4*x5-8*x6=8,3*x3+x4-2*x5-4*x6=4,
2*x1-3*x2+x3+4*x4-7*x5+x6=2,6*x1-9*x2+11*x4-19*x5+3*x6=0],[x1,x2,x3,x4,x5,x6]);

expand(%);

## ¿SON LAS MISMAS SOLUCIONES LAS ENCONTRADAS POR MAXIMA Y POR 
NOSOTROS? 