>
> The issue is that without an extensible derivative table or the proposed
> extensions, it is not possible to automatically produce (without manual
> modification of the deriv3 output) a function that avoids catastrophic
> cancellation regardless of the working range.
> Manual modification is not onerous as a one-time exercise, but can be time
> consuming when it must be done numerous times, for example when evaluating
> the impact of different parameterizations on parameter effects curvature.
> The alternative of more flexible differentiation does not seem to be a
> difficult addition to R. In S+ (which does not have deriv3) it would simply
> involve adding the following lines to the switch statement in D
>
> expm1 = make.call("*", make.call("exp", expr[[2]]), D(expr[[2]], name)),
> log1p = make.call("/", D(expr[[2]], name), make.call("+", 1., expr[[2]])),
> log2 = make.call("/", make.call("/", D(expr[[2]], name), expr[[2]]),
> quote(log(2)) ),
> log10 = make.call("/", make.call("/", D(expr[[2]], name), expr[[2]]),
> quote(log(10)) ),
> cospi = make.call("*", make.call("*", make.call("sinpi", expr[[2]]),
> make.call("-", D(expr[[2]], name))), quote(pi)),
> sinpi = make.call("*", make.call("*", make.call("cospi", expr[[2]]),
> D(expr[[2]], name)), quote(pi)),
> tanpi = make.call("/", make.call("*", D(expr[[2]], name), quote(pi)),
> make.call("^", make.call("cospi", expr[[2]]), 2)),
>
> Jerry
You are right, Jerry, it would be nice if R's derivative table
could be extended by the useR using simple R code.
As Duncan Murdoch has mentioned already, this is now provided as
a byproduct of the functionality in the CRAN package 'nlsr'
{after that is tweaked, as you mentioned}, which is nice and
good to know (for all of us).
As one person who knows how important it may be to avoid cancellation,
I still would be willing to add to the "derivatives table" in
R's C source if people like you provided a (tested!) patch to
the source, which is in
https://svn.r-project.org/R/trunk/src/library/stats/src/deriv.c
Martin
> From: Avraham Adler [mailto:[email protected]]
> Sent: Friday, February 17, 2017 4:16 PM
> To: Jerry Lewis; [email protected]
> Subject: Re: [Rd] Wish List: Extensions to the derivatives table
>
> Hi.
>
> Unless I'm misremembering, log, exp, sin, cos, and tan are all handled in
> deriv3. The functions listed are specially coded slightly more accurate
> versions but can be substituted with native ones for which deriv/deriv3 will
> work automatically. I believe that if you write your functions using log(a +
> 1) instead of log1p(a) or log(x) / log(2) instead of log2(x) deriv3 will work
> fine.
> Thanks,
> Avi
>
> On Fri, Feb 17, 2017 at 2:02 PM Jerry Lewis
> <[email protected]<mailto:[email protected]>> wrote:
> The derivative table resides in the function D. In S+ that table is
> extensible because it is written in the S language. R is faster but less
> flexible, since that table is programmed in C. It would be useful if R
> provided a mechanism for extending the derivative table, or barring that,
> provided a broader table. Currently unsupported mathematical functions of
> one argument include expm1, log1p, log2, log10, cospi, sinpi, and tanpi.
>
> While manual differentiation of these proposed additions is straight-forward,
> their absence complicates what otherwise could be much simpler, such as using
> deriv() or deriv3() to generate functions, for example to use as an nls model.
>
> Thanks,
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel