use of org.matheclipse.core.polynomials.longexponent.ExprPolynomial in project symja_android_library by axkr.
the class AbstractAST method isPolynomialOfMaxDegree.
public final boolean isPolynomialOfMaxDegree(IAST variables, long maxDegree) {
try {
if (isPlus() || isTimes() || isPower()) {
IExpr expr = F.evalExpandAll(this);
ExprPolynomialRing ring = new ExprPolynomialRing(variables);
ExprPolynomial poly = ring.create(expr);
return poly.degree() <= maxDegree;
}
} catch (ArithmeticException | ClassCastException ex) {
//
}
return false;
}
use of org.matheclipse.core.polynomials.longexponent.ExprPolynomial in project symja_android_library by axkr.
the class MinMaxFunctions method minimizeExprPolynomial.
private static IAST minimizeExprPolynomial(final IExpr expr, IAST varList) {
IAST 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 = minimizeCubicPolynomial(ePoly, varList.arg1());
// result = QuarticSolver.sortASTArguments(result);
return result;
} catch (ArithmeticException | JASConversionException e2) {
LOGGER.debug("MinMaxFunctions.minimizeExprPolynomial() failed", e2);
}
return result;
}
use of org.matheclipse.core.polynomials.longexponent.ExprPolynomial in project symja_android_library by axkr.
the class RootsFunctions method rootsOfExprPolynomial.
public static IASTMutable rootsOfExprPolynomial(final IExpr expr, IAST varList, boolean rootsOfQuartic) {
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();
if (ePoly.degree(0) >= Integer.MAX_VALUE) {
return F.NIL;
}
if (ePoly.degree(0) >= 3) {
result = unitPolynomial((int) ePoly.degree(0), ePoly);
if (result.isPresent()) {
result = QuarticSolver.sortASTArguments(result);
return result;
}
}
if (!rootsOfQuartic && ePoly.degree(0) > 2) {
return F.NIL;
}
result = rootsOfQuarticPolynomial(ePoly);
if (result.isPresent()) {
if (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.rootsOfExprPolynomial() failed", e2);
}
return F.NIL;
}
use of org.matheclipse.core.polynomials.longexponent.ExprPolynomial in project symja_android_library by axkr.
the class PolynomialExample method main.
public static void main(String[] args) {
try {
ExprEvaluator util = new ExprEvaluator();
IExpr expr = util.eval("x^2+y+a*x+b*y+c");
System.out.println(expr.toString());
final IAST variables = F.List(F.symbol("x"), F.symbol("y"));
ExprPolynomialRing ring = new ExprPolynomialRing(ExprRingFactory.CONST, variables, variables.argSize(), ExprTermOrderByName.Lexicographic, false);
ExprPolynomial poly = ring.create(expr);
System.out.println(poly.toString());
// x degree
System.out.println(poly.degree(0));
// y degree
System.out.println(poly.degree(1));
// show internal structure:
System.out.println(poly.coefficientRules());
System.out.println();
for (ExprMonomial monomial : poly) {
System.out.println(monomial.toString());
}
} catch (SyntaxError e) {
// catch Symja parser errors here
System.out.println(e.getMessage());
} catch (MathException me) {
// catch Symja math errors here
System.out.println(me.getMessage());
} catch (Exception e) {
e.printStackTrace();
} catch (final StackOverflowError soe) {
System.out.println(soe.getMessage());
} catch (final OutOfMemoryError oome) {
System.out.println(oome.getMessage());
}
}
use of org.matheclipse.core.polynomials.longexponent.ExprPolynomial in project symja_android_library by axkr.
the class ExprEvaluatorTest method testStringEval003.
public void testStringEval003() {
try {
ExprEvaluator util = new ExprEvaluator();
IExpr expr = util.eval("x^2+y+a*x+b*y+c");
assertEquals("c+a*x+x^2+y+b*y", expr.toString());
final IAST variables = F.List(F.symbol("x"), F.symbol("y"));
ExprPolynomialRing ring = new ExprPolynomialRing(ExprRingFactory.CONST, variables, variables.argSize(), ExprTermOrderByName.Lexicographic, false);
ExprPolynomial poly = ring.create(expr);
assertEquals("x^2 + a x + ( 1+b ) y + c ", poly.toString());
// x degree
assertEquals(2, poly.degree(0));
// y degree
assertEquals(1, poly.degree(1));
// show internal structure:
assertEquals("{{2,0}->1,{1,0}->a,{0,1}->1+b,{0,0}->c}", poly.coefficientRules().toString());
System.out.println(poly.coefficientRules());
for (ExprMonomial monomial : poly) {
System.out.println(monomial.toString());
}
} catch (SyntaxError e) {
// catch Symja parser errors here
System.out.println(e.getMessage());
} catch (MathException me) {
// catch Symja math errors here
System.out.println(me.getMessage());
} catch (Exception e) {
e.printStackTrace();
} catch (final StackOverflowError soe) {
System.out.println(soe.getMessage());
} catch (final OutOfMemoryError oome) {
System.out.println(oome.getMessage());
}
}
Aggregations