10 #ifndef EIGEN_POLYNOMIAL_SOLVER_H
11 #define EIGEN_POLYNOMIAL_SOLVER_H
31 template <
typename Scalar_,
int Deg_>
44 template <typename OtherPolynomial>
50 template <
typename OtherPolynomial>
72 template <
typename Stl_back_insertion_sequence>
73 inline void realRoots(Stl_back_insertion_sequence& bi_seq,
85 template <
typename squaredNormBinaryPredicate>
91 if (pred(currNorm2, norm2)) {
104 std::greater<RealScalar> greater;
112 std::less<RealScalar> less;
117 template <
typename squaredRealPartBinaryPredicate>
119 squaredRealPartBinaryPredicate& pred,
bool& hasArealRoot,
122 hasArealRoot =
false;
134 if (pred(currAbs2,
abs2)) {
139 }
else if (!hasArealRoot) {
148 template <
typename RealPartBinaryPredicate>
150 RealPartBinaryPredicate& pred,
bool& hasArealRoot,
153 hasArealRoot =
false;
165 if (pred(curr,
val)) {
196 std::greater<RealScalar> greater;
216 std::less<RealScalar> less;
236 std::greater<RealScalar> greater;
256 std::less<RealScalar> less;
264 #define EIGEN_POLYNOMIAL_SOLVER_BASE_INHERITED_TYPES(BASE) \
265 typedef typename BASE::Scalar Scalar; \
266 typedef typename BASE::RealScalar RealScalar; \
267 typedef typename BASE::RootType RootType; \
268 typedef typename BASE::RootsType RootsType;
299 template <
typename Scalar_,
int Deg_>
315 template <typename OtherPolynomial>
319 if (poly.size() > 2) {
339 }
else if (poly.size() == 2) {
341 m_roots[0] = -poly[0] / poly[1];
346 template <
typename OtherPolynomial>
358 template <
typename Scalar_>
366 template <
typename OtherPolynomial>
370 m_roots[0] = -poly[0] / poly[1];
374 template <
typename OtherPolynomial>
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
AnnoyingScalar imag(const AnnoyingScalar &)
Definition: AnnoyingScalar.h:132
int i
Definition: BiCGSTAB_step_by_step.cpp:9
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(Scalar, Size)
Definition: Memory.h:880
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition: PartialRedux_count.cpp:3
#define EIGEN_POLYNOMIAL_SOLVER_BASE_INHERITED_TYPES(BASE)
Definition: PolynomialSolver.h:264
boost::multiprecision::number< boost::multiprecision::cpp_dec_float< 100 >, boost::multiprecision::et_on > Real
Definition: boostmultiprec.cpp:77
Computes eigenvalues and eigenvectors of general complex matrices.
Definition: ComplexEigenSolver.h:49
Computes eigenvalues and eigenvectors of general matrices.
Definition: EigenSolver.h:68
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
Definition: PlainObjectBase.h:294
Defined to be inherited by polynomial solvers: it provides convenient methods such as.
Definition: PolynomialSolver.h:32
void setPolynomial(const OtherPolynomial &poly)
Definition: PolynomialSolver.h:45
const RealScalar & selectRealRoot_withRespectToRealPart(RealPartBinaryPredicate &pred, bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const
Definition: PolynomialSolver.h:149
PolynomialSolverBase(const OtherPolynomial &poly)
Definition: PolynomialSolver.h:51
const RootType & greatestRoot() const
Definition: PolynomialSolver.h:103
std::complex< RealScalar > RootType
Definition: PolynomialSolver.h:38
const RootType & smallestRoot() const
Definition: PolynomialSolver.h:111
const RootType & selectComplexRoot_withRespectToNorm(squaredNormBinaryPredicate &pred) const
Definition: PolynomialSolver.h:86
const RealScalar & greatestRealRoot(bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const
Definition: PolynomialSolver.h:234
const RealScalar & selectRealRoot_withRespectToAbsRealPart(squaredRealPartBinaryPredicate &pred, bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const
Definition: PolynomialSolver.h:118
void realRoots(Stl_back_insertion_sequence &bi_seq, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const
Definition: PolynomialSolver.h:73
PolynomialSolverBase()
Definition: PolynomialSolver.h:55
const RealScalar & smallestRealRoot(bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const
Definition: PolynomialSolver.h:254
NumTraits< Scalar >::Real RealScalar
Definition: PolynomialSolver.h:37
Scalar_ Scalar
Definition: PolynomialSolver.h:36
const RealScalar & absSmallestRealRoot(bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const
Definition: PolynomialSolver.h:214
RootsType m_roots
Definition: PolynomialSolver.h:261
const RealScalar & absGreatestRealRoot(bool &hasArealRoot, const RealScalar &absImaginaryThreshold=NumTraits< Scalar >::dummy_precision()) const
Definition: PolynomialSolver.h:194
const RootsType & roots() const
Definition: PolynomialSolver.h:59
DenseIndex Index
Definition: PolynomialSolver.h:41
void compute(const OtherPolynomial &poly)
Definition: PolynomialSolver.h:367
PolynomialSolver()
Definition: PolynomialSolver.h:379
PolynomialSolver(const OtherPolynomial &poly)
Definition: PolynomialSolver.h:375
PolynomialSolverBase< Scalar_, 1 > PS_Base
Definition: PolynomialSolver.h:361
A polynomial solver.
Definition: PolynomialSolver.h:300
EigenSolverType m_eigenSolver
Definition: PolynomialSolver.h:355
void compute(const OtherPolynomial &poly)
Definition: PolynomialSolver.h:316
PolynomialSolver(const OtherPolynomial &poly)
Definition: PolynomialSolver.h:347
PolynomialSolver()
Definition: PolynomialSolver.h:351
RootsType m_roots
Definition: PolynomialSolver.h:261
std::conditional_t< NumTraits< Scalar >::IsComplex, ComplexEigenSolver< CompanionMatrixType >, EigenSolver< CompanionMatrixType > > EigenSolverType
Definition: PolynomialSolver.h:310
std::conditional_t< NumTraits< Scalar >::IsComplex, Scalar, std::complex< Scalar > > ComplexScalar
Definition: PolynomialSolver.h:311
Definition: Companion.h:34
DenseCompanionMatrixType denseMatrix() const
Definition: Companion.h:80
void balance()
Definition: Companion.h:193
@ IsComplex
Definition: common.h:73
float real
Definition: datatypes.h:10
@ Success
Definition: Constants.h:440
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625
EIGEN_DEVICE_FUNC bool isMuchSmallerThan(const Scalar &x, const OtherScalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition: MathFunctions.h:1916
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE std::enable_if_t< NumTraits< T >::IsSigned||NumTraits< T >::IsComplex, typename NumTraits< T >::Real > abs(const T &x)
Definition: MathFunctions.h:1355
EIGEN_DEVICE_FUNC internal::add_const_on_value_type_t< EIGEN_MATHFUNC_RETVAL(real_ref, Scalar)> real_ref(const Scalar &x)
Definition: MathFunctions.h:1051
EIGEN_DEVICE_FUNC bool abs2(bool x)
Definition: MathFunctions.h:1102
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
const AutoDiffScalar< DerType > & real(const AutoDiffScalar< DerType > &x)
Definition: AutoDiffScalar.h:486
DerType::Scalar imag(const AutoDiffScalar< DerType > &)
Definition: AutoDiffScalar.h:490
EIGEN_DEFAULT_DENSE_INDEX_TYPE DenseIndex
Definition: Meta.h:75
const int Dynamic
Definition: Constants.h:25
T poly_eval(const Polynomials &poly, const T &x)
Definition: PolynomialUtils.h:47
val
Definition: calibrate.py:119
double epsilon
Definition: osc_ring_sarah_asymptotics.h:43
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
Definition: datatypes.h:12