Public Types | Public Member Functions | Protected Attributes
PolynomialSolver< _Scalar, _Deg > Class Template Reference

A polynomial solver. More...

#include <PolynomialSolver.h>

List of all members.

Public Types

typedef Matrix< Scalar, _Deg,
_Deg > 
CompanionMatrixType
typedef EigenSolver
< CompanionMatrixType > 
EigenSolverType
typedef PolynomialSolverBase
< _Scalar, _Deg > 
PS_Base
- Public Types inherited from PolynomialSolverBase< _Scalar, _Deg >
typedef DenseIndex Index
typedef NumTraits< Scalar >::Real RealScalar
typedef Matrix< RootType, _Deg, 1 > RootsType
typedef std::complex< RealScalar > RootType
typedef _Scalar Scalar

Public Member Functions

template<typename OtherPolynomial >
void compute (const OtherPolynomial &poly)
template<typename OtherPolynomial >
 PolynomialSolver (const OtherPolynomial &poly)
- Public Member Functions inherited from PolynomialSolverBase< _Scalar, _Deg >
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 RootType & greatestRoot () const
template<typename OtherPolynomial >
 PolynomialSolverBase (const OtherPolynomial &poly)
template<typename Stl_back_insertion_sequence >
void realRoots (Stl_back_insertion_sequence &bi_seq, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const
const RootsType & roots () const
const RealScalar & smallestRealRoot (bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const
const RootType & smallestRoot () const

Protected Attributes

EigenSolverType m_eigenSolver
- Protected Attributes inherited from PolynomialSolverBase< _Scalar, _Deg >
RootsType m_roots

Additional Inherited Members

- Protected Member Functions inherited from PolynomialSolverBase< _Scalar, _Deg >
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
template<typename OtherPolynomial >
void setPolynomial (const OtherPolynomial &poly)

Detailed Description

template<typename _Scalar, int _Deg>
class Eigen::PolynomialSolver< _Scalar, _Deg >

A polynomial solver.

Computes the complex roots of a real polynomial.

Parameters:
_Scalarthe scalar type, i.e., the type of the polynomial coefficients
_Degthe 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 unsuported 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).


Member Function Documentation

void compute ( const OtherPolynomial &  poly)
inline

Computes the complex roots of a new polynomial.


The documentation for this class was generated from the following file: