Class ChainRuleDiffRules
- java.lang.Object
-
- com.singularsys.extensions.djep.diffRules.ChainRuleDiffRules
-
- All Implemented Interfaces:
DiffRulesI
,JepComponent
,java.io.Serializable
- Direct Known Subclasses:
MacroDiffRules
,MacroFunctionDiffRules
public abstract class ChainRuleDiffRules extends java.lang.Object implements DiffRulesI
Abstract base class for function which are differentiated using the chain rule. All subclasses should specify thename
pfmc
rules
anddescriptions
fields. The rules specify the derivative of the function wrt i-th argument which is supplied as a Node Variable names in rules MUST be x,y for 1 to 2 variables. So for the functionf(x,y)
with two arguments if rules representingdf/dx
anddf/dy
are specified andx
andy
are functions of a further variablez
then the derivative wrt z is found using the chain ruledf(x,y)/dz -> df/dx * dx/dz + df/dy * dy/dz
.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected DeepCopyVisitor
copier
protected DifferentiationVisitor
dv
protected NodeFactory
nf
protected OperatorTableI
opSet
protected SubstitutionVisitor
subv
-
Constructor Summary
Constructors Modifier Constructor Description protected
ChainRuleDiffRules(DJep djep)
Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Node
differentiate(ASTFunNode node, java.lang.String var, Node[] children, Node[] dchildren)
Use the chain rule to differentiate.java.lang.String[]
getArgNames()
java.lang.String[]
getDescriptions()
JepComponent
getLightWeightInstance()
Gets a light-weight instance suitable for using in multiple threads.java.lang.String
getName()
returns the name of the functionint
getNumRules()
Returns the number of rules which should be number of arguments of functionPostfixMathCommandI
getPfmc()
returns the PostfixMathCommandI for the function.Node
getRule(int i)
returns the i-th rule as an expression tree.void
init(Jep djep)
Initialize the component.protected void
setup(java.lang.String funName, PostfixMathCommandI pfmc, Node[] rules, java.lang.String[] descriptions, java.lang.String[] argNames)
Set the internal variables for function with multiple argumentsprotected void
setup(java.lang.String funName, PostfixMathCommandI pfmc, Node rule1, Node rule2, java.lang.String description1, java.lang.String description2)
Set the internal variables for binary function with arguments named 'x' 'y'protected void
setup(java.lang.String funName, PostfixMathCommandI pfmc, Node rule, java.lang.String description)
Set the internal variables for unary function with argument named 'x'java.lang.String
toString()
Returns a string representation of the rule.
-
-
-
Field Detail
-
dv
protected DifferentiationVisitor dv
-
opSet
protected OperatorTableI opSet
-
nf
protected NodeFactory nf
-
copier
protected DeepCopyVisitor copier
-
subv
protected SubstitutionVisitor subv
-
-
Constructor Detail
-
ChainRuleDiffRules
protected ChainRuleDiffRules(DJep djep)
Constructor. Sub class should call a setup method to complete construction.
-
-
Method Detail
-
setup
protected void setup(java.lang.String funName, PostfixMathCommandI pfmc, Node rule, java.lang.String description)
Set the internal variables for unary function with argument named 'x'- Parameters:
funName
- name of functionpfmc
- Jep functionrule
- expression for derivative wrt 'x'description
- string rep of derivative
-
setup
protected void setup(java.lang.String funName, PostfixMathCommandI pfmc, Node rule1, Node rule2, java.lang.String description1, java.lang.String description2)
Set the internal variables for binary function with arguments named 'x' 'y'- Parameters:
funName
- name of functionpfmc
- Jep functionrule1
- expression for derivative wrt 'x'rule2
- expression for derivative wrt 'y'description1
- string rep of derivativedescription2
- string rep of derivative
-
setup
protected void setup(java.lang.String funName, PostfixMathCommandI pfmc, Node[] rules, java.lang.String[] descriptions, java.lang.String[] argNames)
Set the internal variables for function with multiple arguments- Parameters:
funName
- name of functionpfmc
- Jep functionrules
- expression for derivativesdescriptions
- text rep of derivativesargNames
- names of the variables of the function
-
differentiate
public Node differentiate(ASTFunNode node, java.lang.String var, Node[] children, Node[] dchildren) throws JepException
Use the chain rule to differentiate.diff(f(g(x),h(x)),x) -> df/dg * dg/dx + df/dh * dh/dx
- Specified by:
differentiate
in interfaceDiffRulesI
var
- The name of variable to differentiate wrt to.children
- the arguments of the functiondchildren
- the derivatives of each argument of the function.- Returns:
- top node of and expression tree for the derivative.
- Throws:
JepException
ParseException
- if there is some problem in compiling the derivative.
-
init
public void init(Jep djep)
Description copied from interface:JepComponent
Initialize the component. This methods is called whenever a component is added to Jep. Hence it allows components to keep track of the other components they may rely on.- Specified by:
init
in interfaceJepComponent
- Parameters:
djep
- the current Jep instance
-
getLightWeightInstance
public JepComponent getLightWeightInstance()
Description copied from interface:JepComponent
Gets a light-weight instance suitable for using in multiple threads.- Specified by:
getLightWeightInstance
in interfaceJepComponent
- Returns:
- either an new instance, null or 'this'.
-
getName
public java.lang.String getName()
returns the name of the function- Specified by:
getName
in interfaceDiffRulesI
-
getPfmc
public PostfixMathCommandI getPfmc()
returns the PostfixMathCommandI for the function.
-
getNumRules
public int getNumRules()
Returns the number of rules which should be number of arguments of function
-
getRule
public Node getRule(int i)
returns the i-th rule as an expression tree.
-
getDescriptions
public java.lang.String[] getDescriptions()
-
getArgNames
public java.lang.String[] getArgNames()
-
toString
public java.lang.String toString()
Description copied from interface:DiffRulesI
Returns a string representation of the rule.- Specified by:
toString
in interfaceDiffRulesI
- Overrides:
toString
in classjava.lang.Object
-
-