15. Traza de una matriz

La traza es la suma de los elementos de la diagonal principal de una matriz cuadrada. Produce un único número y posee propiedades útiles para simplificar expresiones y analizar transformaciones.

15.1 Introducción

Una matriz puede contener muchos elementos, pero algunas operaciones extraen de ella un único número. La traza toma solamente los valores de la diagonal principal y los suma.

Aunque el cálculo es sencillo, la traza aparece en estadística, geometría, optimización, aprendizaje automático y estudio de transformaciones lineales.

tr(A) = suma de los elementos aii

15.2 Definición y notación

Sea A una matriz cuadrada de orden n. La traza se representa como tr(A) y se define mediante:

tr(A) = a11 + a22 + ... + ann

tr(A) = Σ desde i = 1 hasta n de aii

El resultado es un escalar. Los elementos fuera de la diagonal principal no participan directamente en el cálculo.

15.3 Ejemplo de orden 2

A = [ 3   8 ]
    [ 2   5 ]

tr(A) = 3 + 5 = 8

Los valores 8 y 2 no se suman porque se encuentran fuera de la diagonal principal.

15.4 Ejemplo de orden 3

B = [ 4   2   1 ]
    [ 7   -3   5 ]
    [ 6   8   9 ]

tr(B) = 4 + (-3) + 9 = 10
const B = [
  [4, 2, 1],
  [7, -3, 5],
  [6, 8, 9]
];

const traza = B.reduce((suma, fila, i) =>
  suma + fila[i],
  0
);

console.log(traza);

15.5 La traza requiere una matriz cuadrada

En este curso definiremos la traza para matrices cuadradas. Así, la diagonal principal relaciona cada fila con una columna correspondiente dentro del mismo espacio.

Orden ¿Es cuadrada? ¿Definimos traza?
1 × 1
2 × 2
3 × 3
2 × 3 No No
4 × 2 No No

15.6 Función para calcular la traza

Una implementación segura debe comprobar que la matriz sea cuadrada y numérica.

function traza(matriz) {
  if (!Array.isArray(matriz) || matriz.length === 0) {
    throw new Error("La matriz no puede estar vacía");
  }

  const n = matriz.length;
  const valida = matriz.every(fila =>
    Array.isArray(fila) &&
    fila.length === n &&
    fila.every(Number.isFinite)
  );

  if (!valida) throw new Error("La traza requiere una matriz cuadrada numérica");

  return matriz.reduce((suma, fila, i) => suma + fila[i], 0);
}

console.log(traza([[3, 8], [2, 5]]));

15.7 Linealidad respecto de la suma y la resta

La traza de una suma es la suma de las trazas. La misma relación se cumple con la resta.

tr(A + B) = tr(A) + tr(B)
tr(A - B) = tr(A) - tr(B)
const traza = A => A.reduce((suma, fila, i) => suma + fila[i], 0);
const sumar = (A, B) => A.map((fila, i) =>
  fila.map((valor, j) => valor + B[i][j])
);

const A = [[1, 2], [3, 4]];
const B = [[5, 6], [7, 8]];

console.log(traza(sumar(A, B)));
console.log(traza(A) + traza(B));

15.8 Linealidad respecto de escalares

Un escalar puede salir de la traza.

tr(kA) = k · tr(A)
const traza = A => A.reduce((suma, fila, i) => suma + fila[i], 0);
const A = [[2, 5], [1, 7]];
const k = -3;

const kA = A.map(fila => fila.map(valor => k * valor));

console.log(traza(kA));
console.log(k * traza(A));

Las dos propiedades anteriores se resumen diciendo que la traza es una operación lineal.

15.9 Traza de la transpuesta

Transponer no cambia los elementos de la diagonal principal, por lo que la traza permanece igual.

tr(AT) = tr(A)
const transponer = A => A[0].map((_, j) => A.map(fila => fila[j]));
const traza = A => A.reduce((suma, fila, i) => suma + fila[i], 0);

const A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];

console.log(traza(A));
console.log(traza(transponer(A)));

15.10 Traza de dos factores

Si los productos AB y BA están definidos y son cuadrados, sus trazas son iguales.

tr(AB) = tr(BA)

Esto no significa que AB = BA. Las matrices producto pueden ser diferentes y aun así compartir la misma traza.

const multiplicar = (A, B) => A.map(fila =>
  B[0].map((_, j) =>
    fila.reduce((suma, valor, k) => suma + valor * B[k][j], 0)
  )
);
const traza = A => A.reduce((suma, fila, i) => suma + fila[i], 0);

const A = [[1, 2], [0, 1]];
const B = [[2, 0], [3, 1]];
const AB = multiplicar(A, B);
const BA = multiplicar(B, A);

console.log(AB, traza(AB));
console.log(BA, traza(BA));

15.11 Productos rectangulares

La igualdad tr(AB) = tr(BA) también puede aplicarse cuando A y B son rectangulares compatibles. Si A es m × n y B es n × m, entonces AB es m × m y BA es n × n.

const multiplicar = (A, B) => A.map(fila =>
  B[0].map((_, j) =>
    fila.reduce((suma, valor, k) => suma + valor * B[k][j], 0)
  )
);
const traza = A => A.reduce((suma, fila, i) => suma + fila[i], 0);

const A = [[1, 2, 3], [4, 5, 6]];
const B = [[7, 8], [9, 10], [11, 12]];
const AB = multiplicar(A, B);
const BA = multiplicar(B, A);

console.log(`AB es ${AB.length} × ${AB[0].length}, traza:`, traza(AB));
console.log(`BA es ${BA.length} × ${BA[0].length}, traza:`, traza(BA));

15.12 Propiedad cíclica

En un producto de varios factores compatibles, podemos mover cíclicamente los factores sin cambiar la traza.

tr(ABC) = tr(BCA) = tr(CAB)

No podemos realizar una permutación arbitraria. Por ejemplo, tr(ABC) no tiene por qué ser igual a tr(ACB).

const multiplicar = (A, B) => A.map(fila =>
  B[0].map((_, j) =>
    fila.reduce((suma, valor, k) => suma + valor * B[k][j], 0)
  )
);
const traza = A => A.reduce((suma, fila, i) => suma + fila[i], 0);

const A = [[1, 2], [0, 1]];
const B = [[2, 0], [1, 3]];
const C = [[1, 1], [2, 0]];

console.log(traza(multiplicar(multiplicar(A, B), C)));
console.log(traza(multiplicar(multiplicar(B, C), A)));
console.log(traza(multiplicar(multiplicar(C, A), B)));

15.13 Matriz identidad y matriz nula

La identidad In contiene n unos en su diagonal, mientras que la matriz nula contiene ceros.

tr(In) = n
tr(On×n) = 0
function crearIdentidad(n) {
  return Array.from({ length: n }, (_, i) =>
    Array.from({ length: n }, (_, j) => i === j ? 1 : 0)
  );
}

const traza = A => A.reduce((suma, fila, i) => suma + fila[i], 0);
const I4 = crearIdentidad(4);
const O4 = Array.from({ length: 4 }, () => [0, 0, 0, 0]);

console.log(traza(I4));
console.log(traza(O4));

15.14 Matrices diagonales y triangulares

En una matriz diagonal o triangular, la traza sigue siendo la suma de la diagonal. Los ceros estructurales fuera de ella no afectan el cálculo.

const diagonal = [[5, 0, 0], [0, 2, 0], [0, 0, 8]];
const triangular = [[3, 7, 1], [0, -2, 4], [0, 0, 6]];

const traza = A => A.reduce((suma, fila, i) => suma + fila[i], 0);

console.log("Diagonal:", traza(diagonal));
console.log("Triangular:", traza(triangular));

15.15 Producto interno de Frobenius

Para matrices A y B del mismo orden, la suma de los productos de elementos correspondientes puede expresarse mediante la traza.

⟨A, B⟩F = tr(ATB) = Σ aijbij
function productoFrobenius(A, B) {
  return A.reduce((total, fila, i) =>
    total + fila.reduce(
      (suma, valor, j) => suma + valor * B[i][j],
      0
    ),
    0
  );
}

const A = [[1, 2], [3, 4]];
const B = [[5, 6], [7, 8]];

console.log(productoFrobenius(A, B));

Esta relación se utiliza para medir similitud y definir normas de matrices.

15.16 Aplicaciones de la traza

Área Uso
Estadística Suma de varianzas en una matriz de covarianza
Geometría Describir parte del comportamiento de una transformación
Optimización Expresar funciones y derivadas matriciales
Aprendizaje automático Formular pérdidas y regularizaciones
Álgebra lineal Relacionar una matriz con la suma de sus valores propios
const covarianza = [
  [4.2, 1.1, 0.4],
  [1.1, 2.8, 0.7],
  [0.4, 0.7, 3.5]
];

const varianzaTotal = covarianza.reduce(
  (suma, fila, i) => suma + fila[i],
  0
);

console.log(varianzaTotal);

La diagonal contiene la varianza de cada variable; la traza suma todas esas varianzas.

15.17 Eficiencia y precisión numérica

Para una matriz n × n, calcular la traza requiere leer solamente n elementos. No es necesario recorrer los n² valores.

Cuando la diagonal contiene muchos números de magnitudes muy diferentes, los errores de redondeo pueden acumularse. Una suma compensada puede mejorar la precisión.

function trazaCompensada(A) {
  let suma = 0;
  let compensacion = 0;

  for (let i = 0; i < A.length; i++) {
    const valor = A[i][i];
    const temporal = suma + valor;

    if (Math.abs(suma) >= Math.abs(valor)) {
      compensacion += (suma - temporal) + valor;
    } else {
      compensacion += (valor - temporal) + suma;
    }
    suma = temporal;
  }

  return suma + compensacion;
}

const A = [[1e16, 0, 0], [0, 1, 0], [0, 0, -1e16]];
console.log(trazaCompensada(A));

15.18 Propiedades y errores frecuentes

  • La traza se define aquí para matrices cuadradas.
  • No deben sumarse los elementos de la diagonal secundaria.
  • La traza produce un escalar, no una matriz.
  • En general, tr(AB) no es igual a tr(A)tr(B).
  • La igualdad tr(AB) = tr(BA) no implica AB = BA.
  • La propiedad cíclica no permite cualquier permutación de factores.
  • No es necesario recorrer toda la matriz para calcular la traza.
  • Los resultados decimales pueden requerir una estrategia de suma más precisa.

15.19 Qué debes recordar de este tema

  • La traza es la suma de la diagonal principal de una matriz cuadrada.
  • Se representa como tr(A) y produce un escalar.
  • Se cumple tr(A + B) = tr(A) + tr(B).
  • Se cumple tr(kA) = k·tr(A).
  • Se cumple tr(AT) = tr(A).
  • Se cumple tr(AB) = tr(BA) para productos compatibles y cuadrados.
  • La traza posee una propiedad cíclica en productos de varios factores.
  • tr(In) = n y tr(O) = 0.

15.20 Conclusión

La traza resume la diagonal principal en un solo número y permite transformar expresiones matriciales mediante propiedades lineales y cíclicas. Su cálculo es económico porque solo necesita n elementos de una matriz n × n.

En el próximo tema estudiaremos los determinantes, escalares que permiten analizar cambios de escala, invertibilidad y dependencia en matrices cuadradas.