[R] Efficient testing for +ve definiteness

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Jul 14 09:16:31 CEST 2005


On Wed, 13 Jul 2005, Makram Talih wrote:

> Dear R-users,
>
> Is there a preferred method for testing whether a real symmetric matrix is
> positive definite? [modulo machine rounding errors.]
>
> The obvious way of computing eigenvalues via "E <- eigen(A, symmetric=T,
> only.values=T)$values" and returning the result of "!any(E <= 0)" seems
> less efficient than going through the LU decomposition invoked in
> "determinant.matrix(A)" and checking the sign and (log) modulus of the
> determinant.
>
> I suppose this has to do with the underlying C routines. Any thoughts or
> anecdotes?


It has to do with what exactly you want to test.  Knowing the determinant 
does not tell you if the matrix is close to non-positive definite or not.
For numerical work, a comparison of the smallest eigenvalue to the largest 
is usually the most useful indication of possible problems in 
computations.  An alternative is to try a Choleski decomposition, which 
may be faster but is less informative.

Given how fast eigenvalues can be computed by current algorithms (and note 
the comments in ?eigen) I would suggest not worrying about speed until you 
need to (probably never).

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list