On 11/11/2013 11:40 AM, andrea antonello wrote:
> Hi Thomas,
> thanks for your reply.
> 
>> the result of CM and jama are identical, the difference is just in the
>> way how the data is stored.
>>
>> Afaik in jama calling getV() returns a vector in row format whereas in
>> CM the are stored in column format.
>>
>> If you transpose the matrix (or call getVT()) you will see that the
>> vectors are identical, except for the signs and order. The reason for
>> this is that for CM the eigenvalues/eigenvectors are sorted in
>> descending order in case of a symmetric matrix, which is the case for
>> your matrix.
> 
> the problems is that the result is not just different in the
> transposed way. And in fact if I pick the getVT,results are still not
> the same.
> The result seems to be reflected on the secondary diagonal, not the
> primary diagonal.
> 
> Furthermore, if I use the API, I do not expect to be problems of rows
> and columns, so if I use:
> 
> double eigenValue = eigenDecomposition.getRealEigenvalue(i);
> RealVector eigenVector = eigenDecomposition.getEigenvector(i);
> 
> I expect the eigenvector and eigenvalue to be the right ones for the
> given index, no matter how the results are given in the matrixes.
> 
> But the results I get are, for the same eigenvalue:
> CM: eigenVal: 0.8056498828134406, eigenVect: [0.9015723557614027,
> 0.19005937823202243, 0.38864472217295326
> JAMA: eigenVal: 0.8056498828134406, eigenVect: [-0.7731388420716028,
> 0.5012101463530931, -0.38864472217295326]
> 
> I am still quite puzzled about what I am missing.

I do not know how you get the eigenvector from jama, as there is no
getEigenVector method.

The class javadoc of their EigenvalueDecomposition states:

    columns of V represent the eigenvectors in the sense that A*V = V*D,
    i.e. A.times(V) equals V.times(D).  The matrix V may be badly
    conditioned, or even singular, so the validity of the equation
    A = V*D*inverse(V) depends upon V.cond().

Looking at your example it looks like you took the rows of V to extract
your eigenvector.

You can also easily verify if your eigenvector is correct:

 A * v = lambda * v

Thomas

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
For additional commands, e-mail: user-h...@commons.apache.org

Reply via email to