Re: [R] Efficient testing for +ve definiteness

From: Prof Brian Ripley <>
Date: Thu 14 Jul 2005 - 17:16:31 EST

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,        
Professor of Applied Statistics,
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________ mailing list
PLEASE do read the posting guide!
Received on Thu Jul 14 17:20:00 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:33:39 EST