1. 11

  2. 3

    Computing the inverse is fine for most ‘normal cases’ (i.e. the matrix is square, not super-large and actually invertible), but when you start working with matrices that are either big or have a high condition number (read: they are almost singular), you will have to use other methods. If you want to compute the preimage of a lot of vectors, the best approach is still to just compute the inverse (I think John Cook mentioned this as well in his article).

    If you want to compute A^{-1}x for a huge matrix A, you might want to use conjugate gradient (for symmetric positive definite matrices), BiCGSTAB, and/or GMRES. All work great for sparse matrices.

    If you want to compute A^{-1}x for a nonsquare matrix, you can solve the normal equations A^T A x = A^T x.

    If you want to compute A^{-1}x for a singular or almost-singular matrix A, you can compute the generalized or Moore-Penrose inverse (using, for example, the singular value decomposition).

    1. 2

      I happen to have had a situation recently where inversion was the correct call for two strange reasons:

      • We needed to store the inverted matrix and use it for later transformations
      • If the matrix is too close to singular to invert safely, then we want to know immediately

      That said, this practice of avoiding inversion is a good gateway to responsible matrix-manipulation techniques, and I like the writeup.