|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.jscience.mathematics.analysis.expressions.ExpressionParser
public class ExpressionParser
Expression parser for mathematical expressions. The parser has some
predefined constants: pi and e that are available if source code is parsed.
If only single expressions are parsed pi and e are not available. Known
bugs (may not be fixed anytime soon): Using an incorrect number of
arguments for functions may lead to incorrect expressions, such as
sin(x,y)+ which results in code generation of the expression
x+sin(y). Similarly, it is possible to use stack oriented
syntax (reverse polish notation syntax) like in the example
x,y,sin()+ which also generates the code
x+sin(y). Hint: Do not use functions with associated bugs
until bug comments have been removed.
Examples of use:
ExpressionParser parser = new ExpressionParser();
Expression cnst = parser.parse( "1+sin(3/2.0)" );
if ( cnst != null ) {
double doubleValue = cnst.eval();
System.out.println( "value=" + doubleValue );
}
which generates the output value=1.9974949866040543.x.
ExpressionParser parser = new ExpressionParser(); java.util.List variableNames = new java.util.ArrayList(); java.util.List variables = new java.util.ArrayList(); variableNames.add( "x" ); Variable x = new Variable( "x", 2.3 ); variables.add( x ); parser.setVariableNames( variableNames ); parser.setVariables( variables ); Expression expr = parser.parse( "x+sin(3*x)" ); Expression derivative = expr.diff( x ); Expression optderivative = derivative.optimize(); System.out.println( "expr=" + expr ); System.out.println( "derivative=" + derivative ); System.out.println( "optimized derivative=" + optderivative );which generates the following output.
expr=(x+sin((3.0*x))) derivative=(1.0+(cos((3.0*x))*((0.0*x)+(3.0*1.0)))) optderivative=(1.0+(cos((3.0*x))*3.0))An even more complicated example which includes both variables and parameters is seen below.
import org.jscience.mathematics.analysis.*;
import java.util.Vector;
public class TestExp {
public static void main( String[] args ) {
String[] vars = new String[] { "x", "y" };
Vector variableNames = new Vector();
Vector variables = new Vector();
for (int i = 0; i < vars.length; i++) {
variableNames.add( vars[ i ] );
variables.add( new Variable( vars[ i ], 0 ) );
}
String[] pars = new String[] { "a", "b" };
Vector parameterNames = new Vector();
Vector parameters = new Vector();
for (int i = 0; i < pars.length; i++) {
parameterNames.add( pars[ i ] );
parameters.add( new Parameter( pars[ i ], 0 ) );
}
Vector constantNames = new Vector();
Vector auxiliaryNames = new Vector();
ExpressionParser parser = new ExpressionParser();
parser.setVariableNames( variableNames );
parser.setVariables( variables );
parser.setParameterNames( parameterNames );
parser.setParameters( parameters );
parser.setConstantNames( constantNames );
parser.setAuxiliaryNames( auxiliaryNames );
Expression expr = (Expression)parser.parse( "a*x-x*a+b*sin(4*y*1+0+b/1)" );
System.out.println( "Expression = " + expr );
expr = expr.optimize();
System.out.println( "Expression = " + expr );
}
}
The above code generates something like the following output:Expression = (((a*x)-(x*a))+(b*sin(((((4.0*y)*1.0)+0.0)+(b/1.0))))) Expression = (b*sin(((4.0*y)+b)))
| Nested Class Summary | |
|---|---|
static class |
ExpressionParser.Compiler
The static class Compiler is intended for command line compilation of source files defining dynamical systems. |
| Constructor Summary | |
|---|---|
ExpressionParser()
Public constructor for the ExpressionParser class. |
|
| Method Summary | |
|---|---|
void |
generateJavaSource(java.lang.String fileName)
Generates Java source code for computing the right hand side. |
java.util.List |
getAuxiliaries()
|
java.util.List |
getAuxiliaryNames()
|
java.util.List |
getConstantNames()
|
java.util.List |
getConstants()
|
java.lang.String |
getError()
|
java.lang.String |
getInformation()
|
Expression[] |
getInverseRHS()
|
Expression[][] |
getJacobiMatrix()
|
java.lang.String |
getJavaSource()
|
java.util.List |
getLogicalNames()
|
java.util.List |
getLogicals()
|
int |
getNumberOfAuxillaries()
|
int |
getNumberOfConstants()
|
int |
getNumberOfEvents()
|
int |
getNumberOfParameters()
|
int |
getNumberOfProcesses()
|
int |
getNumberOfUserFunctions()
|
int |
getNumberOfVariables()
|
Expression[][] |
getParameterJacobiMatrix()
|
java.util.List |
getParameterNames()
|
java.util.List |
getParameters()
|
Expression[] |
getRHS()
|
java.util.List |
getUserFunctionNames()
|
java.util.List |
getVariableNames()
|
java.util.List |
getVariables()
|
java.lang.String |
infixToPostfix(java.lang.String infix)
Converts a mathematical expression in the Stringinfix in infix format to a mathematical expression in postfix format. |
boolean |
isCompiled()
|
boolean |
isDifferentiable()
|
boolean |
isExpandable()
|
boolean |
isInvertible()
|
boolean |
isNondifferentiable()
|
boolean |
isParameterDifferentiable()
|
boolean |
isTimeContinuous()
|
boolean |
isTimeDiscrete()
|
static void |
main(java.lang.String[] args)
|
java.lang.String |
oldparseSource(java.lang.String s)
DOCUMENT ME! |
java.lang.Object |
parse(java.lang.String symbolic)
The method parses the argument String using the method
uses the methods infixToPostfix(java.lang.String) and postfixToExpression(java.lang.String) to generate a Expression. |
java.lang.String |
parseSource(java.lang.String s)
Parses the String and attempts to generate symbolic expressions for the right hand side(s). |
java.lang.Object |
postfixToExpression(java.lang.String postfix)
The method converts a mathematical expression in postfix format to an Expression in symbolic format. |
java.lang.String |
postfixToInfix(java.lang.String postfix)
Converts a postfix expression to it corresponding infix form. |
TaylorDouble |
postfixToTaylorDouble(java.lang.String postfix)
The method converts a mathematical expression in postfix format to a TaylorMap in symbolic format. |
void |
setAccessLevel(java.lang.String s)
DOCUMENT ME! |
void |
setAuxiliaries(java.util.List auxs)
|
void |
setAuxiliaryNames(java.util.List auxiliaryNames)
|
void |
setConstantNames(java.util.List constantNames)
|
void |
setConstants(java.util.List constants)
|
void |
setJavaSource(java.lang.String source)
|
void |
setLogicalNames(java.util.List logicalNames)
|
void |
setLogicals(java.util.List logicals)
|
void |
setOptimizationLevel(int level)
DOCUMENT ME! |
void |
setParameterNames(java.util.List parameterNames)
|
void |
setParameters(java.util.List parameters)
|
void |
setStrict(boolean s)
DOCUMENT ME! |
void |
setVariableNames(java.util.List variableNames)
|
void |
setVariables(java.util.List variables)
|
java.lang.String |
toXML()
The method returns an xml representation of the system. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public ExpressionParser()
| Method Detail |
|---|
public void setOptimizationLevel(int level)
level - DOCUMENT ME!public void setStrict(boolean s)
s - DOCUMENT ME!public void setAccessLevel(java.lang.String s)
s - DOCUMENT ME!public java.lang.String getInformation()
public java.lang.String getError()
public java.lang.String getJavaSource()
public void setJavaSource(java.lang.String source)
public boolean isCompiled()
public boolean isDifferentiable()
public boolean isNondifferentiable()
public boolean isParameterDifferentiable()
public boolean isExpandable()
public boolean isInvertible()
public int getNumberOfVariables()
public int getNumberOfParameters()
public int getNumberOfConstants()
public int getNumberOfAuxillaries()
public int getNumberOfEvents()
public int getNumberOfProcesses()
public int getNumberOfUserFunctions()
public java.util.List getVariableNames()
public java.util.List getParameterNames()
public java.util.List getConstantNames()
public java.util.List getAuxiliaryNames()
public java.util.List getUserFunctionNames()
public java.util.List getLogicalNames()
public void setVariableNames(java.util.List variableNames)
public void setAuxiliaryNames(java.util.List auxiliaryNames)
public void setParameterNames(java.util.List parameterNames)
public void setConstantNames(java.util.List constantNames)
public void setLogicalNames(java.util.List logicalNames)
public java.util.List getVariables()
public java.util.List getAuxiliaries()
public void setAuxiliaries(java.util.List auxs)
public void setVariables(java.util.List variables)
public java.util.List getParameters()
public void setParameters(java.util.List parameters)
public java.util.List getConstants()
public void setConstants(java.util.List constants)
public java.util.List getLogicals()
public void setLogicals(java.util.List logicals)
public Expression[] getRHS()
public Expression[] getInverseRHS()
public Expression[][] getJacobiMatrix()
public Expression[][] getParameterJacobiMatrix()
public boolean isTimeDiscrete()
public boolean isTimeContinuous()
public java.lang.String parseSource(java.lang.String s)
s - DOCUMENT ME!
public java.lang.String oldparseSource(java.lang.String s)
s - DOCUMENT ME!
public void generateJavaSource(java.lang.String fileName)
fileName - DOCUMENT ME!public java.lang.String toXML()
public java.lang.Object parse(java.lang.String symbolic)
String using the method
uses the methods infixToPostfix(java.lang.String) and postfixToExpression(java.lang.String) to generate a Expression. Before these
methods are invoked, it is determined whether the argument is a number
that can be handled by the static parseDouble(java.lang.String) method
from the java.lang.Double class. If this is the case a Constant with the value
is returned. Syntax errors are signalled by the return of a null
pointer. The concrete syntax error detected can be determined by the
method call getError() which returns a String.
symbolic - DOCUMENT ME!
public java.lang.Object postfixToExpression(java.lang.String postfix)
postfix - Mathematical expressioin in postfix format.
public TaylorDouble postfixToTaylorDouble(java.lang.String postfix)
postfix - Mathematical expressioin in postfix format.
public java.lang.String infixToPostfix(java.lang.String infix)
infix - DOCUMENT ME!
public java.lang.String postfixToInfix(java.lang.String postfix)
postfix - DOCUMENT ME!
public static void main(java.lang.String[] args)
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||