On Wednesday 01 October 2008 12:32:00 Gael Guennebaud wrote:
> FYI:
>
> [12:18] <CIA-20> ggael * r866561 eigen2/trunk/kdesupport/eigen2/
> (Eigen/src/QR/EigenSolver.h test/eigensolver.cpp):
> [12:18] <CIA-20> Fixes in Eigensolver:
> [12:18] <CIA-20> * eigenvectors => pseudoEigenvectors
> [12:18] <CIA-20> * added pseudoEigenvalueMatrix
> [12:18] <CIA-20> * clarify the documentation
> [12:18] <CIA-20> * added respective unit test
> [12:18] <CIA-20> Still missing: a proper eigenvectors() function.
>
> would be nice to get a proper eigenvectors() function before 2.0, anybody ?
>
> also the current implementation actually comes from: "Algol procedure hqr2,
> by Martin and Wilkinson, Handbook for Auto. Comp., Vol.ii-Linear Algebra,
> and the corresponding Fortran subroutine in EISPACK", so I guess we can
> find further information about this issue there.
>
> Cheers,
> gael.
>
> On Thu, Sep 25, 2008 at 3:15 AM, Benoît Jacob <
jacob@xxxxxxxxxxxxxxx> wrote:
> > OK I see...
> >
> > This seems like a very clever idea, but I am uncomfortable with that
> > stuff being called eigenvectors and eigenvalues, since that's not exactly
> > what it is. I'm all for it as long as it has a slightly different name.
> >
> > Unless, someone explains me how this variant is what's actually useful in
> > most
> > applications.
> >
> > Personnally I don't see any urgent need for that (though it interests me
> > highly) so Gael if you're too busy you can ifdef that out for the 2.0
> > release, no problem. Somebody will eventually step up to help ;)
> >
> > I just think this must be sorted out cleanly before it enters our stable
> > API.
> >
> > Cheers,
> > Benoit
> >
> > PS we're mentioned here,
> >
> >
http://www.gamedev.net/community/forums/topic.asp?topic_id=509161&whichpa
> >ge=1�
> >
> > On Thursday 25 September 2008 02:48:44 Gael Guennebaud wrote:
> > > yes, in fact this piece of code has been borrowed from Jama, and they
> > > use
> >
> > a
> >
> > > trick to keep the "eigenvectors" real.
> > >
> > > so this is their notes:
> > >
> > > If A is symmetric, then A = V*D*V' where the eigenvalue matrix D is
> > > diagonal and the eigenvector matrix V is orthogonal. That is,
> > > the diagonal values of D are the eigenvalues, and
> > > V*V' = I, where I is the identity matrix. The columns of V
> > > represent the eigenvectors in the sense that A*V = V*D.
> > >
> > > If A is not symmetric, then the eigenvalue matrix D is block
> > > diagonal with the real eigenvalues in 1-by-1 blocks and any complex
> >
> > eigenvalues,
> >
> > > a + i*b, in 2-by-2 blocks, [a, b; -b, a]. That is, if the complex
> > > eigenvalues look like
> > > <pre>
> > >
> > > u + iv . . . . .
> > > . u - iv . . . .
> > > . . a + ib . . .
> > > . . . a - ib . .
> > > . . . . x .
> > > . . . . . y
> > > </pre>
> > > then D looks like
> > > <pre>
> > >
> > > u v . . . .
> > > -v u . . . .
> > > . . a b . .
> > > . . -b a . .
> > > . . . . x .
> > > . . . . . y
> > >
> > > This keeps V a real matrix in both symmetric and non-symmetric
> > > cases, and A*V = V*D.
> > >
> > >
> > > I guess it should be fairly easy to extract the "true" eigenvectors
> > > from the current ones, but unfortunately, I won't have time to look
> > > into it soon.
> > >
> > > gael.
> > >
> > > On Thu, Sep 25, 2008 at 2:33 AM, Timothy Hunter
> >
> > <
tjhunter@xxxxxxxxxxxx>wrote:
> > > > For your information, the eigen values returned seem correct (as
> > > > checked with random matrices against matlab's computations). Also,
> > > > the computed eigen vectors have no imaginary part and are different.
> > > >
> > > > On Wed, Sep 24, 2008 at 1:47 PM, Gael Guennebaud
> > > >
> > > > <
gael.guennebaud@xxxxxxxxx> wrote:
> > > > > ah, thanks for the fix. Actually it is supposed to work for non
> > > > > symmetric matrices. At least it worked a while ago. I'll check that
> > > > > when I'll have time....
> > > > >
> > > > > gael.
> > > > >
> > > > > On Wed, Sep 24, 2008 at 10:41 PM, Benoît Jacob <
> >
> >
jacob@xxxxxxxxxxxxxxx>
> >
> > > > > wrote:
> > > > >> On Wednesday 24 September 2008 22:14:12 Timothy Hunter wrote:
> > > > >> > Hello,
> > > > >> > I would like to compute eigen values for non-symmetric matrices.
> > > > >> > I
> > > >
> > > > tried
> > > >
> > > > >> > to
> > > > >> > use to the EigenSolver but it does not compile because it cannot
> > > > >> > find the
> > > > >> > function .block(int, int) (see attached log).
> > > > >>
> > > > >> OK, this function was recently renamed to segment(int,int).
> > > > >> Fixed in r864468.
> > > > >>
> > > > >> > Also, the
> > > > >> > tests for non self-adjoint matrices are disabled in
> > > >
> > > > test/eigensolver.cpp
> > > >
> > > > >> > .
> > > > >> > Does it mean this class is not ready yet?
> > > > >>
> > > > >> I tried re-enabling this test, and fixed it so it compiled, and
> > > > >> the
> > > >
> > > > result
> > > >
> > > > >> is
> > > > >> that with a real, non-selfadjoint matrix, the unit-test failed at
> >
> > line
> >
> > > > >> 117.
> > > > >> So please consider it as not yet ready for now.
> > > > >>
> > > > >> Gael, if it's not yet ready maybe #ifdef it out for now.
> > > > >>
> > > > >> Cheers,
> > > > >> Benoit