Ich muss testen, ob eine Varianzmatrix diagonal ist. Wenn nicht, mache ich Cholesky LDL Zerlegung. Aber ich fragte mich, welcher der zuverlässigste und schnellste Weg zum Testen die Matrixdiagonale wäre? Ich benutze Fortran.Wie testen, ob die Matrix diagonal ist?
Das erste, was mir in den Sinn kommt, ist die Summe aller Elemente der Matrix und subtrahieren diagonale Elemente von dieser Summe. Wenn die Antwort 0 ist, ist die Matrix diagonal. Irgendwelche besseren Ideen?
In Fortran werde ich
!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
Nur nitpick: Suchen Sie nach LDL‘Zersetzung, nicht LDL. ;-) – Stobor
Auch einfaches Gegenbeispiel: [[1, -1], [1, 1]] besteht Ihren Test. – Stobor
Auch: LAPACK LDL 'zerlegen: http://www.netlib.org/lapack/single/ssptrf.f LAPACK Cholesky LL' zerlegen: http://www.netlib.org/lapack/single/spotrf.f – Stobor