Thanks Gael, Cheers,
Oleg On Fri, Mar 22, 2019 at 11:02 AM Gael Guennebaud <[email protected]> wrote: > 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 >> ------------------------------------------------------------- >> >> >> >>
