Tôi cần kiểm tra nếu một ma trận phương sai là đường chéo. Nếu không, tôi sẽ phân tích LDL Cholesky. Nhưng tôi đã tự hỏi đó sẽ là cách đáng tin cậy nhất và nhanh nhất để kiểm tra là ma trận chéo? Tôi đang sử dụng Fortran.Làm thế nào để kiểm tra nếu ma trận là đường chéo?
Điều đầu tiên đến với tâm trí của tôi là lấy tổng của tất cả các phần tử ma trận và trừ các phần tử đường chéo từ tổng đó. Nếu câu trả lời là 0, ma trận là đường chéo. Bất kỳ ý tưởng tốt hơn?
Trong Fortran Tôi sẽ viết
!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
Chỉ cần để nitpick: bạn có nghĩa là LDL' phân hủy, không LDL. ;-) – Stobor
Ngoài ra, ví dụ đơn giản: [[1, -1], [1, 1]] vượt qua bài kiểm tra của bạn. – Stobor
Ngoài ra: LAPACK LDL 'decomp: http://www.netlib.org/lapack/single/ssptrf.f LAPACK Cholesky LL' decomp: http://www.netlib.org/lapack/single/spotrf.f – Stobor