J'ai besoin de tester si une matrice de variance est diagonale. Sinon, je vais faire une décomposition de Cholesky LDL. Mais je me demandais quel serait le moyen le plus fiable et le plus rapide de tester est la diagonale de la matrice? J'utilise Fortran.Comment tester si la matrice est diagonale?
La première chose qui me vient à l'esprit est de prendre la somme de tous les éléments de la matrice, et de soustraire les éléments diagonaux de cette somme. Si la réponse est 0, la matrice est diagonale. De meilleures idées?
Dans Fortran Je vais écrire
!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
Juste pour pinailler vous dire LDL » La décomposition, non LDL. ;-) – Stobor
De même, un contre-exemple simple: [[1, -1], [1, 1]] réussit votre test. – Stobor
Aussi: LAPACK LDL 'decomp: http://www.netlib.org/lapack/single/ssptrf.f LAPACK Cholesky LL' decomp: http://www.netlib.org/lapack/single/spotrf.f – Stobor