I backported all related changes. This will be part of 3.3.8 On Thu, Mar 21, 2019 at 5:09 PM Christoph Hertzberg < [email protected]> wrote:
> Hi, > > the modification happened in the default (i.e., "development") branch, > after the initial 3.3 release. Usually, we don't backport added > features, but only bug-fixes to the stable branch. However, there is no > strict rule about this, especially if this is not too complicated. > > So no objections from me to backport this. > > Christoph > > > On 21/03/2019 07.20, Oleg Shirokobrod wrote: > > Hi Gael, > > > > I mean that this modification was made in some branch but is not included > > in any release 3.3.0 - 3.3.7. Would it be possible to make this > > modification in the next 3.3.8 release? > > > > On Thu, Mar 21, 2019 at 12:35 AM Gael Guennebaud < > [email protected]> > > wrote: > > > >> Hi Oleg, > >> > >> do you mean a backport to 3.3? > >> > >> gael > >> > >> On Wed, Mar 20, 2019 at 3:51 PM Oleg Shirokobrod < > >> [email protected]> wrote: > >> > >>> Hi Gael, > >>> > >>> You finally modified PolynomialSolver.h code for finding roots of > >>> polynomial with complex coefficients and wrote unit test. This > enhancement > >>> is very important for signal processing application. This modification > of > >>> PolynomialSolver.h and Companion.h are rather trivial and localized. > So it > >>> is safe to modify existing code. Would it be possible to include them > to > >>> the next release? > >>> > >>> Best regards, > >>> > >>> Oleg > >>> > >>> > >>> On Wed, Nov 23, 2016 at 5:09 PM Gael Guennebaud < > >>> [email protected]> wrote: > >>> > >>>> Done: > >>>> > >>>> https://bitbucket.org/eigen/eigen/commits/3842186ae759/ > >>>> https://bitbucket.org/eigen/eigen/commits/eff1bfef71a2/ > >>>> https://bitbucket.org/eigen/eigen/commits/df6c723906fc/ > >>>> > >>>> gael > >>>> > >>>> On Wed, Nov 23, 2016 at 3:39 PM, Gael Guennebaud < > >>>> [email protected]> wrote: > >>>> > >>>>> Sorry for late reply, but thanks for the patches. > >>>>> > >>>>> Regarding the eigen-solver choice issue, it's possible to > automatically > >>>>> use the right one based on NumTraits<Scalar>::IsComplex and > conditional<>. > >>>>> > >>>>> We would also need to extended the unit test to cover complexes. > >>>>> > >>>>> gael > >>>>> > >>>>> On Tue, Nov 8, 2016 at 3:41 PM, Oleg Shirokobrod < > >>>>> [email protected]> wrote: > >>>>> > >>>>>> Dear list, > >>>>>> > >>>>>> Polynomial solver currently finds roots only for real polynomial > >>>>>> coefficients. Having Eigen::ComplexEigenSolver lets Polynomial > module to > >>>>>> compute roots for complex polynomial coefficients. I have made > necessary > >>>>>> modifications. I have attached corresponding patch files. > Unfortunately > >>>>>> module cannot deduce type of the solver from partial specialization > of > >>>>>> corresponding matrix type, such that > >>>>>> > >>>>>> template<typename RealScalar> class EigenSolver {}; > >>>>>> > >>>>>> template<typenameRealScalar> class > >>>>>> EigenSolver<Eigen::Matrix<RealScalar,_Deg,_Deg> > {// EigenSolver }; > >>>>>> > >>>>>> template<typename RealScalar> class > >>>>>> EigenSolver<Eigen::Matrix<std::complex<RealScalar>,_Deg,_Deg > > { > >>>>>> //ComplexEigenSolver}; > >>>>>> > >>>>>> So I have to add additional template parameter EigenSolverType with > >>>>>> default value for real coefficients: > >>>>>> > >>>>>> template< typename _Scalar, int _Deg , typename EigenSolverType = > >>>>>> EigenSolver<Matrix<_Scalar,_Deg,_Deg> > > > >>>>>> class PolynomialSolver : public > PolynomialSolverBase<_Scalar,_Deg>{}; > >>>>>> > >>>>>> I have to replace in number of places in the file Companion.h > (mainly > >>>>>> in functions balanced() and balance()) Scalar with RealScalar, where > >>>>>> variables are really real. > >>>>>> > >>>>>> With this code I have run test against Matlab and it gave similar > >>>>>> results. > >>>>>> > >>>>>> Test > >>>>>> VectorXcd roots = VectorXcd::Random(4); > >>>>>> VectorXcd polynomialCoefficients; > >>>>>> roots_to_monicPolynomial(roots, polynomialCoefficients); > >>>>>> > >>>>>> cout << "roots : " << endl; > >>>>>> cout << setprecision(14) << roots << endl; > >>>>>> cout << "polynomialCoefficients : " << endl; > >>>>>> cout << setprecision(14) << polynomialCoefficients << endl; > >>>>>> > >>>>>> PolynomialSolver<std::complex<double>, Dynamic, > >>>>>> ComplexEigenSolver<MatrixXcd> > psolve(polynomialCoefficients); > >>>>>> > >>>>>> VectorXcd computedRoots = psolve.roots(); > >>>>>> > >>>>>> cout << "computedRoots : " << endl; > >>>>>> cout << setprecision(14) << computedRoots << endl; > >>>>>> > >>>>>> for(int index = 0; index < computedRoots.size(); ++index) > >>>>>> { > >>>>>> cout << setprecision(14) << "polynom at computedRoots * 1.0 > e-11: > >>>>>> " << poly_eval(polynomialCoefficients, computedRoots(index))*1.0e11 > << endl; > >>>>>> } > >>>>>> > >>>>>> Output: > >>>>>> roots : > >>>>>> (0.12717062898648,-0.99749748222297) > >>>>>> (0.61748100222785,-0.61339152195807) > >>>>>> (-0.04025391399884,0.17001861629078) > >>>>>> (0.79192480239265,-0.29941709646901) > >>>>>> > >>>>>> polynomialCoefficients : > >>>>>> (0.091649023983597,-0.091441416775918) > >>>>>> (0.24020598856634,0.37401934653925) > >>>>>> (-0.16301627948124,-1.8544616197629) > >>>>>> (-1.4963225196081,1.7402874843593) > >>>>>> (1,0) > >>>>>> > >>>>>> computedRoots : > >>>>>> (-0.04025391399884,0.17001861629078) > >>>>>> (0.79192480239265,-0.29941709646901) > >>>>>> (0.61748100222785,-0.61339152195807) > >>>>>> (0.12717062898648,-0.99749748222297) > >>>>>> > >>>>>> polynom at computedRoots * 1.0 e-11: > >>>>>> (8.3266726846887e-006,-1.2490009027033e-005) > >>>>>> polynom at computedRoots * 1.0 e-11: > >>>>>> (4.7184478546569e-005,-1.6653345369377e-005) > >>>>>> polynom at computedRoots * 1.0 e-11: > >>>>>> (2.2204460492503e-005,-1.3877787807814e-005) > >>>>>> polynom at computedRoots * 1.0 e-11: > >>>>>> (1.5163809063462e-005,-2.7286889655471e-005) > >>>>>> > >>>>>> Matlab for the same coefficients gives following roots (remember > that > >>>>>> matlab array of coefficients and Eigen one are reversed to each > other) > >>>>>> > >>>>>> computedRoots : > >>>>>> 0.127170628986480 - 0.997497482222969i > >>>>>> 0.617481002227849 - 0.613391521958071i > >>>>>> 0.791924802392650 - 0.299417096469009i > >>>>>> -0.040253913998840 + 0.170018616290780i > >>>>>> > >>>>>> Best regards, > >>>>>> > >>>>>> Oleg Shirokobrod > >>>>>> > >>>>>> > >>>>>> > >>>>> > >>>> > > > > -- > Dr.-Ing. Christoph Hertzberg > > Besuchsadresse der Nebengeschäftsstelle: > DFKI GmbH > Robotics Innovation Center > Robert-Hooke-Straße 5 > 28359 Bremen, Germany > > Postadresse der Hauptgeschäftsstelle Standort Bremen: > DFKI GmbH > Robotics Innovation Center > Robert-Hooke-Straße 1 > 28359 Bremen, Germany > > Tel.: +49 421 178 45-4021 > Zentrale: +49 421 178 45-0 > E-Mail: [email protected] > > Weitere Informationen: http://www.dfki.de/robotik > ------------------------------------------------------------- > Deutsches Forschungszentrum für Künstliche Intelligenz GmbH > Trippstadter Strasse 122, D-67663 Kaiserslautern, Germany > > Geschäftsführung: > Prof. Dr. Jana Koehler (Vorsitzende) > Dr. Walter Olthoff > > Vorsitzender des Aufsichtsrats: > Prof. Dr. h.c. Hans A. Aukes > Amtsgericht Kaiserslautern, HRB 2313 > ------------------------------------------------------------- > > > >
