Muszę sprawdzić, czy jedna macierz wariancji jest przekątna. Jeśli nie, zrobię Cholesky LDL dekompozycji. Ale zastanawiałem się, który byłby najbardziej wiarygodny i najszybszy sposób na sprawdzenie przekątnej macierzy? Używam Fortran.Jak sprawdzić, czy macierz jest przekątna?
Pierwszą rzeczą, która przychodzi mi do głowy, to zsumowanie wszystkich elementów macierzy i odjęcie elementów diagonalnych od tej sumy. Jeśli odpowiedź wynosi 0, macierz jest przekątna. Jakieś lepsze pomysły?
W Fortran będę pisać
!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
Wystarczy przyczepić: znaczy LDL”rozkładowi, nie LDL. ;-) – Stobor
Również prosty kontrprzykład: [[1, -1], [1, 1]] przechodzi test. – Stobor
Także: LAPACK LDL 'decomp: http://www.netlib.org/lapack/single/ssptrf.f LAPACK Cholesky LL' decomp: http://www.netlib.org/lapack/single/spotrf.f – Stobor