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