Hi Thomas, > that's exactly what we are looking for, so do not hesitate to ask questions.
ok, I put together a small set of examples, which for now I put on a wiki of the project I am doing this for (since I have access on that one): http://code.google.com/p/jgrasstools/wiki/Eigenvectors Since in the 3d space I do not get the results I was hoping for, it would be great if some expert could give me a hint. Let me know what you think. Andrea > > Thomas > > > On Tue, Nov 12, 2013 at 11:54 AM, andrea antonello < > andrea.antone...@gmail.com> wrote: > >> Hi Thomas, >> >> > good to hear. >> > Sounds like an interesting problem you are working on. >> > If you have found a good solution feel free to come back to use, we might >> > want to include it in our user guide how an EigenDecomposition could be >> > used. >> >> thanks for pointing this out, I was a bit afraid to go offtopic. >> But I would be happy to share a small eigenvector real world example >> if there is interest. I will try to put together something on an >> accessible wiki page, but I might need some help to finish it for >> proper use in documentation :) >> >> I'll keep you posted. >> Thanks, >> Andrea >> >> > >> > Thanks, >> > >> > Thomas >> > >> > >> > >> > On Tue, Nov 12, 2013 at 11:31 AM, andrea antonello < >> > andrea.antone...@gmail.com> wrote: >> > >> >> Hi Thomas, >> >> you are definitely right. I was fooled by the "nice" result of the >> >> JAMA calculation, not noticing that it is there that I was extracting >> >> values in a strange order. >> >> >> >> I now made some 3x3 tests on known results and also with the A * v = >> >> lambda * v constraint and everything is alright. >> >> >> >> I still have to figure out how to properly use the results to split >> >> higher elevation parts from lower z parts in a x,y,z dataset, but the >> >> eigenvectors and values are in the right place now. >> >> >> >> Thanks, >> >> Andrea >> >> >> >> >> >> >> >> >> >> On Mon, Nov 11, 2013 at 1:21 PM, Thomas Neidhart >> >> <thomas.neidh...@gmail.com> wrote: >> >> > 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 >> >> > >> >> >> >> --------------------------------------------------------------------- >> >> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org >> >> For additional commands, e-mail: user-h...@commons.apache.org >> >> >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org >> For additional commands, e-mail: user-h...@commons.apache.org >> >> --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org