On Tue, May 19, 2009 at 9:08 AM, Martin Maechler <maech...@stat.math.ethz.ch> wrote: > [MM stumbling over on old thread ... he'd be interested] > >>>>>> "GaGr" == Gabor Grothendieck <ggrothendi...@gmail.com> >>>>>> on Wed, 15 Apr 2009 09:53:18 -0400 writes: > > GaGr> Not sure if this is sufficient for your needs but R does include > symbolic > GaGr> differentiation, see ?D, and the Ryacas and rSymPy > GaGr> packages interface R to the yacas and sympy computer algebra > GaGr> systems (CAS) and those system include symbolic differentiation. > > No, symbolic differentiation is not enough. > Automatic Differentiation (AD) is something much more general (in one > way) and much less mathematical from a classical view point: > But then, AD is much more generally useful for minimization as, basically, > the input is an R function > f(x) {with x multidimensional} > or f(x1,x2, ..., xp) {with scalar x1, x2, ..} > and the output is again an R function > which computes f() and all {or just selected} partial > derivatives d f / d{xi}. > > Now consider that the function f() can contain if() and while() > clauses and conceptually ever language feature of R. > In practice, I'm pretty sure the list of features would have to > be restricted, similarly as they'd have to for an R compiler to > be feasible. > > I agree that AD for R would be very nice and could be very > useful. > I'd also be interested to help AD people learn the S4 classes > and methods (hoping that it's close enough to what they call > "operator overloading" something I'd presume to be less general > than the powerful S4 class/methods system).
The overloading facilities present have already been discussed in this thread including a complete illustration of using them for the problem at hand. rSymPy and Ryacas both support overloading. Ryacas also supports automatic differentiation of one line R functions but its not fully developed and very limited. See demo("Ryacas-Function") which shows differentiation of the Burr CDF to get the PDF. Here are a few more simpler examples to illustrate overloading in these packages. > library(Ryacas) Loading required package: XML > x <- Sym("x") > x+x [1] "Starting Yacas!" expression(2 * x) > library(rSymPy) Loading required package: rJava > source("http://rsympy.googlecode.com/svn/trunk/R/Sym.R") > y <- Sym(sympy("var('y')")) > y+y [1] "2*y" Check the home pages of the packages for more info. ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel