Examine why the determinant is not an accurate
measure of singularity.

Create a 10-by-10 matrix by multiplying an identity matrix, eye(10),
by a small number.

A = eye(10)*0.0001;

The matrix A has very small entries along
the main diagonal. However, A is not singular,
because it is a multiple of the identity matrix.

Calculate the determinant of A.

d = det(A)

d =
1.0000e-40

The determinant is extremely small. A tolerance test of the
form abs(det(A)) < tol is likely to flag this
matrix as singular. Although the determinant of the matrix is close
to zero, A is actually not ill conditioned. Therefore, A is
not close to being singular. The determinant of a matrix can be arbitrarily
close to zero without conveying information about singularity.

To investigate if A is singular, use either
the cond or rcond functions.

Calculate the condition number of A.

c = cond(A)

c =
1

The result confirms that A is not ill conditioned.

Examine how to calculate the determinant of
the matrix inverse A^(-1), for an ill-conditioned
matrix A, without explicitly calculating A^(-1).

Create a 10-by-10 Hilbert matrix, A.

A = hilb(10);

Find the condition number of A.

c = cond(A)

c =
1.6025e+13

The large condition number suggests that A is
close to being singular, so calculating inv(A) might
produce inaccurate results. Therefore, the inverse determinant calculation det(inv(A)) is
also inaccurate.

Calculate the determinant of the inverse of A by
exploiting the fact that $$\text{det}\left({A}^{-1}\right)\text{\hspace{0.17em}}=\frac{1}{\mathrm{det}(A)}\text{\hspace{0.17em}}\text{\hspace{0.17em}}.$$

d1 = 1/det(A)

d1 =
4.6202e+52

This method avoids computing the inverse of the matrix, A.

Calculate the determinant of the exact inverse of the
Hilbert matrix, A, using invhilb.
Compare the result to d1 to find the relative error
in d1.

d = det(invhilb(10));
relError = abs(d1-d)/abs(d)

relError =
1.1462e-04

The relative error in d1 is reasonably small.
Avoiding the explicit computation of the inverse of A minimizes
it.

For comparison, also calculate the determinant of the
inverse of A by explicitly calculating the inverse.
Compare the result to d to see the relative error.

d2 = det(inv(A));
relError2 = abs(d2-d)/abs(d)

relError2 =
1.2427e+08

The relative error in the calculation of d2 is
many orders of magnitude larger than that of d1.

Examine a matrix that is exactly singular,
but which has a large nonzero determinant. In theory, the determinant
of any singular matrix is zero, but because of the nature of floating-point
computation, this ideal is not always achievable.

Create a 13-by-13 diagonally dominant singular matrix, A.

A = diag([24 46 64 78 88 94 96 94 88 78 64 46 24]);
S = diag([-13 -24 -33 -40 -45 -48 -49 -48 -45 -40 -33 -24],1);
A = A + S + rot90(S,2)

A is singular because the rows are linearly
dependent. For instance, sum(A) produces a vector
of zeros.

Calculate the determinant of A.

d = det(A)

d =
1.059686712222177e+05

The determinant of A is quite large despite
the fact that A is singular. In fact, the determinant
of A should be exactly zero! The inaccuracy of d is
due to an aggregation of round-off errors in the MATLAB^{®} implementation
of the LU decomposition, which det uses to calculate
the determinant. This result demonstrates a few important aspects
of calculating numeric determinants. See the Limitations section for more details.

Input matrix, specified as a square numeric matrix.

Data Types: single | double Complex Number Support: Yes

Limitations

Avoid using det to examine if a matrix is
singular because of the following limitations. Use cond or rcond instead.

Limitation

Result

The magnitude of the determinant is typically unrelated
to the condition number of a matrix.

The determinant of a matrix can be arbitrarily large
or small without changing the condition number.

det uses the LU decomposition to calculate
the determinant, which is susceptible to floating-point round-off
errors.

The determinant calculation is sometimes numerically
unstable. For example, det can produce a large-magnitude
determinant for a singular matrix, even though it should have a magnitude
of 0.