Class OptimizeExpression
- java.lang.Object
-
- org.matheclipse.core.eval.interfaces.AbstractEvaluator
-
- org.matheclipse.core.eval.interfaces.AbstractFunctionEvaluator
-
- org.matheclipse.core.reflection.system.OptimizeExpression
-
- All Implemented Interfaces:
IFunctionEvaluator
,IEvaluator
public class OptimizeExpression extends AbstractFunctionEvaluator
OptimizeExpression(function)
common subexpressions elimination for a complicated
function
by generating “dummy” variables for these subexpressions.>> OptimizeExpression( Sin(x) + Cos(Sin(x)) ) {v1+Cos(v1),{v1->Sin(x)}} >> OptimizeExpression((3 + 3*a^2 + Sqrt(5 + 6*a + 5*a^2) + a*(4 + Sqrt(5 + 6*a + 5*a^2)))/6) {1/6*(3+3*v1+v2+a*(4+v2)),{v1->a^2,v2->Sqrt(5+6*a+5*v1)}}
Create the original expression:
>> ReplaceRepeated(1/6*(3+3*v1+v2+a*(4+v2)), {v1->a^2, v2->Sqrt(5+6*a+5*v1)}) 1/6*(3+3*a^2+Sqrt(5+6*a+5*a^2)+a*(4+Sqrt(5+6*a+5*a^2)))
-
-
Field Summary
-
Fields inherited from interface org.matheclipse.core.eval.interfaces.IFunctionEvaluator
ARGS_0_0, ARGS_0_1, ARGS_0_1_0, ARGS_0_2, ARGS_0_2_0, ARGS_0_3, ARGS_0_INFINITY, ARGS_1_1, ARGS_1_2, ARGS_1_2_0, ARGS_1_2_1, ARGS_1_2_2, ARGS_1_3, ARGS_1_3_0, ARGS_1_3_1, ARGS_1_3_2, ARGS_1_4, ARGS_1_4_0, ARGS_1_4_1, ARGS_1_4_2, ARGS_1_5, ARGS_1_5_1, ARGS_1_INFINITY, ARGS_1_INFINITY_0, ARGS_1_INFINITY_1, ARGS_2_2, ARGS_2_2_1, ARGS_2_3, ARGS_2_3_0, ARGS_2_3_1, ARGS_2_3_2, ARGS_2_4, ARGS_2_4_1, ARGS_2_4_2, ARGS_2_INFINITY, ARGS_3_3, ARGS_3_4, ARGS_3_5, ARGS_3_6, ARGS_3_INFINITY, ARGS_4_4, ARGS_5_5, ARGS_6_6
-
-
Constructor Summary
Constructors Constructor Description OptimizeExpression()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static IAST
cse(IASTMutable ast)
Perform common subexpression elimination on an expression.Try to optimize/extract common sub-IASTMutable
expressions to minimize the number of operationsstatic IAST
cse(IASTMutable ast, Supplier<String> variablePrefix)
Perform common subexpression elimination on an expression.Try to optimize/extract common sub-IASTMutable
expressions to minimize the number of operationsstatic IAST
cseArray(IAST ast, int minReferences, int minLeafCounter)
static void
csePairAsJava(IAST csePair, StringBuilder buf)
IExpr
evaluate(IAST ast, EvalEngine engine)
Symbolic evaluation of a function.int[]
expectedArgSize(IAST ast)
At index 0 return the "from", at index 1 return the "to" number of arguments, which are expected by this function.int
status()
The implementation status of this symbol or function.-
Methods inherited from class org.matheclipse.core.eval.interfaces.AbstractFunctionEvaluator
createRuleFromMethod, determineOptions, extractImaginaryUnit, extractImaginaryUnit, getComplexExpr, getNegativePlusInTimes, getNormalizedNegativeExpression, getNormalizedNegativeExpression, getPeriodicParts, getPowerNegativeExpression, getPureImaginaryPart, imaginaryPart, initSerializedRules, isNegativeWeighted, isNegativeWeighted, peelOff, peelOffPlusI, peelOffPlusRational, peelOfTimes, peelOfTimes, realPart, setUp
-
Methods inherited from class org.matheclipse.core.eval.interfaces.AbstractEvaluator
defaultReturn, evalCatched, numericEval
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.matheclipse.core.interfaces.IEvaluator
await, setOptions
-
Methods inherited from interface org.matheclipse.core.eval.interfaces.IFunctionEvaluator
getOptionSymbols, numericFunction, print
-
-
-
-
Method Detail
-
cse
public static IAST cse(IASTMutable ast)
Perform common subexpression elimination on an expression.Try to optimize/extract common sub-IASTMutable
expressions to minimize the number of operations- Parameters:
ast
- the ast whose internal memory consumption should be minimized- Returns:
- the pair of
{shared-expressions, recursive-replacement-rules}
-
cse
public static IAST cse(IASTMutable ast, Supplier<String> variablePrefix)
Perform common subexpression elimination on an expression.Try to optimize/extract common sub-IASTMutable
expressions to minimize the number of operations- Parameters:
ast
- the ast whose internal memory consumption should be minimizedvariablePrefix
- the prefix string, which should be used for the variable names- Returns:
- the pair of
{shared-expressions, recursive-replacement-rules}
-
evaluate
public IExpr evaluate(IAST ast, EvalEngine engine)
Description copied from class:AbstractFunctionEvaluator
Symbolic evaluation of a function. The methodIExpr.head()
contains the head (i.e. the function symbol) of this abstract syntax tree (AST).From
ast.get(1)
toast.get(n)
theast
contains the first to n-th argument of the function (alternatively you get the first to fifth argument with the methodsIAST.arg1()
,IAST.arg2()
,IAST.arg3()
...IAST.arg5()
.Example: the expression
Binomial(n,m)
is represented as AST withast.head() <=> F.Binomial
,ast.arg1() <=> n
andast.arg2() <=> m
If necessary use the methods from the
Validate
class to check the number or types of arguments in the evaluate method.Note: if the symbolic evaluation isn't possible or no result is found the evaluate method returns with a
F.NIL
value without throwing an exception!- Specified by:
evaluate
in interfaceIFunctionEvaluator
- Specified by:
evaluate
in classAbstractFunctionEvaluator
- Parameters:
ast
- the abstract syntax tree (AST) which should be evaluatedengine
- the users current evaluation engine- Returns:
- the evaluated object or
F#NIL
, if evaluation isn't possible - See Also:
Validate
-
status
public int status()
Description copied from interface:IFunctionEvaluator
The implementation status of this symbol or function.- ✅ -
ImplementationStatus.FULL_SUPPORT
the symbol / function is supported. Note that this doesn't mean that every symbolic evaluation is supported. - ☑ -
ImplementationStatus.PARTIAL_SUPPORT
the symbol / function is partially implemented and might not support most basic features of the element - ❌ -
ImplementationStatus.NO_SUPPORT
the symbol / function is currently not supported - ⚠ -
ImplementationStatus.DEPRECATED
the symbol / function is deprecated and will not be further improved - 🧪 -
ImplementationStatus.EXPERIMENTAL
the symbol / function is an experimental implementation. It may not fully behave as expected.
- ✅ -
-
expectedArgSize
public int[] expectedArgSize(IAST ast)
Description copied from interface:IFunctionEvaluator
At index 0 return the "from", at index 1 return the "to" number of arguments, which are expected by this function. If the returnedint
array has length 3, the function allows headers unequal to the built-in function name (i.e. the function can be in "operator form").- Parameters:
ast
- the abstract syntax tree (AST) those arguments should be checked- Returns:
null
if no range for the number of arguments is specified.
-
csePairAsJava
public static void csePairAsJava(IAST csePair, StringBuilder buf)
-
-