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
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,
[[alternative HTML version deleted]]
______________________________________________
[email protected]<mailto:[email protected]> mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel<https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwMFaQ&c=n7UHtw8cUfEZZQ61ciL2BA&r=xs_tXUrv91YrLJDF556854t-QoeZJZaWm9FEXA9zM5g&m=-A1aEBZHHGplCfEF7yE3w1qkXptmiyra-em-DMThcAU&s=GJ4FysAkXSzYkfhgXMcAnPtGKT6syHkLAJp9JtkLVik&e=>
--
Sent from Gmail Mobile
[[alternative HTML version deleted]]
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel