🧮 Computational Mathematics

Inicio · Parte 06 — Álgebra lineal II: descomposiciones y tensores

129 — Descomposición LU

intermedio-avanzado clase 9 de 20 4 horas demostración lu_decomposition

LU factoriza una vez y resuelve muchos sistemas: O(n³) una sola vez, O(n²) por cada b.

Fórmulas

A = LU
resolver: Ly = b (hacia delante), luego Ux = y (hacia atrás)
det(A) = Π uᵢᵢ

Desarrollo

La factorización LU descompone una matriz en el producto de una triangular inferior con unos en la diagonal y una triangular superior. No es un algoritmo nuevo: es la eliminación de Gauss guardando los multiplicadores en lugar de descartarlos.

Su valor está en la reutilización. Factorizar cuesta O(n³/3), pero una vez hecho, resolver Ax = b para cada nuevo b cuesta solo O(n²): dos sustituciones triangulares. Si hay que resolver mil sistemas con la misma matriz —caso frecuente en simulación y en métodos implícitos— la diferencia es de tres órdenes de magnitud.

Como subproducto, el determinante sale gratis: es el producto de la diagonal de U, corregido por el signo de los intercambios de fila. Calcularlo así cuesta O(n³) en lugar del O(n!) de la definición de Laplace.

La versión sin pivoteo que implementa el motor —Doolittle— falla si aparece un pivote nulo, y es numéricamente frágil con pivotes pequeños. Las bibliotecas reales usan LU con pivoteo parcial (PA = LU), y por eso scipy.linalg.lu devuelve también una matriz de permutación.

Ejemplo trabajado

Factorizar una matriz 2×2.

A = [[4,3],[6,3]]

L = [[1,   0],      U = [[4,  3],
     [1.5, 1]]           [0, −1.5]]

L·U = [[4,3],[6,3]] = A                    ✓

det(A) = 4 · (−1.5) = −6                   ✓

Coste:
  factorizar:               O(n³/3)
  cada sistema adicional:   O(n²)

Qué calcula el laboratorio

LU: factorizar una vez, resolver muchos sistemas.

python classes/part-06-algebra-lineal-ii-descomposiciones-y-tensores/129-descomposicion-lu/lab.py
compmath run 129

Salidas del laboratorio (8)

Muestra de la ejecución real

{
  "A": [
    [
      4.0,
      3.0
    ],
    [
      6.0,
      3.0
    ]
  ],
  "L": [
    [
      1.0,
      0.0
    ],
    [
      1.5,
      1.0
    ]
  ],
  "U": [
    [
      4.0,
      3.0
    ],
    [
      0.0,
      -1.5
    ]
  ],
  "LU": [
    [
      4.0,
      3.0
    ],
    [
      6.0,
      3.0
    ]
  ],
  "reconstruccion_ok": true,
  "det_como_producto_de_U": -6.0
}

Errores comunes

Dónde se usa

Solvers de sistemas lineales, métodos implícitos en EDO, simulación con la misma matriz y muchos lados derechos, y cálculo eficiente de determinantes.

Idea rectora de la parte

El número de condición es el cociente entre el mayor y el menor valor singular.

Error a evitar

Confundir el orden de los índices al reordenar un tensor.

Conexión con IA

LoRA factoriza matrices de bajo rango, la atención se define con productos tensoriales y la estabilidad del entrenamiento depende del espectro de los pesos.

Bibliografía de la clase

Archivos de la clase