commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thomas Neidhart <thomas.neidh...@gmail.com>
Subject Re: [math] eigenvector doubts and issues
Date Tue, 12 Nov 2013 11:47:12 GMT
Hi Andrea,

that's exactly what we are looking for, so do not hesitate to ask questions.

Thomas


On Tue, Nov 12, 2013 at 11:54 AM, andrea antonello <
andrea.antonello@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.antonello@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.neidhart@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-unsubscribe@commons.apache.org
> >> > For additional commands, e-mail: user-help@commons.apache.org
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> >> For additional commands, e-mail: user-help@commons.apache.org
> >>
> >>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message