See the following Matlab test script, which computes the determinants of arbitrary square matrices (comparisons to the built-in Matlab function are also included):
nMin = 2; % Start with 2-by-2 matrices nMax = 50; % Quit with 50-by-50 matrices nTests = 10000; detsOfL = NaN*zeros(nTests, nMax - nMin + 1); detsOfA = NaN*zeros(nTests, nMax - nMin + 1); disp(' '); for n = nMin:nMax tStart = tic; for j = 1:nTests A = randn(n, n); detA1 = det(A); % Matlab built-in function if n == 1 detsOfL(j, 1) = 1; detsOfA(j, 1) = A; continue; % Trivial case => Quick return end [L, U, P] = lu(A); PtL = P'*L; realEigenvaluesOfPtL = real(eig(PtL)); if min(prod(realEigenvaluesOfPtL)) < 0 % det(L) is always +1 or -1 detL = -1; else detL = 1; end detU = prod(diag(U)); detA2 = detL * detU; % Determinant of A using LU decomposition if detA1 ~= detA2 error(['Determinant computation failed at n = ' num2str(n) ', j = ' num2str(j)]); end detsOfL(j, n - nMin + 1) = detL; detsOfA(j, n - nMin + 1) = detA2; end tElapsed = toc(tStart); disp(sprintf('Determinant computation was successful for n = %d!! Elapsed time was %.3f seconds', n, tElapsed)); end disp(' ');
source share