22. Sistemas de ecuaciones lineales

Un sistema lineal reúne varias condiciones que deben cumplirse simultáneamente. Su representación matricial permite analizar las soluciones y aplicar algoritmos generales.

22.1 Introducción

Muchos problemas requieren encontrar varios valores desconocidos relacionados por distintas condiciones. Por ejemplo, calcular los precios de dos productos a partir de cantidades y totales.

Cuando todas las condiciones son ecuaciones lineales, forman un sistema de ecuaciones lineales. Resolverlo significa encontrar valores que satisfagan todas las ecuaciones al mismo tiempo.

Una solución aislada de una ecuación no basta: debe verificar simultáneamente cada ecuación del sistema.

22.2 Qué es una ecuación lineal

Una ecuación lineal con n incógnitas tiene la forma:

a1x1 + a2x2 + ... + anxn = b

Los valores ai son coeficientes, xi son incógnitas y b es el término independiente. Las incógnitas aparecen solo con exponente 1 y no se multiplican entre sí.

Expresión¿Es lineal?Motivo
2x − 3y = 7Las variables tienen grado 1
x2 + y = 4NoAparece x al cuadrado
xy = 5NoLas variables se multiplican
4x + 0y = 8Un coeficiente puede ser cero

22.3 Qué es un sistema lineal

Un sistema de m ecuaciones con n incógnitas puede escribirse como:

a11x1 + ... + a1nxn = b1
a21x1 + ... + a2nxn = b2
...
am1x1 + ... + amnxn = bm

Cada ecuación agrega una condición. Sin embargo, una condición repetida o dependiente no aporta información nueva.

22.4 Ejemplo con dos incógnitas

Consideremos el sistema:

x + y = 5
2x − y = 1

Al sumar las ecuaciones se obtiene 3x = 6, por lo que x = 2. Sustituyendo en la primera ecuación resulta y = 3.

const x = 2;
const y = 3;

console.log(x + y === 5);     // true
console.log(2 * x - y === 1); // true

22.5 La solución de un sistema

Una solución es una lista ordenada de valores, uno por cada incógnita. El orden debe conservarse: para variables (x, y), la pareja (2, 3) no representa lo mismo que (3, 2).

La solución del ejemplo anterior puede expresarse como vector columna:

x = [[2], [3]]
const solucion = [2, 3];
const [x, y] = solucion;

console.log({ x, y }); // { x: 2, y: 3 }

22.6 Verificar una solución

Para comprobar una solución se sustituye en todas las ecuaciones. En programas que trabajan con decimales conviene utilizar una tolerancia.

function verificarSistema(A, x, b, tolerancia = 1e-10) {
  return A.every((fila, i) => {
    const resultado = fila.reduce(
      (suma, coeficiente, j) => suma + coeficiente * x[j],
      0
    );
    return Math.abs(resultado - b[i]) < tolerancia;
  });
}

const A = [[1, 1], [2, -1]];
console.log(verificarSistema(A, [2, 3], [5, 1])); // true

22.7 Interpretación geométrica

En dos incógnitas, cada ecuación lineal representa una recta. Resolver el sistema equivale a buscar los puntos comunes:

  • Dos rectas que se cortan: una solución.
  • Dos rectas coincidentes: infinitas soluciones.
  • Dos rectas paralelas distintas: ninguna solución.

Con tres incógnitas, cada ecuación representa un plano. En dimensiones mayores se habla de hiperplanos.

22.8 Clasificación según sus soluciones

ClasificaciónCantidad de solucionesNombre habitual
Compatible determinadoUnaSolución única
Compatible indeterminadoInfinitasVariables libres
IncompatibleNingunaContradicción

Para un sistema lineal sobre los números reales no existe el caso de exactamente dos o tres soluciones: si aparecen dos soluciones diferentes, existen infinitas combinaciones entre ellas.

22.9 Representación matricial

Los coeficientes, las incógnitas y los términos independientes pueden separarse para escribir el sistema de forma compacta:

Ax = b

Para x + y = 5 y 2x − y = 1:

A = [[1, 1], [2, −1]],   x = [[x], [y]],   b = [[5], [1]]

La fila i de A contiene los coeficientes de la ecuación i. La columna j corresponde siempre a la misma incógnita.

22.10 Construir A, x y b

El sistema 3x − 2y + z = 7, x + 4y − z = 2 se representa con dos filas y tres columnas.

const A = [[3, -2, 1], [1, 4, -1]];
const variables = ["x", "y", "z"];
const b = [7, 2];

console.log(A.length);       // 2 ecuaciones
console.log(A[0].length);    // 3 incógnitas
console.log(variables, b);

Es esencial completar con ceros los coeficientes ausentes. Por ejemplo, x + z = 4 debe registrarse como [1, 0, 1].

22.11 Matriz aumentada

La matriz aumentada [A | b] agrega los términos independientes como última columna. Es la estructura usada por los métodos de Gauss y Gauss-Jordan.

function matrizAumentada(A, b) {
  if (A.length !== b.length) {
    throw new Error("Debe existir un término independiente por ecuación");
  }
  return A.map((fila, i) => [...fila, b[i]]);
}

const A = [[1, 1], [2, -1]];
console.log(matrizAumentada(A, [5, 1]));
// [[1, 1, 5], [2, -1, 1]]

22.12 Sistemas cuadrados, sobredeterminados y subdeterminados

RelaciónTipoObservación
m = nCuadradoIgual número de ecuaciones e incógnitas
m > nSobredeterminadoMás ecuaciones que incógnitas
m < nSubdeterminadoMenos ecuaciones que incógnitas

La cantidad de ecuaciones por sí sola no determina la cantidad de soluciones. También importa si las ecuaciones aportan información independiente y si son compatibles.

function tipoPorDimensiones(A) {
  const m = A.length;
  const n = A[0].length;
  if (m === n) return "cuadrado";
  return m > n ? "sobredeterminado" : "subdeterminado";
}

console.log(tipoPorDimensiones([[1, 0], [0, 1], [1, 1]]));

22.13 Relación entre rango y soluciones

El teorema de Rouché-Frobenius clasifica el sistema comparando rango(A), rango([A | b]) y el número n de incógnitas:

  • Si rango(A) ≠ rango([A | b]), el sistema es incompatible.
  • Si ambos rangos son iguales a n, existe una solución única.
  • Si ambos rangos coinciden pero son menores que n, existen infinitas soluciones.
function clasificarSistema(rangoA, rangoAumentada, incognitas) {
  if (rangoA !== rangoAumentada) return "sin solución";
  if (rangoA === incognitas) return "solución única";
  return "infinitas soluciones";
}

console.log(clasificarSistema(2, 2, 2)); // solución única
console.log(clasificarSistema(1, 2, 2)); // sin solución

22.14 Sistemas cuadrados e invertibilidad

Si A es cuadrada e invertible, el sistema Ax = b tiene exactamente una solución para cualquier vector b:

x = A-1b

Las siguientes condiciones son equivalentes para A de orden n: det(A) ≠ 0, rango(A) = n, A es invertible y Ax = b posee solución única para todo b.

Aunque la fórmula con la inversa explica la teoría, los programas numéricos suelen resolver el sistema directamente mediante eliminación o factorización.

22.15 Sistemas homogéneos

Un sistema es homogéneo cuando todos los términos independientes son cero:

Ax = 0

Siempre posee la solución trivial x = 0. Si rango(A) es menor que el número de incógnitas, también existen soluciones no triviales.

const A = [[1, 2], [2, 4]];
const solucionTrivial = [0, 0];

const resultado = A.map(fila =>
  fila.reduce((suma, valor, j) => suma + valor * solucionTrivial[j], 0)
);
console.log(resultado); // [0, 0]

22.16 Métodos de resolución

Existen varios métodos, adecuados para contextos diferentes:

MétodoIdeaUso
SustituciónDespejar y reemplazarSistemas pequeños
Eliminación de GaussEscalonar y sustituir hacia atrásMétodo general
Gauss-JordanObtener forma escalonada reducidaLeer soluciones directamente
Regla de CramerUsar determinantesSistemas cuadrados pequeños con det(A) ≠ 0
FactorizacionesDescomponer ACálculo numérico eficiente

Los próximos temas desarrollarán Gauss, Gauss-Jordan y la regla de Cramer.

22.17 Aplicación: precios de productos

Dos cuadernos y tres lápices cuestan 13 unidades monetarias. Un cuaderno y dos lápices cuestan 8. Si c es el precio del cuaderno y l el del lápiz:

2c + 3l = 13
c + 2l = 8

La solución es c = 2 y l = 3.

const precioCuaderno = 2;
const precioLapiz = 3;

const compra1 = 2 * precioCuaderno + 3 * precioLapiz;
const compra2 = precioCuaderno + 2 * precioLapiz;
console.log({ compra1, compra2 }); // { compra1: 13, compra2: 8 }

22.18 Aplicaciones y errores frecuentes

Los sistemas lineales aparecen en simulaciones, circuitos, gráficos, equilibrio de recursos, ajuste de modelos, economía y reconstrucción de imágenes.

Al modelarlos conviene evitar estos errores:

  • Cambiar el orden de las variables entre ecuaciones.
  • Omitir coeficientes cero al construir la matriz.
  • Confundir cantidad de ecuaciones con cantidad de soluciones.
  • Aceptar una respuesta sin verificar todas las ecuaciones.
  • Usar igualdad exacta con resultados decimales.
  • Formar la inversa cuando basta resolver Ax = b.
function filaConVariables(coeficientes, cantidadVariables) {
  if (coeficientes.length !== cantidadVariables) {
    throw new Error("Faltan o sobran coeficientes");
  }
  return [...coeficientes];
}

console.log(filaConVariables([1, 0, 3], 3));

22.19 Qué debes recordar de este tema

  • Un sistema lineal reúne ecuaciones que deben satisfacerse simultáneamente.
  • Una ecuación lineal no contiene potencias de grado mayor que uno ni productos entre incógnitas.
  • La forma matricial de un sistema es Ax = b.
  • La matriz aumentada se escribe [A | b].
  • Un sistema puede tener una solución, infinitas soluciones o ninguna.
  • La clasificación depende de rango(A), rango([A | b]) y el número de incógnitas.
  • Todo sistema homogéneo posee al menos la solución trivial.
  • Una solución debe verificarse en todas las ecuaciones.

22.20 Conclusión

La notación Ax = b convierte un conjunto de ecuaciones en un problema matricial organizado. El rango permite anticipar cuántas soluciones existen, mientras que los métodos de eliminación permiten calcularlas.

En el próximo tema estudiaremos el método de eliminación de Gauss para transformar un sistema en otro equivalente y resolverlo mediante sustitución hacia atrás.