KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > lsmp > djep > djep > diffRules > DivideDiffRule


1 /* @author rich
2  * Created on 04-Jul-2003
3  *
4  * This code is covered by a Creative Commons
5  * Attribution, Non Commercial, Share Alike license
6  * <a HREF="http://creativecommons.org/licenses/by-nc-sa/1.0">License</a>
7  */

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 /**
18    * Diffrentiates a division with respect to var.
19    * diff(y/z,x) -> (diff(y,x)*z-y*diff(z,x))/(z*z)
20    */

21   public class DivideDiffRule implements DiffRulesI
22   {
23     private String JavaDoc name;
24     //private DifferentationVisitor dv;
25

26     private DivideDiffRule() {}
27     public DivideDiffRule(String JavaDoc inName)
28     {
29       //dv = inDv;
30
name = inName;
31     }
32
33     public String JavaDoc toString()
34     { return name + " \t\tdiff(f/g,x) -> (diff(f,x)*g-f*diff(g,x))/(g*g)"; }
35     public String JavaDoc getName() { return name; }
36     
37     public Node differentiate(ASTFunNode node,String JavaDoc 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   } /* end DivideDiffRule */
59
Popular Tags