An eigen decomposition problem in programming

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
1 reply · 3K views
Asuralm
Messages
35
Reaction score
0
Hi all:

I have a covariance matrix which is like:

0.00166713 -0.00060678 4.60534e-05
-0.00060678 0.00178576 -0.000244526
4.60534e-05 -0.000244526 0.000772057

And then I want to eigen decompose the matrix to obtain the eigenvector matrix. I tried several methods, one is to use the LaEigSolve in the lapack++ library. This gives me the result:

0.655504 -0.742432 0.138237
-0.743371 -0.60208 0.291375
0.133097 0.293759 0.946568

Then I tried to use svdcmp routine of the Numerical recipe which gives me:

-0.655504 0.742432 0.138237
0.743371 0.60208 0.291375
-0.133097 -0.293759 0.946568

I also tried to use eig() in MATLAB which gives me:

-0.6555 0.7424 0.1383
0.7434 0.6021 0.2914
-0.1331 -0.2938 0.9465

By using pcacov(), the result is:

-0.6555 -0.7424 0.1383
0.7434 -0.6021 0.2914
-0.1331 0.2938 0.9465

Actually, I am writing a program of Pinciple Component Analysis in C++. But I don't really know which one is reliable and correct. The pcacov() seems to give me the correct result but I really don't understand why it's different from the others.

Can anyone help me with it please?

Thanks
 
Physics news on Phys.org
reconstruct the original matrix let say Ahat by using your decomposed matrices, and compute the norm of |A-Ahat|. Then decide for yourself. Do this in a for loop for a couple of hundred matrices of course...