/** * Create a function in any dimension evaluation. * * <p>The function may have many independent variables. * * <p> * * <h3>List of commands</h3> * * <ul> * <li>( ) parenthesis , comma * <li>+, -, unary -, unary + * <li>*, / * <li>^ (raise to a power) * <li>pi, e, All the constants in class SpecialFunction * <li>log * <li>sin, cos, tan, sinh, cosh, tanh * <li>asin, acos, atan, asinh, acosh, atanh * <li>sqrt * <li>rand * <li>exp * <li>remainder * <li>atan2 * <li>Special functions and constants. Look at the book * <li>All the functions in class SpecialFunction * <li>Independent variables x * <li>Scientific notation using "e", "E", "d", "D". * </ul> * * @prama title Title of the function * @param name String representing the function * @param vars String representing variables. Each variable should be separated by a comma. * Example "x,y,z" */ public FND(String title, String name, String vars) { this.title = title; proxy = new FProxy(3, title, name, null, new double[] {0, 0, 0, 0, 0, 0}, maxpoints, true); name = proxy.getName(); proxy.setVariables(vars); setTitle(title); lpp.setType(LinePars.F1D); jep = new XJep(); jep.addStandardConstants(); jep.addStandardFunctions(); jep.setAllowUndeclared(true); jep.setImplicitMul(true); jep.setAllowAssignment(true); // get all variables avars = vars.split(","); for (int i = 0; i < avars.length; i++) { jep.addVariable(avars[i].trim(), 0); } jep.addVariable("x", 0); try { node = jep.parse(name); processed = jep.preprocess(node); } catch (ParseException e) { } catch (Exception e) { ErrorMessage("Error in parsing " + name); } }
/** * Initialize function from proxy. * * @param f */ public FND(FProxy f) { proxy = f; String name = proxy.getName(); if (proxy.getType() != 4) { ErrorMessage("Error in parsing FND. Wrong type! " + name); return; } setTitle(proxy.getTitle()); lpp.setType(LinePars.F1D); jep = new XJep(); jep.addStandardConstants(); jep.addStandardFunctions(); jep.setAllowUndeclared(true); jep.setImplicitMul(true); jep.setAllowAssignment(true); // get all variables String vars = proxy.getVariables(); avars = vars.split(","); for (int i = 0; i < avars.length; i++) { jep.addVariable(avars[i].trim(), 0); } jep.addVariable("x", 0); try { node = jep.parse(name); processed = jep.preprocess(node); } catch (ParseException e) { } catch (Exception e) { ErrorMessage("Error in parsing " + name); } }
/** * Create a differention rule for function with 2 arguments. The rules must be in terms of "x" and * "y" * * @param inName name of function * @param inPfmc PostfixMathCommandI for function * @param rule1 a string represention differation of function wrt "x" * @param rule2 a string represention differation of function wrt "y" * @throws ParseException */ private MacroDiffRules( DJep djep, String inName, PostfixMathCommandI inPfmc, String rule1, String rule2) throws ParseException { name = inName; pfmc = inPfmc; if (pfmc != null) { int nParam = pfmc.getNumberOfParameters(); if (nParam != 2) { throw new ParseException( "Number of rules must match number of parameters for " + inName + " which is " + nParam); } } XSymbolTable localSymTab = (XSymbolTable) ((XSymbolTable) djep.getSymbolTable()).newInstance(); // new // SymbolTable(); localSymTab.copyConstants(djep.getSymbolTable()); XJep localJep = djep.newInstance(localSymTab); Node node1 = localJep.parse(rule1); Node node2 = localJep.parse(rule2); rules = new Node[2]; rules[0] = node1; rules[1] = node2; }
public void simplifyTestString(String expr, String expected) throws ParseException { XJep xj = (XJep) j; Node node = xj.parse(expr); Node processed = xj.preprocess(node); Node simp = xj.simplify(processed); String res = xj.toString(simp); if (!expected.equals(res)) System.out.println( "Error: Value of \"" + expr + "\" is \"" + res + "\" should be \"" + expected + "\""); assertEquals("<" + expr + ">", expected, res); System.out.println("Success: Value of \"" + expr + "\" is \"" + res + "\""); }
/** * Create a differentation rule for function with n arguments. The rules must be in terms of "x1", * "x2", ... "xn" * * @param inName name of function * @param inPfmc PostfixMathCommandI for function * @throws ParseException */ private MacroDiffRules(DJep djep, String inName, PostfixMathCommandI inPfmc, String[] inRules) throws ParseException { name = inName; pfmc = inPfmc; if (pfmc != null) { int nParam = pfmc.getNumberOfParameters(); if (nParam != inRules.length) { throw new ParseException( "Number of rules must match number of parameters for " + inName + " which is " + nParam); } } XSymbolTable localSymTab = (XSymbolTable) ((XSymbolTable) djep.getSymbolTable()).newInstance(); localSymTab.copyConstants(djep.getSymbolTable()); XJep localJep = djep.newInstance(localSymTab); rules = new Node[inRules.length]; for (int i = 0; i < inRules.length; ++i) { rules[i] = localJep.parse(inRules[i]); } }