[R] spectral decomposition for near-singular pd matrices

Prasenjit Kapat kapatp at gmail.com
Thu Jul 17 02:56:43 CEST 2008

Moshe Olshansky <m_olshansky <at> yahoo.com> writes:

> How large is your matrix?

Right now I am looking at sizes between 30x30 to 150x150, though it will 
increase in future.

> Are the very small eigenvalues well separated?
> If your matrix is not very small and the lower eigenvalues are clustered, 
this may be a really hard problem!

Here are the deciles of the eigenvalues (using eigen()) from a typical random 
generation (30x30):
          Min          10th         20th         30th         40th
-1.132398e-16 -6.132983e-17 3.262002e-18 1.972702e-17 8.429709e-17
         50th         60th          70th         80th      90th     Max
 2.065645e-13  1.624553e-09 4.730935e-06   0.00443353 0.9171549 16.5156

I am guessing they are *not* "well-separated." 

> You may need a special purpose algorithm and/or higher precision arithmetic.
> If your matrix is A and there exists a sequence of matrices A1,A2,...An = A 
such that A1 is "good", A2 is a bit
> worse (and is not very different from A1), etc., you may be able to compute 
the eigensystem for A1 and then
> track it down to A2, A3,...,An. I have worked on such problems some 15 years 
ago but I believe that by now
> there should be packages doing this (I do not know whether they exist in R).

I will have to think on the possibility of such a product-decomposition. But 
even if it were possible, it would be an infinite product (just thinking out 

Thanks again,

PS: Kindly CC me when replying.

More information about the R-help mailing list