[R] Efficient testing for +ve definiteness
Spencer Graves
spencer.graves at pdf.com
Thu Jul 14 19:59:43 CEST 2005
To reinforce Prof. Ripley's comment that, "Knowing the determinant
does not tell you if the matrix is close to non-positive definite", note
that the determinant of the negative of the identity matrix, (-diag(k)),
is (-1)^k; if k is even, the determinant is positive. This silly
example connects to real cases, as for example a 3x3 matrix of rank 1
with eigenvalues (1, -1e-20, -1e-21). The last two eigenvalues are
buried in the noise relative to the largest (under standard double
precision arithmatec).
spencer graves
Prof Brian Ripley wrote:
> 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).
>
--
Spencer Graves, PhD
Senior Development Engineer
PDF Solutions, Inc.
333 West San Carlos Street Suite 700
San Jose, CA 95110, USA
spencer.graves at pdf.com
www.pdf.com <http://www.pdf.com>
Tel: 408-938-4420
Fax: 408-280-7915
More information about the R-help
mailing list