1 8 package org.lsmp.djep.djep.diffRules; 9 10 import org.nfunk.jep.ASTFunNode; 11 import org.nfunk.jep.Node; 12 import org.nfunk.jep.ParseException; 13 import org.lsmp.djep.djep.DJep; 14 import org.lsmp.djep.djep.DiffRulesI; 15 import org.lsmp.djep.xjep.*; 16 17 21 public class DivideDiffRule implements DiffRulesI 22 { 23 private String name; 24 26 private DivideDiffRule() {} 27 public DivideDiffRule(String inName) 28 { 29 name = inName; 31 } 32 33 public String toString() 34 { return name + " \t\tdiff(f/g,x) -> (diff(f,x)*g-f*diff(g,x))/(g*g)"; } 35 public String getName() { return name; } 36 37 public Node differentiate(ASTFunNode node,String var,Node [] children,Node [] dchildren,DJep djep) throws ParseException 38 { 39 XOperatorSet op = (XOperatorSet) djep.getOperatorSet(); 40 NodeFactory nf = djep.getNodeFactory(); 41 42 int nchild = node.jjtGetNumChildren(); 43 if(nchild==2) return 44 nf.buildOperatorNode(op.getDivide(), 45 nf.buildOperatorNode(op.getSubtract(), 46 nf.buildOperatorNode(op.getMultiply(), 47 dchildren[0], 48 djep.deepCopy(children[1])), 49 nf.buildOperatorNode(op.getMultiply(), 50 djep.deepCopy(children[0]), 51 dchildren[1])), 52 nf.buildOperatorNode(op.getMultiply(), 53 djep.deepCopy(children[1]), 54 djep.deepCopy(children[1]))); 55 else 56 throw new ParseException("Too many children "+nchild+" for "+node+"\n"); 57 } 58 } 59 | Popular Tags |