Esempio n. 1
0
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;
    }
  }
}
Esempio n. 2
0
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;
  }
  }
}