> Hi
> [...]
> Could you provide a few small examples of what the usage would look like?
> Also, some use-cases in "real" applications would be welcome in order to
> figure out whether this functionality would fit in Commons Math.
> Thanks,
> Gilles

Hello,
I apologize for not having replied earlier, due to a lack of time :/
We develop softwares solutions for automatic analyses and traceability of 
quality controls in radiation therapy and medical imaging : radiotherapy 
machines treatment (linacs), scanners, gamma-cameras, Digitalized radiology 
installations, and MRI. We need to provide mathematical formulas used in 
software and allow medical physicists to customize theses formulas, for legal 
reasons.

Below, my first sketch of using this potential feature:

Expression.java : Interface
=======================================================
public void addExpression(ExpressionInsertion ei, TerminalExpression te);
public void addExpression(ExpressionInsertion ei, NonTerminalExpression nte);
public void addExpression(ExpressionInsertion ei, FunctionExpression nte, 
Expression... args);
public void addExpression(FunctionExpression nte, Expression... args);
public void setVariable(String name, double value);
public void removeVariable(String name);

Snippet :
=======================================================
ExpressionBuilder eb = ExpressionBuilderFactory.getInstance().create();

// Creating a custom function with 2 parameters to our ExpressionBuilder
Operator testFunction = new FunctionExpression("test", new FunctionAdapter(new 
BivariateFunction() {
    double value(double x, double y) {
       return (x + x) * (y + y) + 5; 
    }
});

// Create a new Expression :
Expression exp = eb.createExpression(new ConstantExpression(22));       
// exp = "22"
exp.setVariable("var1", 1.0);
exp.addExpression(ExpressionInsertion.RIGHT, new AddExpression(20));
// exp = "22 + 20"  
exp.addExpression(ExpressionInsertion.RIGHT, new 
MulExpression(exp.getVariable("var1")));
// exp = "(22 + 20) * ${var1}"
exp.addExpression(new SqrtExpression());
// exp = " sqrt((22 + 20) * ${var1})"
exp.addExpression(ExpressionInsertion.LEFT, new ConstantExpression(20));
// exp = "20 + sqrt((22 + 20) * ${var1})"
exp.addExpression(testFunction, 10, exp.getCurrentExpression);
// exp = "test(10, 20 + sqrt((22 + 20) * ${var1}))" 

// We can connect to another expression, builded separatly :
Expression exp2 = eb.createExpression(new testFunction, 1, 2);
//exp2 = " test(1, 2)" 
exp2.setVariable("var2", 5.0);
exp2.addExpression(ExpressionInsertion.LEFT, new 
AddOperation(exp2.getVariable("var2"));
// exp2 = "${var2} + test(1, 2)" 
exp.addExpression(ExpressionInsertion.LEFT, exp2);
// exp2 = "(${var2} + test(1, 2)) + test(10, 20 + sqrt((22 + 20) * ${var1}))"

// Custom visitor who build a string representation of this expression
ExpressionVisitor sev = new StringExpressionVisitor();
exp.accept(exp);
try {
System.out.println("result for expression '" + exp.toString() + "' = " + 
exp.evaluate());
} catch (MathParseException ex) {
// [...]
}

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to