Necesito comprobar si una matriz de varianza es diagonal. Si no, haré la descomposición de Cholesky LDL. Pero me preguntaba cuál sería la forma más confiable y más rápida de probar es la matriz diagonal. Estoy usando Fortran.¿Cómo probar si la matriz es diagonal?
Lo primero que me viene a la mente es tomar suma de todos los elementos de la matriz y restar elementos diagonales de esa suma. Si la respuesta es 0, la matriz es diagonal. Alguna mejor idea?
En Fortran Voy a escribir
!A is my matrix
k=0.0d0
do i in 1:n #n is the number of rows/colums
k = k + A(i,i)
end do
if(abs(sum(A)-k) < epsilon(k)*sum(A)) then
#do cholesky LDL, which I have to write myself, haven't found any subroutines for that in Lapack or anywhere else
end if
Sólo que pequeñez: Se refiere a las LDL' descomposición, no LDL. ;-) – Stobor
Además, contraejemplo simple: [[1, -1], [1, 1]] pasa su prueba. – Stobor
También: LAPACK LDL 'decomp: http://www.netlib.org/lapack/single/ssptrf.f LAPACK Cholesky LL' decomp: http://www.netlib.org/lapack/single/spotrf.f – Stobor