Hi Thomas,

congrace may be used by writing a wrapper "Expression" to UnivarteFunction:


import org.apache.commons.math3.analysis.UnivariateFunction;

import de.congrace.exp4j.Calculable;
import de.congrace.exp4j.ExpressionBuilder;

public class Expression implements UnivariateFunction {
        private Calculable      calc    = null;

        public Expression(String function) throws Exception {
                calc = new 
ExpressionBuilder(function).withVariableNames("x").build();
        }

        public double value(double x) {
                calc.setVariable("x", x);
                return calc.calculate();
        }

}

Using this you get the folowing code:

final double relativeAccuracy = 1.0e-10;
final double absoluteAccuracy = 1.0e-10;
UnivariateSolver solver = new RegulaFalsiSolver(relativeAccuracy,
                                                absoluteAccuracy);
Expression exp = new Expression("sin(3*x)");
double root = solver.solve(99999, exp, 9.4, 9.7);
System.out.println("root is " + root + " / " + exp.value(root));

with output:

root is 9.42477796076938 / 1.102182119232618E-15  (= 3*PI)

==> Interpreter may be integrated in commons/math, the same result as my 
interpreter.

Now I'll compare the functions implemented in congrace.  



Regards Detlef











-------- Original-Nachricht --------
> Datum: Tue, 27 Mar 2012 10:10:41 +0200
> Von: Thomas Neidhart <[email protected]>
> An: Commons Developers List <[email protected]>
> Betreff: Re: [math] Improvement: Interpreter for mathematical expressions

> On Tue, Mar 27, 2012 at 10:06 AM, Thomas Neidhart
> <[email protected]
> > wrote:
> 
> > 2012/3/27 "Detlef Günther" <[email protected]>
> >
> >> Hello,
> >>
> >> it would be nice to have an interpreter for mathematical expressions so
> >> that functions may be defined at runtime.
> >>
> >
> [snip]
> 
> ah something else I have found that looks quite interesting and may be
> used
> to get inspiration:
> 
> http://projects.congrace.de/exp4j/index.html
> 
> Thomas

-- 
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to