tutoriales.com

Factorización LU: Descomponiendo Matrices para Resolver Sistemas Lineales Eficientemente

Este tutorial te guiará a través de la factorización LU, una técnica fundamental del álgebra lineal para descomponer matrices en una matriz triangular inferior (L) y una superior (U). Descubrirás cómo aplicar este método para resolver sistemas de ecuaciones lineales de forma más rápida y estable, optimizando el rendimiento computacional en diversas aplicaciones.

Intermedio15 min de lectura13 views
Reportar error

🚀 Introducción a la Factorización LU

En el fascinante mundo del álgebra lineal, a menudo nos enfrentamos a la tarea de resolver sistemas de ecuaciones lineales. Si bien existen métodos directos como la eliminación gaussiana, cuando necesitamos resolver el mismo sistema con diferentes vectores de términos independientes, o cuando trabajamos con matrices muy grandes, estos métodos pueden volverse ineficientes. Aquí es donde la factorización LU brilla con luz propia.

La factorización LU es una técnica poderosa que descompone una matriz cuadrada A en el producto de dos matrices triangulares: una matriz triangular inferior L (Lower) y una matriz triangular superior U (Upper). Es decir, A = LU.

¿Por qué es importante la Factorización LU? 🤔

La relevancia de la factorización LU radica en varias aplicaciones clave:

  • Resolución eficiente de sistemas lineales: Una vez que hemos descompuesto A en L y U, resolver Ax = b se convierte en resolver Ly = b (para y) y luego Ux = y (para x). Ambos subsistemas son mucho más fáciles de resolver debido a la naturaleza triangular de L y U.
  • Cálculo de la inversa: La inversa de A se puede calcular resolviendo A X = I, donde I es la matriz identidad. Usando LU, esto se reduce a resolver varios sistemas triangulares.
  • Cálculo del determinante: El determinante de A es simplemente el producto de los elementos diagonales de L y U (det(A) = det(L) * det(U)). Esto simplifica enormemente el cálculo, especialmente para matrices grandes.
  • Estabilidad numérica: En algunos contextos, la factorización LU es más estable numéricamente que otros métodos, especialmente cuando se combina con pivoteo.
  • Aplicaciones en ingeniería y ciencia: Es un pilar en simulaciones numéricas, análisis estructural, modelado de sistemas dinámicos y algoritmos de optimización.
💡 **Consejo:** La factorización LU es especialmente útil cuando necesitas resolver un sistema `Ax=b` múltiples veces con la misma matriz `A` pero diferentes vectores `b`. El costo computacional de la factorización se paga una sola vez.

📖 Fundamentos Teóricos: ¿Qué es L y U?

Antes de sumergirnos en el cómo, entendamos la naturaleza de las matrices L y U.

Matriz Triangular Superior (U) 🔺

Una matriz triangular superior es aquella donde todos los elementos debajo de la diagonal principal son cero. La forma de esta matriz es la que obtenemos al final del proceso de eliminación gaussiana.

Ejemplo de una matriz U de 3x3:

⎡ u₁₁ u₁₂ u₁₃ ⎤
⎢  0  u₂₂ u₂₃ ⎥
⎣  0   0  u₃₃ ⎦

Matriz Triangular Inferior (L) 🔻

Una matriz triangular inferior es aquella donde todos los elementos encima de la diagonal principal son cero. Los elementos diagonales de L son generalmente unos (1), lo que se conoce como una factorización Doolittle. Si los elementos diagonales de U son unos, se llama factorización Crout. En este tutorial nos centraremos en la variante Doolittle.

Ejemplo de una matriz L de 3x3 con diagonal de unos:

⎡ 1  0  0 ⎤
⎢ l₂₁ 1  0 ⎥
⎣ l₃₁ l₃₂ 1 ⎦

Cuando multiplicamos L por U, obtenemos la matriz original A.

⎡ 1  0  0 ⎤   ⎡ u₁₁ u₁₂ u₁₃ ⎤   ⎡ a₁₁ a₁₂ a₁₃ ⎤
⎢ l₂₁ 1  0 ⎥ * ⎢  0  u₂₂ u₂₃ ⎥ = ⎢ a₂₁ a₂₂ a₂₃ ⎥
⎣ l₃₁ l₃₂ 1 ⎦   ⎣  0   0  u₃₃ ⎦   ⎣ a₃₁ a₃₂ a₃₃ ⎦

El Proceso General de Factorización LU 🛠️

La idea central detrás de la factorización LU es realizar la eliminación gaussiana en la matriz A para transformarla en una matriz U (triangular superior). Los multiplicadores utilizados en cada paso de la eliminación son almacenados para construir la matriz L.

Aquí tienes un esquema visual de la transformación:

Matriz A Eliminación Gaussiana Matriz U Factores de Eliminación Matriz L L x U

👣 Paso a Paso: Realizando la Factorización LU (Sin Pivoteo)

Vamos a desglosar el proceso con un ejemplo concreto. Consideremos la siguiente matriz A:

A = ⎡ 2  1  1 ⎤
    ⎢ 4 -6  0 ⎥
    ⎣-2  7  2 ⎦

Fase 1: Transformar A en U ⬆️

El objetivo es hacer ceros debajo de la diagonal principal, trabajando columna por columna, de izquierda a derecha y de arriba abajo, como en la eliminación gaussiana.

Paso 1.1: Eliminar elementos en la primera columna (debajo de a₁₁)

Para hacer a₂₁ cero, multiplicamos la primera fila por m₂₁ = a₂₁ / a₁₁ = 4 / 2 = 2 y la restamos a la segunda fila.

F₂' = F₂ - 2 * F₁

Para hacer a₃₁ cero, multiplicamos la primera fila por m₃₁ = a₃₁ / a₁₁ = -2 / 2 = -1 y la restamos a la tercera fila.

F₃' = F₃ - (-1) * F₁ = F₃ + F₁

📌 **Nota:** Estos multiplicadores (`m₂₁ = 2`, `m₃₁ = -1`) serán los elementos `l₂₁` y `l₃₁` de nuestra matriz `L`.

Matriz A después del Paso 1.1:

A' = ⎡ 2   1   1  ⎤
     ⎢ 0  -8  -2  ⎥  (F₂ - 2*F₁ = [4-4, -6-2, 0-2] = [0, -8, -2])
     ⎣ 0   8   3  ⎦  (F₃ + 1*F₁ = [-2+2, 7+1, 2+1] = [0, 8, 3])

Paso 1.2: Eliminar elementos en la segunda columna (debajo de a₂₂)

Ahora, trabajamos con la submatriz resultante y nos enfocamos en a₃₂. Queremos hacer cero el elemento a₃₂ de la matriz A' (que ahora es 8).

Multiplicamos la segunda fila (de A') por m₃₂ = a₃₂ / a₂₂ = 8 / -8 = -1 y la restamos a la tercera fila.

F₃'' = F₃' - (-1) * F₂' = F₃' + F₂'

📌 **Nota:** Este multiplicador (`m₃₂ = -1`) será el elemento `l₃₂` de nuestra matriz `L`.

Matriz A' después del Paso 1.2:

U = ⎡ 2   1   1  ⎤
    ⎢ 0  -8  -2  ⎥
    ⎣ 0   0   1  ⎦  (F₃' + 1*F₂' = [0+0, 8-8, 3-2] = [0, 0, 1])

¡Felicidades! Hemos obtenido nuestra matriz U (triangular superior).

Fase 2: Construir L ⬇️

La matriz L se construye con los multiplicadores que usamos en la eliminación gaussiana. Colocamos un 1 en la diagonal principal y los multiplicadores mᵢⱼ en las posiciones (i, j) correspondientes, con signo opuesto al que restamos (es decir, el m original).

Los multiplicadores fueron:

  • m₂₁ = 2
  • m₃₁ = -1
  • m₃₂ = -1

Así, L será:

L = ⎡ 1   0   0 ⎤
    ⎢ m₂₁ 1   0 ⎥  =  ⎡ 1   0   0 ⎤
    ⎣ m₃₁ m₃₂ 1 ⎦     ⎢ 2   1   0 ⎥
                      ⎣-1  -1   1 ⎦

Verificación (Opcional pero Recomendado) ✅

Siempre es una buena idea verificar tu trabajo multiplicando L por U para asegurarte de que obtienes la A original.

L * U = ⎡ 1   0   0 ⎤   ⎡ 2   1   1 ⎤
        ⎢ 2   1   0 ⎥ * ⎢ 0  -8  -2 ⎥
        ⎣-1  -1   1 ⎦   ⎣ 0   0   1 ⎦

      = ⎡ (1*2)+(0*0)+(0*0)   (1*1)+(0*-8)+(0*0)   (1*1)+(0*-2)+(0*1) ⎤
        ⎢ (2*2)+(1*0)+(0*0)   (2*1)+(1*-8)+(0*0)   (2*1)+(1*-2)+(0*1) ⎥
        ⎣ (-1*2)+(-1*0)+(1*0) (-1*1)+(-1*-8)+(1*0) (-1*1)+(-1*-2)+(1*1) ⎦

      = ⎡ 2    1    1 ⎤
        ⎢ 4   -6    0 ⎥
        ⎣ -2    7    2 ⎦ = A

¡Perfecto! Hemos factorizado A correctamente en L y U.


💡 Resolución de Sistemas Lineales con LU

Una vez que tenemos A = LU, resolver el sistema Ax = b se convierte en un proceso de dos pasos, mucho más sencillo.

Tenemos LUx = b. Podemos definir un vector intermedio y tal que Ux = y.

Entonces, el sistema Ax = b se transforma en dos sistemas triangulares:

  1. Ly = b: Resolvemos para y usando sustitución hacia adelante.
  2. Ux = y: Resolvemos para x usando sustitución hacia atrás.

Veamos cómo con el mismo ejemplo. Supongamos que queremos resolver Ax = b con:

A = ⎡ 2  1  1 ⎤
    ⎢ 4 -6  0 ⎥
    ⎣-2  7  2 ⎦

b = ⎡ 5 ⎤
    ⎢-2 ⎥
    ⎣ 9 ⎦

Ya tenemos:

L = ⎡ 1   0   0 ⎤
    ⎢ 2   1   0 ⎥
    ⎣-1  -1   1 ⎦

U = ⎡ 2   1   1 ⎤
    ⎢ 0  -8  -2 ⎥
    ⎣ 0   0   1 ⎦

Paso 1: Resolver Ly = b (Sustitución Hacia Adelante) ➡️

⎡ 1   0   0 ⎤   ⎡ y₁ ⎤   ⎡  5 ⎤
⎢ 2   1   0 ⎥ * ⎢ y₂ ⎥ = ⎢ -2 ⎥
⎣-1  -1   1 ⎦   ⎣ y₃ ⎦   ⎣  9 ⎦

De la primera ecuación: 1*y₁ + 0*y₂ + 0*y₃ = 5 => y₁ = 5

De la segunda ecuación: 2*y₁ + 1*y₂ + 0*y₃ = -2 2*(5) + y₂ = -2 10 + y₂ = -2 => y₂ = -12

De la tercera ecuación: -1*y₁ + -1*y₂ + 1*y₃ = 9 -1*(5) + -1*(-12) + y₃ = 9 -5 + 12 + y₃ = 9 7 + y₃ = 9 => y₃ = 2

Así, nuestro vector y es:

y = ⎡  5 ⎤
    ⎢ -12 ⎥
    ⎣  2 ⎦

Paso 2: Resolver Ux = y (Sustitución Hacia Atrás) ⬅️

⎡ 2   1   1 ⎤   ⎡ x₁ ⎤   ⎡  5 ⎤
⎢ 0  -8  -2 ⎥ * ⎢ x₂ ⎥ = ⎢ -12 ⎥
⎣ 0   0   1 ⎦   ⎣ x₃ ⎦   ⎣  2 ⎦

De la tercera ecuación: 0*x₁ + 0*x₂ + 1*x₃ = 2 => x₃ = 2

De la segunda ecuación: 0*x₁ + -8*x₂ + -2*x₃ = -12 -8*x₂ - 2*(2) = -12 -8*x₂ - 4 = -12 -8*x₂ = -8 => x₂ = 1

De la primera ecuación: 2*x₁ + 1*x₂ + 1*x₃ = 5 2*x₁ + 1*(1) + 1*(2) = 5 2*x₁ + 1 + 2 = 5 2*x₁ + 3 = 5 2*x₁ = 2 => x₁ = 1

¡Y listo! El vector solución x es:

x = ⎡ 1 ⎤
    ⎢ 1 ⎥
    ⎣ 2 ⎦
🔥 **Importante:** La eficiencia de la resolución `Ly=b` y `Ux=y` radica en que cada paso solo requiere una división (o multiplicación por la inversa) y sustitución, sin necesidad de realizar eliminaciones complejas.

🚧 Pivoteo: La Necesidad de la Permutación (PLU)

El método de factorización LU que hemos descrito funciona bien siempre y cuando no encontremos un cero en la diagonal durante el proceso de eliminación. Sin embargo, en la práctica, esto es una limitación importante. ¿Qué pasa si a₁₁ es cero? ¿O si se vuelve cero en un paso intermedio?

La solución es el pivoteo. El pivoteo consiste en intercambiar filas para asegurar que el elemento pivote (el elemento diagonal que estamos usando para eliminar) no sea cero, o sea lo suficientemente grande para minimizar errores numéricos.

Cuando realizamos pivoteo, la factorización se convierte en PLU, donde P es una matriz de permutación.

PA = LU

Una matriz de permutación P se obtiene a partir de la matriz identidad realizando las mismas operaciones de intercambio de filas que se hacen en A.

¿Cómo afecta el pivoteo al proceso? 🔄

  1. Antes de cada paso de eliminación, examinamos los elementos debajo del pivote actual. Seleccionamos la fila con el mayor valor absoluto en la columna del pivote y la intercambiamos con la fila actual.
  2. Registramos estos intercambios en la matriz de permutación P. Si originalmente P es la identidad, cada vez que intercambiamos Fᵢ con Fⱼ en A, hacemos el mismo intercambio en P.
  3. Los multiplicadores para L se calculan después del intercambio.

El sistema a resolver pasa a ser PAx = Pb. Como PA = LU, tenemos LUx = Pb.

Esto significa que, una vez que tenemos L y U de PA, primero calculamos b' = Pb (permutamos el vector b de la misma manera que las filas de A se permutaron) y luego resolvemos Ly = b' y Ux = y.

⚠️ **Advertencia:** Olvidar aplicar la permutación al vector `b` es un error común que lleva a soluciones incorrectas cuando se utiliza PLU.
Ejemplo breve de pivoteo parcial Considera la matriz:
A = ⎡ 0  1 ⎤
    ⎣ 2  3 ⎦

Si intentamos factorizar LU directamente, a₁₁ = 0, lo cual nos impide calcular m₂₁ = a₂₁ / a₁₁. Necesitamos pivoteo.

Paso 1: Intercambiar filas. Intercambiamos F₁ y F₂ para que el pivote a₁₁ no sea cero.

A_permutada = ⎡ 2 3 ⎤ ⎣ 0 1 ⎦

La matriz de permutación P que realiza este intercambio es:

P = ⎡ 0  1 ⎤
    ⎣ 1  0 ⎦

Ahora P A = ⎡ 2 3 ⎤. Esta matriz ya es triangular superior, así que U = ⎡ 2 3 ⎤. L será la identidad, L = ⎡ 1 0 ⎤. ⎣ 0 1 ⎦ ⎣ 0 1 ⎦

Verificación: P A = ⎡ 0 1 ⎤ ⎡ 0 1 ⎤ = ⎡ 2 3 ⎤ ⎣ 1 0 ⎦ ⎣ 2 3 ⎦ ⎣ 0 1 ⎦

L U = ⎡ 1 0 ⎤ ⎡ 2 3 ⎤ = ⎡ 2 3 ⎤ ⎣ 0 1 ⎦ ⎣ 0 1 ⎦ ⎣ 0 1 ⎦

Por lo tanto, PA = LU se cumple. Si tuviéramos un b, trabajaríamos con Pb.


📊 Comparativa de Rendimiento y Complejidad

Entender la complejidad computacional es crucial para apreciar la Factorización LU en la práctica.

La complejidad se mide generalmente en el número de operaciones de punto flotante (FLOPS).

OperaciónCosto (para una matriz NxN)Notas
---------
Factorización LU (A -> L, U)(2/3)N³ FLOPSEsta es la parte más costosa. Solo se realiza una vez para una matriz A dada. Incluye pivoteo, que añade un costo menor (O(N²)) pero mejora la estabilidad.
Sustitución Hacia Adelante (Ly = b) FLOPSMuy eficiente, ya que L es triangular.
---------
Sustitución Hacia Atrás (Ux = y) FLOPSIgualmente eficiente, ya que U es triangular.
Eliminación Gaussiana Directa (Ax=b)(2/3)N³ FLOPSCada vez que cambia b, se debe repetir el proceso completo.
---------
Inversa de Matriz (A⁻¹b)2N³ FLOPSCalcular A⁻¹ es mucho más costoso (2N³) y menos estable que LU. Luego, A⁻¹b añade 2N³ para el producto matriz-vector.
Coste de Factorización LU: (2/3)N³
Coste de Resolución Ly=b y Ux=y: 2N²

Como puedes ver en la tabla, si necesitas resolver Ax=b múltiples veces con la misma A pero diferentes b, la factorización LU es drásticamente más eficiente que recalcular la eliminación gaussiana cada vez o, peor aún, calcular la inversa de la matriz.

💡 **Consejo:** Para `k` sistemas con la misma `A`, el costo de LU es `(2/3)N³ + k * (2N²)`, mientras que con eliminación gaussiana directa sería `k * (2/3)N³`. Para `k > 1`, LU es superior.

🎯 Aplicaciones Prácticas y Más Allá

La factorización LU no es solo un ejercicio académico; es una herramienta de caballo de batalla en numerosos campos.

  • Ingeniería Civil y Estructural: Análisis de cargas en estructuras, resolución de sistemas de ecuaciones que modelan redes de tuberías o circuitos eléctricos.
  • Economía y Finanzas: Modelado de sistemas económicos, cálculo de riesgos, optimización de carteras.
  • Ciencia de Datos y Machine Learning: Es la base de algoritmos como los mínimos cuadrados lineales para regresión, donde se resuelve (AᵀA)x = Aᵀb. La factorización Cholesky (una variante para matrices simétricas definidas positivas) se usa en la optimización de redes neuronales y en métodos de muestreo Monte Carlo.
  • Gráficos por Computadora: Transformaciones de modelado, proyección y vista, aunque a menudo se usan métodos específicos para estas tareas, la base es la manipulación matricial.
  • Simulaciones Numéricas: Resolución de ecuaciones diferenciales parciales (PDEs) que se discretizan en grandes sistemas lineales.

Variantes de la Factorización LU

Además de la factorización PLU (con pivoteo), existen otras variantes especializadas:

  • Factorización de Doolittle: L tiene unos en la diagonal. (La que hemos visto).
  • Factorización de Crout: U tiene unos en la diagonal.
  • Factorización de Cholesky: Para matrices simétricas definidas positivas A = LLᵀ. Es muy eficiente y numéricamente estable para este tipo de matrices. Se usa mucho en estadística y optimización.
Orígenes: Desarrollada por Tadeusz Banachiewicz en los años 30.
Popularización: Adquirió mayor relevancia con el auge de la computación digital.
Uso Actual: Fundamental en librerías de álgebra lineal como LAPACK y NumPy.

🔍 Ejercicio Práctico

Para consolidar tu aprendizaje, intenta factorizar la siguiente matriz A en L y U y luego resolver el sistema Ax = b.

A = ⎡ 1  -1   2 ⎤
    ⎢ 3   0   1 ⎥
    ⎣ 1   0  -1 ⎦

b = ⎡ 0 ⎤
    ⎢ 5 ⎥
    ⎣ 0 ⎦
Haz clic aquí para ver la solución

Factorización LU:

Paso 1: Eliminar elementos en la primera columna.

m₂₁ = 3 / 1 = 3 m₃₁ = 1 / 1 = 1

F₂' = F₂ - 3*F₁ F₃' = F₃ - 1*F₁

⎡ 1  -1   2 ⎤
⎢ 0   3  -5 ⎥   (F₂ - 3*F₁ = [3-3, 0-(-3), 1-6] = [0, 3, -5])
⎣ 0   1  -3 ⎦   (F₃ - 1*F₁ = [1-1, 0-(-1), -1-2] = [0, 1, -3])

Paso 2: Eliminar elementos en la segunda columna.

m₃₂ = 1 / 3

F₃'' = F₃' - (1/3)*F₂'

U = ⎡ 1  -1    2   ⎤
    ⎢ 0   3   -5   ⎥
    ⎣ 0   0  -4/3 ⎦   (F₃' - (1/3)*F₂' = [0-0, 1-1, -3-(-5/3)] = [0, 0, -9/3 + 5/3] = [0, 0, -4/3])

Construir L:

Los multiplicadores fueron m₂₁ = 3, m₃₁ = 1, m₃₂ = 1/3.

L = ⎡ 1    0    0 ⎤
    ⎢ 3    1    0 ⎥
    ⎣ 1  1/3    1 ⎦

Resolución del sistema Ax = b

Paso 1: Resolver Ly = b

⎡ 1    0    0 ⎤   ⎡ y₁ ⎤   ⎡ 0 ⎤
⎢ 3    1    0 ⎥ * ⎢ y₂ ⎥ = ⎢ 5 ⎥
⎣ 1  1/3    1 ⎦   ⎣ y₃ ⎦   ⎣ 0 ⎦

y₁ = 0 3*y₁ + y₂ = 5 => 3*(0) + y₂ = 5 => y₂ = 5 1*y₁ + (1/3)*y₂ + y₃ = 0 => 1*(0) + (1/3)*(5) + y₃ = 0 => 5/3 + y₃ = 0 => y₃ = -5/3

Así, y = [0, 5, -5/3]ᵀ

Paso 2: Resolver Ux = y

⎡ 1  -1    2   ⎤   ⎡ x₁ ⎤   ⎡   0   ⎤
⎢ 0   3   -5   ⎥ * ⎢ x₂ ⎥ = ⎢   5   ⎥
⎣ 0   0  -4/3 ⎦   ⎣ x₃ ⎦   ⎣ -5/3  ⎦

-4/3 * x₃ = -5/3 => x₃ = 5/4 3*x₂ - 5*x₃ = 5 => 3*x₂ - 5*(5/4) = 5 => 3*x₂ - 25/4 = 5 => 3*x₂ = 5 + 25/4 = 20/4 + 25/4 = 45/4 => x₂ = 15/4 1*x₁ - 1*x₂ + 2*x₃ = 0 => x₁ - 15/4 + 2*(5/4) = 0 => x₁ - 15/4 + 10/4 = 0 => x₁ - 5/4 = 0 => x₁ = 5/4

Así, x = [5/4, 15/4, 5/4]ᵀ


conclusión ✨

La factorización LU es una técnica fundamental en el álgebra lineal numérica que proporciona una forma eficiente y estructurada de resolver sistemas de ecuaciones lineales. Su capacidad para descomponer una matriz en componentes triangulares simplifica enormemente los cálculos posteriores, lo que la hace indispensable en algoritmos complejos y en diversas disciplinas científicas y de ingeniería.

Dominar la factorización LU no solo te da una herramienta poderosa para resolver problemas matemáticos, sino que también profundiza tu comprensión de la estructura matricial y la eficiencia algorítmica. ¡Es un paso esencial en tu viaje por el álgebra lineal!

Tutoriales relacionados

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!