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
>    -------------------------------------------------------------
>
>
>
>

Reply via email to