typename Polynomial<CoefficientType>::RootsType Polynomial<CoefficientType>::roots() const { if (!is_univariate) throw runtime_error( "getCoefficients is only defined for univariate polynomials"); auto coefficients = getCoefficients(); // need to handle degree 0 and 1 explicitly because Eigen's polynomial solver // doesn't work for these int degree = static_cast<int>(coefficients.size()) - 1; switch (degree) { case 0: return Polynomial<CoefficientType>::RootsType(degree); case 1: { Polynomial<CoefficientType>::RootsType ret(degree); ret[0] = -coefficients[0] / coefficients[1]; return ret; } default: { PolynomialSolver<RealScalar, Eigen::Dynamic> solver; solver.compute(coefficients); return solver.roots(); break; } } }
typename Polynomial<CoefficientType>::RootsType Polynomial<CoefficientType>::roots() const { // need to handle degree 0 and 1 explicitly because Eigen's polynomial solver doesn't work for these int degree = getDegree(); switch (degree) { case 0: return Polynomial<CoefficientType>::RootsType(degree); case 1: { Polynomial<CoefficientType>::RootsType ret(degree); ret[0] = -coefficients[0] / coefficients[1]; return ret; } default: { PolynomialSolver<RealScalar, Eigen::Dynamic> solver; solver.compute(coefficients); return solver.roots(); break; } } }