Bir varyans matrisinin köşegen olup olmadığını test etmem gerekiyor. Değilse, Cholesky LDL ayrıştırması yapacağım. Ama en güvenilir ve en hızlı yolun matris diyagonal olup olmadığını merak ediyordum? Fortran kullanıyorum.Matrisin köşegen olup olmadığını nasıl test edebilirim?
Aklıma gelen ilk şey, matrisin tüm unsurlarını toplamalı ve bu toplamdan çapraz elemanlar ayırmaktır. Cevap 0 ise matris diyagonaldir. Daha iyi bir fikir var mı?
Fortranda yılındaBen Onlar sıfıra yakın ise sadece eşitsizlik için bir kayan nokta sayısı eğilimli karşılaştırarak (bütün çapraz kapatma elemanları ve testi çapraz çok daha iyi olurdu
!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
olur: Eğer 'LDL ayrışma LDL değil yani. ;-) – Stobor
Ayrıca, basit bir karşı örnek: [[1, -1], [1, 1]] testinizi geçirir. – Stobor
Ayrıca: LAPACK LDL 'decomp: http://www.netlib.org/lapack/single/ssptrf.f LAPACK Cholesky LL' decomp: http://www.netlib.org/lapack/single/spotrf.f – Stobor