Parece que no hay una función de descomposición de LDL en numpy, pero hay una implementación de la descomposición de Cholesky estrechamente relacionada. [1] [2]
Te dejaré leer sobre eso tú mismo, pero aquí hay una función que implementa la descomposición de LDL:
En [1]: def ldl_decomp (A):
…: importar numpy como np
…: A = matriz de np (A)
…: Si no (AH == A) .todos ():
…: print (“¡A debe ser Hermitiano!”)
…: Devuelve Ninguno, Ninguno
…: si no:
…: S = np.diag (np.diag (A))
…: Sinv = np.diag (1 / np.diag (A))
…: D = matriz np (S.dot (S))
…: Lch = np.linalg.cholesky (A)
…: L = np.matrix (Lch.dot (Sinv))
…: Devuelve L, D
- ¿De qué manera es el capitalismo como un algoritmo?
- ¿Cómo combina ACM ICPC invertir en diversidad y mantener alta la barra de entrada?
- Cómo encontrar la subcadena común más larga de tres o más cadenas usando una matriz de sufijos
- Cómo usar el hash rodante y la búsqueda binaria para encontrar la subcadena común más larga
- Algoritmos: ¿Cómo la combinación de ordenamiento tiene complejidad espacial O (n) para el peor de los casos?
En [2]: importar numpy como np
En [3]: A = matriz np. ([[4,12, -16], [12,37, -43], [- 16, -43,98]])
En [4]: L, D = ldl_decomp (A)
En [5]: L
Fuera [5]:
matriz ([[0.5, 0., 0.],
[1.5, 0.02702703, 0.],
[-2. , 0.13513514, 0.03061224]])
En [6]: D
Fuera [6]:
matriz ([[16, 0, 0],
[0, 1369, 0],
[0, 0, 9604]])
En [7]: L.dot (D) .dot (LH)
Fuera [7]:
matriz ([[4., 12., -16.],
[12., 37., -43.],
[-16., -43., 98.]])
Notas:
- La línea 4 verifica que la matriz A sea hermitiana. Si solo está trabajando con números reales, esto verifica si A es simétrico.
- La línea 8 crea una matriz diagonal S cuyas entradas son la diagonal de A.
- La línea 9 calcula el inverso de S (que es trivial ya que S es diagonal).
- La línea 10 calcula la “D” en la composición de LDL.
- La línea 11 calcula Lch, la matriz triangular inferior en la descomposición de Cholesky. Tenga en cuenta que A = (Lch) (Lch) *, donde * es el conjugado hermitiano (transposición del conjugado).
- La línea 12 calcula la “L” en la descomposición de LDL.
- La función devuelve las matrices L y D de modo que A = LDL *.
Notas al pie
[1] Descomposición de Cholesky – Wikipedia
[2] numpy.linalg.cholesky – NumPy v1.12 Manual