Una base es un conjunto mínimo de direcciones independientes capaz de generar todo un espacio. La cantidad de vectores de una base determina la dimensión.
Para describir un espacio vectorial buscamos un conjunto de vectores que permita construir todos sus elementos sin incluir información redundante.
Ese conjunto se denomina base. Una base funciona como un sistema de coordenadas: cada vector del espacio queda representado por una lista única de escalares.
Un conjunto ordenado B = {b1, ..., bn} es una base de un espacio vectorial V si cumple dos condiciones:
| Si falta... | Consecuencia |
|---|---|
| Generación | Hay vectores de V que no pueden representarse |
| Independencia | Las representaciones no son únicas y hay redundancia |
B genera V cuando todo vector v de V puede escribirse como combinación lineal:
const b1 = [1, 0];
const b2 = [0, 1];
const coordenadas = [4, -3];
const v = b1.map((_, i) =>
coordenadas[0] * b1[i] + coordenadas[1] * b2[i]
);
console.log(v); // [4, -3]
Si algún vector del espacio queda fuera del conjunto generado, B no es una base de todo V.
Los vectores de B deben satisfacer:
Si uno de los vectores puede construirse con los demás, puede eliminarse sin reducir el espacio generado. El conjunto original era redundante.
const b1 = [1, 0];
const b2 = [0, 1];
const redundante = [1, 1];
const diferencia = redundante.map(
(valor, i) => valor - b1[i] - b2[i]
);
console.log(diferencia); // [0, 0]
La base canónica de ℝn contiene los vectores con un 1 en una posición y ceros en las demás.
function baseCanonica(dimension) {
return Array.from({ length: dimension }, (_, i) =>
Array.from({ length: dimension }, (_, j) => Number(i === j))
);
}
console.log(baseCanonica(3));
// [[1,0,0], [0,1,0], [0,0,1]]
Si B = (b1, ..., bn) es una base y v = c1b1 + ... + cnbn, las coordenadas de v en B son:
El orden de los vectores de la base importa, porque determina el orden de las coordenadas.
function reconstruir(base, coordenadas) {
return base[0].map((_, componente) =>
base.reduce(
(suma, vector, i) => suma + coordenadas[i] * vector[componente],
0
)
);
}
console.log(reconstruir([[1, 0], [0, 1]], [5, -2])); // [5, -2]
La independencia garantiza que un vector no puede tener dos representaciones distintas en la misma base.
Si v tuviera coeficientes ci y di, al restar las expresiones se obtendría:
Por independencia, cada diferencia es cero y ambas listas de coordenadas coinciden.
Sea B = {(1, 1), (1, −1)}. Para representar v = (4, 2), buscamos a y b tales que:
Por tanto, [v]B = (3, 1).
function coordenadasEnBaseEspecial([x, y]) {
return [(x + y) / 2, (x - y) / 2];
}
const coordenadas = coordenadasEnBaseEspecial([4, 2]);
console.log(coordenadas); // [3, 1]
console.log([coordenadas[0] + coordenadas[1], coordenadas[0] - coordenadas[1]]);
// [4, 2]
Si V tiene una base finita, su dimensión es la cantidad de vectores de cualquier base de V:
Todas las bases de un mismo espacio vectorial finito tienen exactamente la misma cantidad de elementos, aunque sus vectores sean diferentes.
| Espacio | Una base | Dimensión |
|---|---|---|
| ℝn | Base canónica | n |
| Recta por el origen en ℝ3 | Un vector director no nulo | 1 |
| Plano por el origen en ℝ3 | Dos vectores directores independientes | 2 |
| Pn | {1, x, ..., xn} | n + 1 |
| Mm×n | Matrices con un único 1 | mn |
| {0} | Conjunto vacío | 0 |
La base canónica no es la única. En ℝ2, cualquier par de vectores no paralelos constituye una base.
function esBaseR2([u, v], tolerancia = 1e-10) {
const determinante = u[0] * v[1] - v[0] * u[1];
return Math.abs(determinante) > tolerancia;
}
console.log(esBaseR2([[1, 1], [1, -1]])); // true
console.log(esBaseR2([[1, 2], [2, 4]])); // false
Elegir una base adaptada al problema puede simplificar coordenadas y cálculos.
Si dim(V) = n:
Si un conjunto genera un espacio pero es dependiente, pueden eliminarse vectores redundantes hasta conservar una base.
La función siguiente devuelve los índices de las columnas pivote y una base del espacio columna.
function baseDelEspacioColumna(A, tolerancia = 1e-10) {
const m = A.map(fila => [...fila]);
const filas = m.length;
const columnas = m[0]?.length ?? 0;
const pivotes = [];
let filaPivote = 0;
for (let columna = 0; columna < columnas && filaPivote < filas; columna++) {
let mejor = filaPivote;
for (let fila = filaPivote + 1; fila < filas; fila++) {
if (Math.abs(m[fila][columna]) > Math.abs(m[mejor][columna])) mejor = fila;
}
if (Math.abs(m[mejor][columna]) <= tolerancia) continue;
[m[filaPivote], m[mejor]] = [m[mejor], m[filaPivote]];
for (let fila = filaPivote + 1; fila < filas; fila++) {
const factor = m[fila][columna] / m[filaPivote][columna];
for (let j = columna; j < columnas; j++) {
m[fila][j] -= factor * m[filaPivote][j];
}
}
pivotes.push(columna);
filaPivote++;
}
const base = pivotes.map(columna => A.map(fila => fila[columna]));
return { pivotes, base, dimension: pivotes.length };
}
const A = [[1, 2, 3], [0, 1, 1], [1, 3, 4]];
console.log(baseDelEspacioColumna(A));
Un conjunto independiente que todavía no genera V puede ampliarse agregando vectores que aporten nuevas direcciones hasta formar una base.
En ℝ3, {(1, 0, 0), (0, 1, 0)} es independiente pero solo genera el plano xy. Agregar (0, 0, 1) completa una base.
const parcial = [[1, 0, 0], [0, 1, 0]];
const nuevaDireccion = [0, 0, 1];
const baseCompleta = [...parcial, nuevaDireccion];
console.log(baseCompleta.length); // 3
El plano W = {(x, y, z) : z = x + y} puede parametrizarse como:
Los dos vectores son independientes, por lo que forman una base de W y dim(W) = 2.
const basePlano = [[1, 0, 1], [0, 1, 1]];
function puntoDelPlano(x, y) {
return basePlano[0].map(
(valor, i) => x * valor + y * basePlano[1][i]
);
}
console.log(puntoDelPlano(3, 4)); // [3, 4, 7]
Los conceptos no se limitan a flechas geométricas. P2 tiene base {1, x, x2} y dimensión 3. M2×2 tiene dimensión 4.
const baseMatrices2x2 = [
[[1, 0], [0, 0]],
[[0, 1], [0, 0]],
[[0, 0], [1, 0]],
[[0, 0], [0, 1]]
];
const coordenadas = [2, -1, 3, 4];
const matriz = [
[coordenadas[0], coordenadas[1]],
[coordenadas[2], coordenadas[3]]
];
console.log(baseMatrices2x2.length, matriz); // 4, [[2,-1],[3,4]]
Si la matriz P tiene como columnas los vectores de una base B expresados en coordenadas canónicas, entonces:
const P = [[1, 1], [1, -1]]; // columnas de la base
const coordenadasB = [3, 1];
const v = P.map(fila =>
fila.reduce((suma, valor, i) => suma + valor * coordenadasB[i], 0)
);
console.log(v); // [4, 2]
Las bases se usan para comprimir representaciones, adaptar coordenadas a un problema y describir transformaciones. Errores frecuentes son verificar solo generación o solo independencia, confundir dimensión con cantidad de componentes de un objeto, ignorar el orden de la base y elegir columnas escalonadas en vez de las originales.
Una base proporciona las direcciones esenciales de un espacio, mientras que la dimensión cuenta cuántas son necesarias. Las coordenadas convierten cualquier vector en una lista única respecto de esas direcciones.
En el próximo tema estudiaremos transformaciones lineales, funciones que preservan las combinaciones lineales y pueden describirse a partir de su acción sobre una base.