Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Condition number of a matrix is 1 but determinant is almost 0

  1. Aug 11, 2011 #1

    I want to calculate the conditioning of a matrix, therefore I use the cond() commando in Matlab. A problem with a low condition number is said to be well-conditioned, while a problem with a high condition number is said to be ill-conditioned.

    If I calculate the condition number of the matrix:

    -0.0053 -0.0031
    0.0031 -0.0053

    the condition number is equal to 1. This means that the matrix is well-conditioned. However if I calculate the determinant of this matrix with the command det() the result is 3.7700e-005. Thus almost zero what means that the matrix is almost singular, thus ill-conditioned. Why is the condition number 1 while the matrix is ill-conditioned?

  2. jcsd
  3. Aug 11, 2011 #2


    User Avatar
    Science Advisor

    Well not really, not in relation to the size of the elements in the matrix. If you scale the elements in a 2x2 matrix by some factor then the determinant scales by that factor squared (that factor cubed for a 3x3 matrix and so on).

    Your matrix elements are all down around 1E-3 so you have to expect the determinant to be down around 1E-6, even if the matrix is well conditioned.
  4. Aug 11, 2011 #3


    User Avatar
    Science Advisor

    Further, conditioning is not just about the numbers being small. Did you know that the double precision FP used by matlab (and most other scientific software these days) can handle numbers bigger than 1E300 and smaller than 1E-300.

    So strictly speaking it's not really small numbers that cause the problem, it's more specifically where you have certain combinations of really small numbers and more normal sized numbers together in a calculation, and particularly where you have the difference of numbers that are nearly the same, for example 2.0 and 2.0000000000001. This is the type of situation where you get conditioning errors, not from small numbers alone.

    Try for example A=[1, 2; 2, 4.0000001] and see what cond(A) tells you. You'll find det(A) is not all that different to that of your original matrix, but you'll find cond(A) is quite different.
    Last edited: Aug 11, 2011
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook