Provided by: tcllib_1.15-dfsg-2_all bug


       symdiff - Symbolic differentiation for Tcl


       package require Tcl  8.5

       package require grammar::aycock  1.0

       package require math::calculus::symdiff  1.0

       math::calculus::symdiff::symdiff expression variable

       math::calculus::jacobian variableDict



       The  math::calculus::symdiff  package provides a symbolic differentiation facility for Tcl
       math expressions. It is useful for providing derivatives to packages that  either  require
       the  Jacobian of a set of functions or else are more efficient or stable when the Jacobian
       is provided.


       The math::calculus::symdiff package exports the two procedures:

       math::calculus::symdiff::symdiff expression variable
              Differentiates the given expression with respect to the  specified  variable.  (See
              Expressions  below  for a discussion of the subset of Tcl math expressions that are
              acceptable to math::calculus::symdiff.)   The  result  is  a  Tcl  expression  that
              evaluates  the  derivative.  Returns  an  error  if expression is not a well-formed
              expression or is not differentiable.

       math::calculus::jacobian variableDict
              Computes the Jacobian of a system  of  equations.   The  system  is  given  by  the
              dictionary  variableDict,  whose keys are the names of variables in the system, and
              whose values are Tcl  expressions  giving  the  values  of  those  variables.  (See
              Expressions  below  for a discussion of the subset of Tcl math expressions that are
              acceptable to math::calculus::symdiff. The result is a  list  of  lists:  the  i'th
              element  of  the  j'th  sublist is the partial derivative of the i'th variable with
              respect to the j'th variable. Returns an error if any of the expressions cannot  be
              differentiated, or if variableDict is not a well-formed dictionary.


       The  math::calculus::symdiff  package  accepts only a small subset of the expressions that
       are acceptable to Tcl commands such as expr or  if.   Specifically,  the  only  constructs
       accepted are:

       ·      Floating-point constants such as 5 or 3.14159e+00.

       ·      References to Tcl variable using $-substitution. The variable names must consist of
              alphanumerics and underscores: the ${...} notation is not accepted.

       ·      Parentheses.

       ·      The +, -, *, /. and ** operators.

       ·      Calls to the functions acos, asin, atan, atan2, cos, cosh, exp, hypot, log,  log10,
              pow, sin, sinh. sqrt, tan, and tanh.

       Command substitution, backslash substitution, and argument expansion are not accepted.


              math::calculus::symdiff::symdiff {($a*$x+$b)*($c*$x+$d)} x
              ==> (($c * (($a * $x) + $b)) + ($a * (($c * $x) + $d)))
              math::calculus::symdiff::jacobian {x {$a * $x + $b * $y}
              y {$c * $x + $d * $y}}
              ==> {{$a} {$b}} {{$c} {$d}}


       This  document,  and  the  package  it  describes, will undoubtedly contain bugs and other
       problems.  Please report such in the category math :: calculus of the Tcllib  SF  Trackers
       [].    Please  also  report  any  ideas  for
       enhancements you may have for either package and/or documentation.


       math::calculus, math::interpolate


       Copyright (c) 2010 by Kevin B. Kenny <>
       Redistribution permitted under the terms of the Open Publication License <>