Classes to perform differentiation of equations and various utility classes. The main class is {@link org.lsmp.djep.djep.DifferentiationVisitor DifferentiationVisitor} which performs the differentation by repeated applications of the chain, product and quotient rules. Typically the result of differentation should be simplified to remove occurences of redundant expressions (for example `diff(x^2.0,x)` is `2.0*x^1.0*1.0` which is simplified to `2.0*x`).

For each function, a rule is used to specify how to differentiate it. For example, the differative of `sin` is specified using

    addDiffRule(new MacroDiffRules(Jep,"sin","cos(x)"))

There are various classes of differentiation rules which all implement {@link org.lsmp.djep.djep.DiffRulesI DiffRulesI} and have special behaviours.

Variables can also be differentiated, and the derivative of `y` with respect to `x` will be represented by the {@link org.lsmp.djep.djep.PartialDerivative PartialDerivative} `dy/dx`. To allow this, the {@link org.lsmp.djep.djep.DVariable DVariable} is used to represent variable and {@link org.lsmp.djep.djep.DSymbolTable DSymbolTable} and {@link org.lsmp.djep.djep.DVariableFactory DVariableFactory} are used to control the look up of variables and the creation of new variables.

Sub-packages
org.lsmp.djep.djep.diffRules | Classes defining how to perform differentation of given functions.

@see DJep documentation