26. Espacios vectoriales

Un espacio vectorial es un conjunto cuyos elementos pueden sumarse y multiplicarse por escalares respetando reglas comunes. Esta estructura reúne bajo una misma teoría vectores, matrices, polinomios y muchas otras entidades.

26.1 Introducción

Hasta ahora hemos utilizado vectores como listas de coordenadas. El concepto de espacio vectorial abstrae las propiedades esenciales de esas listas y permite aplicarlas a objetos aparentemente diferentes.

Una matriz, un polinomio o una función también pueden comportarse como vectores si admiten una suma y una multiplicación por escalares que cumplen ciertos axiomas.

“Vector” no significa únicamente una flecha: es cualquier elemento de un espacio vectorial.

26.2 Definición de espacio vectorial

Un espacio vectorial V sobre un cuerpo de escalares K es un conjunto equipado con dos operaciones:

  • Suma de vectores: u + v.
  • Multiplicación por un escalar: λv.

Estas operaciones deben producir elementos de V y satisfacer los axiomas de los espacios vectoriales. En este curso trabajaremos principalmente con escalares reales, es decir, K = ℝ.

u, v ∈ V y λ ∈ ℝ ⇒ u + v ∈ V y λv ∈ V

26.3 Ejemplos de espacios vectoriales

EspacioSus vectoresEjemplo
2Pares de números reales(3, −1)
nListas de n números reales(x1, ..., xn)
Mm×nMatrices reales m × n[[1, 2], [0, 3]]
P2Polinomios de grado menor o igual que 22 + x − 3x2
Funciones realesFunciones con suma y producto escalar usualesf(x) = sen(x)

Las operaciones deben definirse de forma compatible con la naturaleza de cada objeto.

26.4 Operaciones en ℝn

En ℝn, la suma y el producto por un escalar se realizan componente a componente:

(u1, ..., un) + (v1, ..., vn) = (u1 + v1, ..., un + vn)
λ(u1, ..., un) = (λu1, ..., λun)
function sumar(u, v) {
  if (u.length !== v.length) throw new Error("Dimensiones diferentes");
  return u.map((valor, i) => valor + v[i]);
}

function escalar(lambda, v) {
  return v.map(valor => lambda * valor);
}

console.log(sumar([1, 2, 3], [4, -1, 2])); // [5, 1, 5]
console.log(escalar(3, [1, 2, 3]));        // [3, 6, 9]

26.5 Axiomas de la suma

Para todos u, v, w de V, la suma debe cumplir:

AxiomaExpresión
Cierreu + v pertenece a V
Conmutatividadu + v = v + u
Asociatividad(u + v) + w = u + (v + w)
Vector ceroExiste 0 tal que v + 0 = v
Vector opuestoExiste −v tal que v + (−v) = 0
const sumar = (u, v) => u.map((valor, i) => valor + v[i]);
const u = [1, 2];
const v = [3, -1];

console.log(sumar(u, v)); // [4, 1]
console.log(sumar(v, u)); // [4, 1]

26.6 Axiomas del producto por escalares

Para escalares λ, μ y vectores u, v se exige:

  • λ(u + v) = λu + λv.
  • (λ + μ)v = λv + μv.
  • λ(μv) = (λμ)v.
  • 1v = v.
const sumar = (u, v) => u.map((x, i) => x + v[i]);
const porEscalar = (k, v) => v.map(x => k * x);
const u = [1, 3];
const v = [2, -1];
const k = 4;

console.log(porEscalar(k, sumar(u, v)));
console.log(sumar(porEscalar(k, u), porEscalar(k, v)));
// Ambos resultados son [12, 8].

26.7 Vector cero y vector opuesto

El vector cero actúa como elemento neutro de la suma. En ℝn tiene todas sus componentes iguales a cero. El opuesto de v se obtiene multiplicándolo por −1.

function vectorCero(dimension) {
  return Array(dimension).fill(0);
}

const v = [4, -2, 7];
const opuesto = v.map(valor => -valor);
const suma = v.map((valor, i) => valor + opuesto[i]);

console.log(vectorCero(3)); // [0, 0, 0]
console.log(suma);          // [0, 0, 0]

Todo espacio vectorial contiene exactamente un vector cero, y cada vector posee un único opuesto.

26.8 El espacio ℝ2

Los elementos de ℝ2 son pares ordenados (x, y). Geométricamente pueden interpretarse como posiciones o desplazamientos en el plano.

La suma combina desplazamientos y el producto por escalares cambia su magnitud y, si el escalar es negativo, también su sentido.

const desplazamiento1 = [3, 1];
const desplazamiento2 = [-2, 4];
const total = desplazamiento1.map((valor, i) => valor + desplazamiento2[i]);

console.log(total); // [1, 5]

26.9 El espacio ℝn

n generaliza el plano y el espacio tridimensional. Un vector contiene exactamente n componentes reales, aunque n sea demasiado grande para visualizarlo.

En programación, un vector de ℝn puede representar las características de un dato: edad, altura, peso, puntuación y otras mediciones.

const dato = [28, 1.75, 72, 0.83];
const nombres = ["edad", "altura", "peso", "puntuación"];

const descripcion = Object.fromEntries(
  nombres.map((nombre, i) => [nombre, dato[i]])
);
console.log(descripcion);

26.10 Espacio de matrices

El conjunto de todas las matrices reales de tamaño fijo m × n es un espacio vectorial. La suma y el producto por escalares se realizan elemento a elemento.

El tamaño debe permanecer fijo: una matriz 2 × 2 y una matriz 3 × 2 no pertenecen al mismo espacio M2×2.

const A = [[1, 2], [3, 4]];
const B = [[-1, 0], [2, 5]];
const suma = A.map((fila, i) =>
  fila.map((valor, j) => valor + B[i][j])
);
const dobleA = A.map(fila => fila.map(valor => 2 * valor));

console.log(suma);   // [[0, 2], [5, 9]]
console.log(dobleA); // [[2, 4], [6, 8]]

26.11 Espacio de polinomios

Los polinomios de grado menor o igual que 2 forman P2. Podemos representarlos mediante sus coeficientes [a0, a1, a2]:

a0 + a1x + a2x2 ⟷ [a0, a1, a2]
const p = [2, 1, -3]; // 2 + x - 3x²
const q = [-1, 4, 2]; // -1 + 4x + 2x²
const suma = p.map((coeficiente, i) => coeficiente + q[i]);

console.log(suma); // [1, 5, -1]: 1 + 5x - x²

La representación por coeficientes muestra que P2 se comporta de manera similar a ℝ3.

26.12 Qué es un subespacio vectorial

Un subconjunto W de un espacio V es un subespacio si, usando las mismas operaciones de V, también constituye un espacio vectorial.

Para comprobarlo basta verificar tres condiciones:

  1. El vector cero pertenece a W.
  2. Si u y v pertenecen a W, entonces u + v pertenece a W.
  3. Si v pertenece a W y λ es un escalar, entonces λv pertenece a W.
Las dos últimas condiciones se denominan cierre bajo suma y cierre bajo producto escalar.

26.13 Ejemplo de subespacio

El conjunto W = {(x, y, z) ∈ ℝ3 : z = x + y} es un plano que pasa por el origen.

Si dos vectores cumplen la ecuación, su suma también la cumple. Multiplicar cualquiera de ellos por un escalar conserva la relación.

const pertenece = ([x, y, z]) => Math.abs(z - x - y) < 1e-10;
const u = [1, 2, 3];
const v = [4, -1, 3];
const suma = u.map((valor, i) => valor + v[i]);
const multiplo = u.map(valor => -2 * valor);

console.log(pertenece(u), pertenece(v));       // true, true
console.log(pertenece(suma), pertenece(multiplo)); // true, true

26.14 Un conjunto que no es subespacio

El plano S = {(x, y, z) : z = x + y + 1} no es un subespacio. No contiene al vector cero, ya que 0 ≠ 0 + 0 + 1.

const pertenece = ([x, y, z]) => Math.abs(z - x - y - 1) < 1e-10;
const cero = [0, 0, 0];

console.log(pertenece(cero)); // false

Un plano desplazado puede ser un conjunto geométrico útil, pero si no pasa por el origen no es un subespacio del espacio vectorial usual.

26.15 Combinaciones lineales

Una combinación lineal de v1, ..., vk es cualquier vector de la forma:

λ1v1 + ... + λkvk
function combinacionLineal(vectores, escalares) {
  if (vectores.length !== escalares.length || vectores.length === 0) {
    throw new Error("Datos incompatibles");
  }
  return vectores[0].map((_, componente) =>
    vectores.reduce(
      (suma, vector, i) => suma + escalares[i] * vector[componente],
      0
    )
  );
}

const vectores = [[1, 0, 1], [0, 1, 1]];
console.log(combinacionLineal(vectores, [2, -1])); // [2, -1, 1]

26.16 Espacio generado

El espacio generado por un conjunto de vectores es el conjunto de todas sus combinaciones lineales. Se escribe:

gen{v1, ..., vk} o span{v1, ..., vk}

El espacio generado siempre es un subespacio. Por ejemplo, gen{(1, 0, 1), (0, 1, 1)} es precisamente el plano z = x + y.

function puntoDelPlano(s, t) {
  const v1 = [1, 0, 1];
  const v2 = [0, 1, 1];
  return v1.map((valor, i) => s * valor + t * v2[i]);
}

console.log(puntoDelPlano(3, 4)); // [3, 4, 7]

26.17 Pertenencia a un espacio generado

Para decidir si un vector w pertenece a gen{v1, ..., vk}, se buscan escalares que satisfagan:

λ1v1 + ... + λkvk = w

Esta igualdad produce un sistema lineal. Si es compatible, w pertenece al espacio generado.

// Para v1 = (1, 0, 1), v2 = (0, 1, 1),
// las dos primeras componentes obligan a usar s = x y t = y.
function perteneceAlGenerado([x, y, z], tolerancia = 1e-10) {
  return Math.abs((x + y) - z) < tolerancia;
}

console.log(perteneceAlGenerado([3, 4, 7])); // true
console.log(perteneceAlGenerado([3, 4, 8])); // false

26.18 Aplicaciones y errores frecuentes

Los espacios vectoriales aparecen en gráficos, procesamiento de señales, aprendizaje automático, compresión, simulaciones y representación de datos. La abstracción permite aplicar los mismos algoritmos a diferentes tipos de objetos.

Errores habituales:

  • Creer que todos los vectores deben tener dos o tres componentes.
  • Sumar elementos que pertenecen a espacios de dimensiones distintas.
  • Olvidar comprobar que un supuesto subespacio contiene al vector cero.
  • Confundir un conjunto desplazado con un subespacio.
  • Usar operaciones que no cumplen cierre.
  • Confundir un conjunto de vectores con el espacio que generan.

26.19 Qué debes recordar de este tema

  • Un espacio vectorial es un conjunto con suma y producto por escalares.
  • Las operaciones deben satisfacer los axiomas de los espacios vectoriales.
  • n, las matrices de tamaño fijo y ciertos polinomios son espacios vectoriales.
  • Todo espacio contiene un vector cero y el opuesto de cada vector.
  • Un subespacio contiene el cero y es cerrado bajo suma y producto escalar.
  • Una combinación lineal suma múltiplos escalares de varios vectores.
  • El espacio generado contiene todas las combinaciones lineales posibles.
  • La pertenencia a un espacio generado puede decidirse resolviendo un sistema lineal.

26.20 Conclusión

Los espacios vectoriales proporcionan un lenguaje común para estudiar coordenadas, matrices, polinomios y muchos otros objetos. Sus axiomas garantizan que las operaciones lineales se comporten de forma coherente.

En el próximo tema volveremos a la interpretación geométrica para estudiar vectores en el plano y en el espacio.