1

I am solving a linear system of equations with a condition number of 10^18 with matlab with double precision. As I know as a rule of thumb every power of 10 in condition number reduces one significant digit of the answer and hence with double precision I have no significant digit remained. However, the solution seems correct, since it is the answer to an elasticity Finite element problem which I know its answer. How is it possible? does matlab "A\b" uses special preconditioners?

  • 2
    From wikipedia: "[...] the condition number does not give the exact value of the maximum inaccuracy that may occur in the algorithm. It generally just bounds it with an estimate (whose computed value depends on the choice of the norm to measure the inaccuracy)." Hence, a large condition number is no guarantee for a bad solution. You can use the spparms('spumoni',2) command to get more information about what algorithm backslash invokes for your particular matrix. – ekkilop Aug 06 '16 at 14:44
  • 1
    Have you looked at the spectrum of singular values of your matrix? Is it simply rank deficient (a reasonable range of singular values with a sudden drop-off to effectively 0 singular values) or is there exponential decay in the singular values? Have you checked the discrete Picard condition? – Brian Borchers Aug 06 '16 at 14:52

1 Answers1

1

The standard condition number can be arbitrarly bad estimator of sensivity of solution to numerical errors, especially if matrices $A$ or $A^{-1}$ are badly scaled.

The standard condition number should not be used to test accuracy of solution to linear equations using the LU method (as in Matlab). Lapack does not use this, but uses much more accurate (and fast) componentwise error estimator similar to the Skeel condition number: $$cond(A,x) = \frac{\||A^{-1}||A||x|\|_{\infty}}{\|x\|_{\infty}}$$ where $x$ is the true solution to $Ax = b$.

Problems with this condition number are well explained in Higham, Nicholas J. Accuracy and stability of numerical algorithms. Siam, 2002. This books also provides good alternatives, unfortunately unavailable in Matlab standard library.

Pawel Kowal
  • 2,252