Re: [eigen] Polynomial solver, eigenvalues of companion matrix and balancing

[ Thread Index | Date Index | More Archives ]

Hi, not to hijack the thread, but I think this is related (I haven't been on the list long enough to see the original thread).

I would love to use Eigen except for the fact that the complex eigensolver is much slower compared to Lapack, which does both blocking in the Hessenberg reduction, as well as uses a better shift strategy and aggressive early deflation in the QR iteration. Now, I've ported the entire dependency chain of Lapack's zgeev to C++, if there is any interest in including it into Eigen (the original motivation was to deal with Lapack errata 0061). The source tree is at:
The core QR routines are in Eigensystems.cpp, while the auxiliary routines like Hessenberg reduction and balancing is in TLASupport.h. I considered contributing to the Eigen code base but it appears to be quite complicated and I'm not sure I have the time for it.


On 07/20/2012 12:24 AM, Markus Moll wrote:

Sorry for reviving an "ancient" thread, but:
I recently had to extract roots of a fourth order polynomial. Using Eigen to
find the eigenvalues of the companion matrix, I found that some roots were
horribly bad (compared to matlab, which gave much more reliable results). I
soon figured that the difference is that Matlab balances the matrices
beforehand. In this thread, Manuel said he had written a balancer, but I
cannot find it among the unsupported modules, nor can I find his bitbucket
account any more.

Because I wasn't aware of this previous effort, I had already translated
LAPACK's dgebal (the diagonal scaling part only) to C++. As I feel that
balancing should be supported in Eigen (via another EigenSolver flag?), I
wonder if this could be included. The original LAPACK dgebal.f is published
under the 3-clause BSD license, so the licenses should be compatible according
to my understanding.


Mail converted by MHonArc 2.6.19+