1 8 package org.lsmp.djep.djep.diffRules; 9 10 import org.lsmp.djep.djep.DJep; 11 import org.lsmp.djep.djep.DiffRulesI; 12 import org.lsmp.djep.xjep.*; 13 import org.nfunk.jep.*; 14 15 16 23 24 public class PowerDiffRule implements DiffRulesI 25 { 26 private String name; 27 private PowerDiffRule() {} 28 public PowerDiffRule(String inName) 29 { 30 name = inName; 31 } 32 33 public String toString() 34 { return name + " \t\tdiff(f*g,x) -> diff(f,x)*g+f*diff(g,x)"; } 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 OperatorSet op = djep.getOperatorSet(); 40 NodeFactory nf = djep.getNodeFactory(); 41 TreeUtils tu = djep.getTreeUtils(); 42 FunctionTable funTab = djep.getFunctionTable(); 43 44 int nchild = node.jjtGetNumChildren(); 45 if(nchild!=2) 46 throw new ParseException("Too many children "+nchild+" for "+node+"\n"); 47 49 if(tu.isConstant(children[1])) 50 { 51 ASTConstant c = (ASTConstant) children[1]; 52 Object value = c.getValue(); 53 if(value instanceof Double ) 54 { 61 return nf.buildOperatorNode(op.getMultiply(), 62 djep.deepCopy(children[1]), 63 nf.buildOperatorNode(op.getMultiply(), 64 nf.buildOperatorNode(op.getPower(), 65 djep.deepCopy(children[0]), 66 nf.buildConstantNode( tu.getNumber(((Double ) value).doubleValue()-1.0))), 67 dchildren[0])); 68 } 69 else 70 { 71 return nf.buildOperatorNode(op.getMultiply(), 72 djep.deepCopy(children[1]), 73 nf.buildOperatorNode(op.getMultiply(), 74 nf.buildOperatorNode(op.getPower(), 75 djep.deepCopy(children[0]), 76 nf.buildOperatorNode(op.getSubtract(), 77 djep.deepCopy(children[1]), 78 nf.buildConstantNode(tu.getONE()))), 79 dchildren[0])); 80 } 81 } 82 else { 84 return nf.buildOperatorNode(op.getAdd(), 85 nf.buildOperatorNode(op.getMultiply(), nf.buildOperatorNode(op.getMultiply(), djep.deepCopy(children[1]), nf.buildOperatorNode(op.getPower(), djep.deepCopy(children[0]), nf.buildOperatorNode(op.getSubtract(), djep.deepCopy(children[1]), djep.getNodeFactory().buildConstantNode(tu.getONE()) ))), 93 dchildren[0]), nf.buildOperatorNode(op.getMultiply(), nf.buildOperatorNode(op.getMultiply(), 96 nf.buildOperatorNode(op.getPower(), djep.deepCopy(children[0]), 98 djep.deepCopy(children[1])), 99 djep.getNodeFactory().buildFunctionNode("ln",funTab.get("ln"), new Node[]{djep.deepCopy(children[0])})), 101 dchildren[1])); 102 } 104 } 105 } 106 | Popular Tags |