compbio
|
A polynomial solver. More...
#include <PolynomialSolver.h>
Public Types | |
typedef PolynomialSolverBase< _Scalar, _Deg > | PS_Base |
typedef Matrix< Scalar, _Deg, _Deg > | CompanionMatrixType |
typedef EigenSolver< CompanionMatrixType > | EigenSolverType |
![]() | |
typedef _Scalar | Scalar |
typedef NumTraits< Scalar >::Real | RealScalar |
typedef std::complex< RealScalar > | RootType |
typedef Matrix< RootType, _Deg, 1 > | RootsType |
typedef DenseIndex | Index |
Public Member Functions | |
template<typename OtherPolynomial > | |
void | compute (const OtherPolynomial &poly) |
Computes the complex roots of a new polynomial. More... | |
template<typename OtherPolynomial > | |
PolynomialSolver (const OtherPolynomial &poly) | |
![]() | |
template<typename OtherPolynomial > | |
PolynomialSolverBase (const OtherPolynomial &poly) | |
const RootsType & | roots () const |
template<typename Stl_back_insertion_sequence > | |
void | realRoots (Stl_back_insertion_sequence &bi_seq, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const |
Clear and fills the back insertion sequence with the real roots of the polynomial i.e. More... | |
const RootType & | greatestRoot () const |
const RootType & | smallestRoot () const |
const RealScalar & | absGreatestRealRoot (bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const |
const RealScalar & | absSmallestRealRoot (bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const |
const RealScalar & | greatestRealRoot (bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const |
const RealScalar & | smallestRealRoot (bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const |
Protected Attributes | |
EigenSolverType | m_eigenSolver |
![]() | |
RootsType | m_roots |
Additional Inherited Members | |
![]() | |
template<typename OtherPolynomial > | |
void | setPolynomial (const OtherPolynomial &poly) |
template<typename squaredNormBinaryPredicate > | |
const RootType & | selectComplexRoot_withRespectToNorm (squaredNormBinaryPredicate &pred) const |
template<typename squaredRealPartBinaryPredicate > | |
const RealScalar & | selectRealRoot_withRespectToAbsRealPart (squaredRealPartBinaryPredicate &pred, bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const |
template<typename RealPartBinaryPredicate > | |
const RealScalar & | selectRealRoot_withRespectToRealPart (RealPartBinaryPredicate &pred, bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const |
A polynomial solver.
Computes the complex roots of a real polynomial.
_Scalar | the scalar type, i.e., the type of the polynomial coefficients |
_Deg | the degree of the polynomial, can be a compile time value or Dynamic. Notice that the number of polynomial coefficients is _Deg+1. |
This class implements a polynomial solver and provides convenient methods such as
WARNING: this polynomial solver is experimental, part of the unsupported Eigen modules.
Currently a QR algorithm is used to compute the eigenvalues of the companion matrix of the polynomial to compute its roots. This supposes that the complex moduli of the roots are all distinct: e.g. there should be no multiple roots or conjugate roots for instance. With 32bit (float) floating types this problem shows up frequently. However, almost always, correct accuracy is reached even in these cases for 64bit (double) floating types and small polynomial degree (<20).
|
inline |
Computes the complex roots of a new polynomial.