Pregunta

Estoy tratando de implementar algunas operaciones básicas de álgebra lineal y una de estas operaciones es la inversión de una matriz triangular (superior y / o inferior). ¿Existe un algoritmo fácil y estable para hacer eso?

Gracias.

¿Fue útil?

Solución

Sí, use sustitución posterior . Un algoritmo estándar para invertir una matriz es encontrar su descomposición LU (descomposición en una matriz triangular inferior y una matriz triangular superior), usar la sustitución posterior en las piezas triangulares y luego combinar los resultados para obtener el inverso de la matriz original.

Otros consejos

No lo inviertas si puedes. Es uno de los mandamientos básicos del álgebra lineal numérica.

Es mucho más rápido y numéricamente más estable mantener la matriz L en la memoria y calcular

inv(L)b
con sustitución hacia atrás siempre que necesite hacer algo más con inv (L).

Tenga en cuenta que el algoritmo habitual para invertirlo requiere resolver los sistemas

inv(L)[1 0 0 ...],
inv(L)[0 1 0 ....],
inv(L)[0 0 1 ....]
y así sucesivamente, por lo que verá que es mucho más fácil no invertirlo en absoluto.

Dada una matriz triangular inferior L, la sustitución posterior le permite resolver el sistema L x = b rápidamente para cualquier lado derecho b.

Para invertir L, puede resolver este sistema para los lados derechos e1 = (1,0, ..., 0), e2 = (0,1, ..., 0), ..., es = (0,0, ..., 1) y combina los vectores de solución resultantes en una única matriz (necesariamente triangular inferior).

Si está interesado en una solución de forma cerrada, los elementos diagonales del inverso son los inversos de los elementos diagonales originales, y la fórmula para el resto de los elementos del inverso se vuelve más y más complicada a medida que avanza desde la diagonal.

Si está hablando de reales de precisión única, eche un vistazo al código fuente de las rutinas LAPACK STRTRI y STRTI2 .

Wow, eso es prácticamente la mitad del contenido de un curso de análisis numérico. Los algoritmos estándar lo harán, y hay un montón de código enlatado aquí . La fuente principal para este y la mayoría de los otros problemas habituales de análisis numérico es Recetas numéricas .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top