[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