View source: R/discrete_calculus.R
discrete_deriv | R Documentation |
Computes the discrete derivative of a function (or vector of function evaluations) of a given order, with respect to given design points, and evaluated at a given query point.
discrete_deriv(f, k, xd, x)
f |
Function, or vector of function evaluations at |
k |
Order for the discrete derivative calculation. Must be >= 0. |
xd |
Design points. Must be sorted in increasing order, and have length
at least |
x |
Query point(s). |
The discrete derivative operator of order k
, with respect
design points x_1 < \ldots < x_n
, is denoted \Delta^k_n
. Acting
on a function f
, and evaluated at a query point x
, it yields:
(\Delta^k_n f) (x) =
\begin{cases}
k! \cdot f[x_{i-k+1},\ldots,x_i,x] & \text{if $x \in (x_i,x_{i+1}]$, $i
\geq k$} \\
i! \cdot f[x_1,\ldots,x_i,x] & \text{if $x \in (x_i,x_{i+1}]$, $i < k$} \\
f(x) & \text{if $x \leq x_1$},
\end{cases}
where we take x_{n+1} = \infty
for convenience. In other words, for
"most" points x > x_k
, we define (\Delta^k_n f)(x)
in terms of
a (scaled) divided difference of f
of order k
, where the
centers are the k
points immediately to the left of x
, and
x
itself. Meanwhile, for "boundary" points x \leq x_k
, we
define (\Delta^k_n f)(x)
to be a (scaled) divided difference of
f
of the highest possible order, where the centers are the points to
the left of x
, and x
itself. For more discussion, including
alternative representations for the discrete differentiation, see Section
3.1 of Tibshirani (2020).
Note: for calculating discrete derivatives at the design points
themselves, which could be achieved by taking x = xd
in the current
function, one should instead use b_mat_mult()
or d_mat_mult()
, as these
will be more efficient (both will be linear-time, but the latter functions
will be faster).
Discrete derivative of f
of order k
, with respect to design
points xd
, evaluated at the query point(s) x
.
Tibshirani (2020), "Divided differences, falling factorials, and discrete splines: Another look at trend filtering and related problems", Section 3.1.
b_mat_mult()
, d_mat_mult()
for multiplication by the extended
and non-extended discrete derivative matrices, giving discrete derivatives
at design points.
xd = 1:10 / 10
discrete_deriv(function(x) x^2, 1, xd, xd)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.