如何使用Cholesky分解计算矩阵逆的行列式。我发现直接计算矩阵的行列式不是一个好主意。那么任何人都可以提供一些见解吗?
如果你已经有了乔列斯基分解(A = L * L_t(,那么你只需要
det(A) = det(L) * det(L_t) = sqr(det(L))
L矩阵是下三角形的,因此其行列式是对角元素的乘积。
乔列斯基分解采用O(n^3(运算,L的对角元素的乘积仅为O(n(。高斯消除方法(将 A 转换为三角矩阵(将采用 O(n^3( 并且会遇到可能的数值问题。
最后,det(inv(A(( = 1/det(A(。
det(A) = product(eigenvalues(A)) = product(diagonal(choleskyFactorization(A)))^2
例如,要计算 Matlab/Octave 中矩阵A
的行列式,您可以使用 prod(diag(chol(A)))^2
,这是 Matlab 语法中上述方程的右侧。