8#ifndef model_MatrixCompanion_h_
9#define model_MatrixCompanion_h_
25 enum{Ncoeff=pOrder+1};
26 typedef Eigen::Matrix<double,1,Ncoeff> VectorNcoeff;
27 typedef Eigen::Matrix<double,pOrder,pOrder> MatrixPorder;
28 typedef Eigen::EigenSolver<Eigen::MatrixXd> EigenSolverType;
33 const Eigen::MatrixXd
cM;
34 const EigenSolverType
es;
52 typename EigenSolverType::ComplexScalar
root(
const int&
i)
const
56 return es.eigenvalues()(
i);
61 static Eigen::MatrixXd
getCM(
const VectorNcoeff& coeffsIN)
68 if ( std::fabs(coeffsIN(0))>FLT_EPSILON)
70 temp=MatrixPorder::Zero();
71 temp.row(0)=coeffsIN.template segment<pOrder>(1)/(-coeffsIN(0));
72 temp.template block<pOrder-1,pOrder-1>(1,0).setIdentity();
90 enum{Ncoeff=pOrder+1};
91 typedef Eigen::Matrix<double,1,Ncoeff> VectorNcoeff;
92 typedef Eigen::Matrix<double,pOrder,pOrder> MatrixPorder;
93 typedef Eigen::EigenSolver<Eigen::MatrixXd> EigenSolverType;
100 const Eigen::MatrixXd
cM;
101 const EigenSolverType
es;
115 typename EigenSolverType::ComplexScalar
root(
const int&
i)
const
117 return es.eigenvalues()(
i);
121 static MatrixPorder
getCM(
const VectorNcoeff& coeffsIN)
123 assert(std::fabs(coeffsIN(0))>FLT_EPSILON &&
"COEFFICIENT OF HIGHEST DEGREE CANNOT BE 0");
124 MatrixPorder
temp(MatrixPorder::Zero());
125 temp.row(0)=coeffsIN.segment<pOrder>(1)/(-coeffsIN(0));
EigenSolverType::ComplexScalar root(const int &i) const
static MatrixPorder getCM(const VectorNcoeff &coeffsIN)
MatrixCompanion(const VectorNcoeff &coeffsIN)
const VectorNcoeff coeffs
MatrixCompanion(const VectorNcoeff &coeffsIN)
const VectorNcoeff coeffs
static Eigen::MatrixXd getCM(const VectorNcoeff &coeffsIN)
EigenSolverType::ComplexScalar root(const int &i) const