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

Reply via email to