use of org.matheclipse.core.polynomials.longexponent.ExprPolynomialRing in project symja_android_library by axkr.
the class RootsFunctions method coefficients.
/**
* Get the coefficient list of a univariate polynomial.
*
* @param polynomial
* @param variable
* @return <code>null</code> if the list couldn't be evaluated.
*/
public static double[] coefficients(IExpr polynomial, final ISymbol variable) throws JASConversionException {
try {
ExprPolynomialRing ring = new ExprPolynomialRing(F.list(variable));
ExprPolynomial poly = ring.create(polynomial);
IAST list = poly.coefficientList();
int degree = list.size() - 2;
double[] result = new double[degree + 1];
for (int i = 1; i < list.size(); i++) {
ISignedNumber temp = list.get(i).evalReal();
if (temp != null) {
result[i - 1] = temp.doubleValue();
} else {
return null;
}
}
return result;
} catch (RuntimeException ex) {
// Polynomial expected!
return null;
}
}
use of org.matheclipse.core.polynomials.longexponent.ExprPolynomialRing in project symja_android_library by axkr.
the class RootsFunctions method rootsOfQuadraticExprPolynomial.
/**
* Solve a polynomial with degree <= 2.
*
* @param expr
* @param varList
* @return <code>F.NIL</code> if no evaluation was possible.
*/
private static IAST rootsOfQuadraticExprPolynomial(final IExpr expr, IAST varList) {
IASTMutable result = F.NIL;
try {
// try to generate a common expression polynomial
ExprPolynomialRing ring = new ExprPolynomialRing(ExprRingFactory.CONST, varList);
ExprPolynomial ePoly = ring.create(expr, false, false, false);
ePoly = ePoly.multiplyByMinimumNegativeExponents();
result = rootsOfQuadraticPolynomial(ePoly);
if (result.isPresent() && expr.isNumericMode()) {
for (int i = 1; i < result.size(); i++) {
result.set(i, F.chopExpr(result.get(i), Config.DEFAULT_ROOTS_CHOP_DELTA));
}
}
result = QuarticSolver.sortASTArguments(result);
return result;
} catch (JASConversionException e2) {
LOGGER.debug("RootsFunctions.rootsOfQuadraticExprPolynomial() failed", e2);
}
return result;
}
Aggregations