03. De sistemas de ecuaciones a matrices

El Formato Matricial

La expresión general:

$$y=a_1​x_1​+a_2​x_2​+⋯+a_n​x_n​$$

Es el punto de partida que lleva directamente a la forma matricial de los sistemas lineales. El mismo sistema de ecuaciones de las frutas puede escribirse y resolverse en forma matricial. En la ciencia de datos los datasets son matrices, y resolver sistemas lineales ayuda a encontrar relaciones entre variables.

Partimos del sistema:

$$\begin{cases} 2x + 3y = 30 \\ x + y = 12 \end{cases}$$

En formato matricial:

$$\begin{bmatrix} 2 & 3 \\ 1 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 30 \\ 12 \end{bmatrix}$$

Significado de las partes:

PartesSignificado
$$\begin{bmatrix} 2 & 3 \\ 1 & 1 \end{bmatrix}$$Matriz de coeficientes: contiene los números que multiplican a las variables (los precios de las frutas).
$$\begin{bmatrix} x \\ y \end{bmatrix}$$Vector de incógnitas: las variables que queremos encontrar (número de manzanas y naranjas).
$$\begin{bmatrix} 30 \\ 12 \end{bmatrix}$$Vector de resultados: los valores en el lado derecho (total de dinero y total de frutas).

La forma vectorial compacta del sistema matricial se expresa como:

$$A\vec{x} = \vec{b}$$

Donde:

  • \(A\) –> es la matriz de coeficientes
  • \(\vec{x}\) –> es el vector de incógnitas
  • \(\vec{b}\) –> es el vector de términos independientes

Por tanto:

$$A = \begin {bmatrix} 2 & 3 \\ 1 & 1 \end{bmatrix}, \vec{x} = \begin{bmatrix} x \\ y \end{bmatrix}, \vec{b} = \begin{bmatrix} 30 \\ 12 \end{bmatrix}$$

En ciencia de datos y machine learning esta forma es fundamental porque:

  • Permite expresar relaciones entre miles de variables en una sola ecuación.
  • Es la base de la regresión lineal, la reducción de dimensionalidad, y el entrenamiento de modelos.
  • Toda la manipulación se hace con álgebra matricial, que es más eficiente computacionalmente.

Resolviendo problemas reales.

En artículos anteriores vimos operaciones sobre vectores y matrices desde la perspectiva matemática. Vamos a ver cómo esas mismas operaciones pueden resolver problemas reales, como descubrir cuánto cuesta cada producto de un supermercado.

Escenario

Volvemos a nuestro supermercado de frutas. Imaginemos que tenemos tres personas:
Bob, Alice y Tim, que han ido al supermercado y compraron manzanas, naranjas y peras. Podemos representar sus compras en una matriz \(M\):

$$M = \begin{bmatrix} 3 & 6 & 2 \\ 10 & 3 & 8 \\ 1 & 7 & 5 \end{bmatrix}$$

Cada fila representa una persona, y cada columna representa un producto:

PersonaManzanasNaranjasPeras
Bob362
Alice1038
Tim175

El coste total

Sabemos cuánto pagó cada persona:

$$C =\begin{bmatrix} 34 \\ 69 \\ 48 \end{bmatrix}$$

Y queremos averiguar cuánto cuesta cada producto. Presentemos los importes que gasto cada uno en un vector que llamamos \( P \) , vector de precios:

$$P = \begin{bmatrix} p_1 \\ p_2 \\ p_3 \end{bmatrix} $$

Donde:

  • \(p_1\) –> precio de la manzana
  • \(p_2\) –> precio de la naranja
  • \(p_3\) –> precio de la pera

Sabemos que:

$$M \cdot P = C$$

o, dicho en palabras: la cantidad comprada multiplicada por el precio unitario da el coste total.

Escribiendo las ecuaciones

Multiplicar la matriz \(M\) por el vector \(P\) nos da tres ecuaciones:

$$ \begin{cases} 3p_1 + 6p_2 + 2p_3 = 34 \\ 10p_1 + 3p_2 + 8p_3 = 69 \\ 1p_1 + 7p_2 + 5p_3 = 48 \end{cases}$$

Esto es un sistema de ecuaciones lineales con tres incógnitas: \( p_1, p_2, p_3 \).

Solución del sistema de ecuaciones.

Solución

Método de sustitución.

Se despeja una variable y se sustituye, reduciendo gradualmente el sistema hasta obtener cada variable.

Paso 1 — despejar p1 de la ecuación (1)

$$ 3p_1 + 6p_2 + 2p_3 = 34$$

$$ p_1 =\frac{34}{3} \, – 2p_2 \, – \frac{2p_3}{3}$$

Paso 2 — sustituir \(p_1\)​ en las ecuaciones (2) y (3)

Sustitución en la ecuación (2):

$$10p_1 + 3p_2 + 8p_3 = 69$$

$$10(\frac{34}{3} – 2p_2 – \frac{2p_3}{3}) + 3p_2 + 8p_3 = 69$$

Multiplicamos todo por 3 para eliminar el denominador:

$$340−60p2​−20p3​+9p2​+24p3 \\ ​=207$$

Agrupamos términos semejantes:

  • Términos en \(p_2​: −60p_2+9p_2=−51p_2\)
  • Términos en \(p_3​: −20p_3+24p_3=4p_3\)

Queda:

$$340−51p2​+4p3​=207$$

Pasamos 340 al otro lado y calculamos:

$$−51p2​+4p3​=207−340$$

$$−51p2​+4p3​=-133$$

Multiplicamos por −1 (para simplificar signos)(Ecuación A):

$$51p2​-4p3​=133$$

Sustitución en la ecuación (3):

$$1p_1 + 7p_2 + 5p_3 = 48$$

$$\frac{34}{3} – 2p_2 – \frac{2p_3}{3} + 7p_2 + 5p_3 = 48$$

Multiplicamos por 3:

$$34−6p2​−2p3​+21p2​+15p3​=144$$

Agrupamos:

  • Términos en \(p_2: -6p_2 + 21p_2 = 15p_2\)
  • Términos en \(p_3: -2p_3 + 15p_3 = 13p_3\)

Queda:

$$34+15p_2​+13p_3​=144$$

Pasamos 34 al otro lado (Ecuación B):

$$15p_2​+13p_3​=144−34=110$$

Ahora hemos reducido el sistema original a dos ecuaciones en \(p_2\)​ y \(p_3\)​:

  • (A) \(51p_2 – 4p_3 = 133\)
  • (B) \(15p_2 +13p_3 = 110\)

Paso 3 — resolver el sistema reducido (A) y (B)

Usamos eliminación. Multiplicamos la ecuación A por 15 y la B por −51 para cancelar \(p_2\)​:

  • A * 15: \( 765p_2 – 60p_3 = 1995\)
  • B * (-51): \( -765p_2 – 663p_3 = -5610\)

Sumamos las dos ecuaciones:

$$(765p2​−60p3​)+(−765p2​−663p3​)\\=1995−5610$$

Se cancelan los \(p_2\) Queda:

$$−723p3​=−3615$$

Despejamos \(p_3\)​:

$$p_3 = \frac{-3615}{-723} = \frac{3615}{723} = 5$$

Ahora sustituimos \(p_3 = 5\) en la ecuación B:

$$15p_2​+13 \cdot 5=110$$

$$15p_2​+65 =110$$

$$15p_2​ =45$$

$$p_2​ =3$$

Por último, calculamos \(p_1\)​ usando la fórmula que obtuvimos en el Paso 1:

$$p_1 = \frac{34 – 6p_2 – 2p_3}{3}$$

$$p_1 = \frac{34 – 6 \cdot 3 – 2 \cdot 5}{3}$$

$$p_1 = \frac{34 – 18 – 10}{3}$$

$$p_1 = \frac{6}{3} = 2$$

Resultado final: \(p_1 = 2, p_2 = 3, p_3 = 5\)

Precios

Pera: 5€

Manaza: 2$

Naranja: 3€

Representar el sistema de ecuaciones en formato matricial:

$$ \begin{bmatrix} 3 & 6 & 2 \\ 10 & 3 & 8 \\ 1 & 7 & 5 \end{bmatrix} \cdot \begin{bmatrix} p_1 \\ p_2 \\ p_3 \end{bmatrix} = \begin{bmatrix} 34 \\ 69 \\ 48 \end{bmatrix} $$

Recordando, tenemos aqui:

  • Matriz de coeficientes: contiene los números que multiplican a las variables (las cantidades de las frutas).
  • Vector de incógnitas: las variables que queremos encontrar (precio de las frutas).
  • Vector de resultados: los valores en el lado derecho (total de dinero gastado).

Cómo transformar el sistema para poder resolverlo

Hasta ahora has visto qué es un sistema de ecuaciones y cómo representarlo en forma matricial. Pero hay un problema práctico: tal como están escritas, las ecuaciones no siempre resultan fáciles de resolver.

En otros articulos hablamos de las caracteristicas del un sistema, como la singularidad. Aqui veremos como transformar el sistema sin cambiar su significado, haciendo mas simple su solucion.

Transformar sin perder información

Existe una serie de operaciones que podemos aplicar a las ecuaciones sin alterar sus soluciones:

  • Intercambiar ecuaciones
  • Multiplicar o dividir una ecuación por un número distinto de cero
  • Sumar o restar ecuaciones entre sí

Estas operaciones son la base del Algoritmo de eliminación de Gauss. Su objetivo es reorganizar el sistema en una forma mucho más sencilla de interpretar.

Ejemplo conceptual del proceso

Partimos de un sistema cualquiera y aplicamos operaciones de fila para:

  1. Elegir un elemento clave (pivote)
  2. Convertir en cero todo lo que hay debajo
  3. Repetir el proceso en las siguientes filas

El resultado es una matriz en la que la estructura del sistema se vuelve transparente.

Es como resolver un sistema de ecuaciones común por eliminación, pero aplicado directamente a los números de una matriz (llamada matriz de coeficientes). El objetivo es limpiar la matriz para que las respuestas sean evidentes.

Forma escalonada por filas (row echelon form).

Se consigue eliminando la información redundante y aislando la información útil. Cada paso reduce el sistema a algo más simple, manteniendo exactamente las mismas soluciones.

Una matriz está en esta forma cuando:

  • Cada fila empieza más a la derecha que la anterior
  • Debajo de cada elemento clave (pivote) hay ceros
  • Las filas sin información (todos ceros) quedan al final

$$A = \begin{bmatrix}1 & * & * \\ 0 & 1 & * \\ 0 & 0 & 1 \end{bmatrix}$$

  • Es útil porque te deja el sistema listo para “sustitución hacia atrás”.

Forma escalonada reducida: la solución directa

Si continúas el proceso un paso más, llegas a la forma escalonada reducida (reduced row echelon form) Aquí ocurre algo muy potente, en su columna solo hay ceros (arriba y abajo)

Cada pivote es 1

$$A = \begin{bmatrix}1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}$$

  • Es el nivel máximo de limpieza.
  • Aquí la solución es directa, cada fila te dice el valor de cada variable.

¿Qué pasa si el sistema es “Singular”?

A veces, al hacer la eliminación gaussiana, una fila completa se convierte en ceros \( 0 = 0 \)). Esto significa que:

  • El sistema es singular (las ecuaciones eran dependientes o redundantes).
  • En la matriz, verás un 0 en la diagonal principal en lugar de un 1.
  • Esto indica que el sistema puede tener infinitas soluciones o ninguna.

Método de eliminación gaussiana

La eliminación gaussiana (o reducción de filas) es el proceso de manipular una matriz mediante operaciones matemáticas simples para simplificarla y resolver sistemas de ecuaciones.

Pasos en la solución.

1 – Crear la matriz aumentada:

$$
\left(
\begin{array}{ccc|c}
3 & 6 & 2 & 34 \\
10 & 3 & 8 & 69 \\
1 & 7 & 5 & 48
\end{array}
\right)
$$

2 – Elegir un buen pivote y hacer intercambio de filas.

En este ejemplo la fila 3 tiene coeficiente 1 y la cambiamos por la 1.

$$
F_1 \leftrightarrow F_3
$$

$$
\left(
\begin{array}{ccc|c}
1 & 7 & 5 & 48 \\
10 & 3 & 8 & 69 \\
3 & 6 & 2 & 34
\end{array}
\right)
$$

3- Eliminación columna 1

Queremos eliminar las variables \( p_1 \) de las filas 2 y 3.

Buscamos eliminar las \(p_1\), lo primero es restar la fila 1 con la fila 2. Para esto hacemos una normalización de la fila dos, buscando que se elimine la variable. En notación de matrices se expone como:

$$
F_2 \leftarrow F_2 – 10F_1
$$

Lo que quiere decir es que la nueva fila \( F_2 \) será el resultado de la resta de la fila \( F_2 \) y la fila \( F_1 \) multiplicada por 10. Esto hace que se elimine \(p_1\) en la operación \(10p_1 – 10p_1\).

La segunda eliminación de la variable es creando una nueva fila 3 producto de la resta entre las filas \( F_3 \) y la \( F_1 \) multiplicando esta por 3.

$$
F_3 \leftarrow F_3 – 3F_1
$$

La matriz resultante es:

$$
\left(
\begin{array}{ccc|c}
1 & 7 & 5 & 48 \\
0 & -67 & -42 & -411 \\
0 & -15 & -13 & -110
\end{array}
\right)
$$

4 – Normalización pivote 2

De la matriz actual buscamos reducir \(p_2\). Normalizamos la fila 2, dividiéndola entre 67, llevando \(p_2\) a 1.

$$
F_2 \leftarrow \frac{1}{-67}F_2
$$

$$
\left(
\begin{array}{ccc|c}
1 & 7 & 5 & 48 \\
0 & 1 & \frac{42}{67} & \frac{411}{67} \\
0 & -15 & -13 & -110
\end{array}
\right)
$$

5 – Eliminación columna 2

Normalizamos la \(F_3\), dividiendo entre 15, y la restamos con \(F_2\) eliminando la variable.

$$
F_3 \leftarrow F_3 + 15F_2
$$

$$
\left(
\begin{array}{ccc|c}
1 & 7 & 5 & 48 \\
0 & 1 & \frac{42}{67} & \frac{411}{67} \\
0 & 0 & \frac{-241}{67} & \frac{-1205}{67}
\end{array}
\right)
$$

6 – Normalización pivote 3

Multiplicamos \(F_3\) por \( \frac{-67}{241} \) para llevar \(p_3\) a 1.

$$
F_3 \leftarrow \frac{-67}{241}F_3
$$

$$
\left(
\begin{array}{ccc|c}
1 & 7 & 5 & 48 \\
0 & 1 & \frac{42}{67} & \frac{411}{67} \\
0 & 0 & 1 & \frac{1205}{241}
\end{array}
\right)
$$

7 – Sustitución hacia atrás

Calcular el valor de \(p_3\).

$$
p_3 = \frac{1205}{241} = 5
$$

Sustituir \(p_3\) en \(F_2\)

$$
p_2 + \frac{42}{67} \cdot 5 = \frac{411}{67}
$$

$$
p_2 = 3
$$

Sustituir \(p_3\) y \(p_2\) en \(F_1\)

$$
p_1 + 7 \cdot 3 + 5 \cdot 5 = 48
$$

$$
p_1 = 2
$$

Resultado final

$$
\begin{cases}
p_1 = 2 \\
p_2 = 3 \\
p_3 = 5
\end{cases}
$$

Paso 4 — verificación (comprobación directa)

Multiplicamos la matriz por el vector de precios para ver si obtenemos los costes:

$$M = \begin{bmatrix} 3 & 6 & 2 \\ 10 & 3 & 8 \\ 1 & 7 & 5 \end{bmatrix}, p = \begin{bmatrix} 2 \\ 3 \\ 5 \end{bmatrix}$$

Producto \(Mp\):

  • Fila 1: \( 3 \cdot 2 + 6 \cdot 3 + 2 \cdot 5 = 34\)
  • Fila 2: \( 10 \cdot 2 + 3 \cdot 3 + 8 \cdot 5 = 69\)
  • Fila 3: \( 1 \cdot 2 + 7 \cdot 3 + 5 \cdot 5 = 48\)

Método de Gauss-Jordan: llevar el sistema hasta la matriz identidad

Una vez hemos aplicado la sustitución hacia atrás y ya conocemos los valores de las variables, puede surgir una pregunta lógica: ¿Y si en lugar de calcular las variables “a mano”, dejamos la matriz ya resuelta automáticamente? Aquí es donde entra el método de Gauss-Jordan.

¿Qué aporta Gauss-Jordan?

El método de Gauss (el que hemos usado) termina en una matriz escalonada, y a partir de ahí necesitamos hacer sustitución hacia atrás. El método de Gauss-Jordan va un paso más allá. Sigue aplicando operaciones hasta convertir la matriz en la matriz identidad

💡 En ese momento:

  • Ya no necesitas sustituir
  • Los valores de las variables aparecen directamente en la última columna

¿Por qué es útil llegar a la identidad?

Porque transforma el sistema en algo trivial:

  • Cada fila representa directamente una variable
  • El sistema queda completamente desacoplado
  • Es el método que se usa en:
    • cálculo matricial
    • inversa de matrices
    • implementaciones en programación

Continuamos el ejemplo

$$
\left(
\begin{array}{ccc|c}
1 & 7 & 5 & 48 \\
0 & 1 & \frac{42}{67} & \frac{411}{67} \\
0 & 0 & 1 & \frac{1205}{241}
\end{array}
\right)
$$

Paso 1: Eliminar la columna 3 de la fila 2 usando la fila 3:

Operación \( F_2 \rightarrow F_2 – \frac{42}{67}F_3\)

  • Columna 3:

$$ \frac{42}{67} – \frac{42}{67} \cdot 1 = 0$$

  • Termino independiente:

$$ \frac{411}{67} – \frac{42}{67} \cdot 1 \frac{1205}{241}$$

$$ \frac{42 \cdot 1205}{67 \cdot 241} = \frac{50610}{16147}$$

Ahora llevamos \( \frac{411}{67}\) al mismo denominador:

$$ \frac{411}{67} = \frac{411 \cdot 241}{67 \cdot 241} = \frac{99051}{16147}$$

Restamos:

$$ \frac{99051}{16147} – \frac{50610}{16147} = \frac{48441}{16471} = 3$$

Nueva \(F_2\):

$$\left(\begin{array}{ccc|c}0 & 1 & 0 & 3 \end{array}\right)$$

Paso 2: eliminar la columna 3 de la fila 1 usando la fila 3

Operación \( F_1 \rightarrow F_1 – 5F_3\)

  • Columna 3:

$$5 – 5 = 0$$

  • Termino independiente:

$$ 48 – 5 \cdot \frac{1205}{241}$$

$$ 5 \cdot \frac{1205}{241} = \frac{6025}{241}$$

Pasamos 48 a fracción:

$$ 48 = \frac{11568}{241}$$

Restamos:

$$ \frac{11568}{241} – \frac{6025}{241} = \frac{5543}{241} = 23$$

Calculamos el término independiente de la fila 3 que no se usará nuevamente:

$$ \frac{1205}{241} = 5$$

Matriz tras paso 1:

$$
\left(
\begin{array}{ccc|c}
1 & 7 & 0 & 23 \\
0 & 1 & 0 & 3 \\
0 & 0 & 1 & 5
\end{array}
\right)
$$

PASO 2: eliminar la columna 2 (usando la fila 2)

Operación \( F_1 \rightarrow F_1 – 7F_2\)

Columna 2:

$$7 – 7 = 0$$

Termino independiente:

$$23 – 7 \cdot 3 = 2$$

Matriz de identidad:

$$
\left(
\begin{array}{ccc|c}
1 & 0 & 0 & 2 \\
0 & 1 & 0 & 3 \\
0 & 0 & 1 & 5
\end{array}
\right)
$$

Solucion final

$$
\begin{cases}
p_1 = 2 \\
p_2 = 3 \\
p_3 = 5
\end{cases}
$$

Solución con Python

Para solucionar con python usamos numpy.linalg.solve, que aplica internamente eliminación de Gauss con pivotado, y es la forma más eficiente y segura de resolver sistemas lineales \(A \cdot x = b \) en Python.

import numpy as np

# Matriz de coeficientes
A = np.array([
    [3, 6, 2],
    [10, 3, 8],
    [1, 7, 5]
], dtype=float)

# Vector de resultados
b = np.array([34, 69, 48], dtype=float)

# Resolver el sistema A·x = b
sol = np.linalg.solve(A, b)

# Mostrar resultados
p1, p2, p3 = sol
print(f"p1 = {p1:.2f}, p2 = {p2:.2f}, p3 = {p3:.2f}")

Salida:

p1 = 2.00, p2 = 3.00, p3 = 5.00

Deja un comentario