| Copyright | (c) Edward Kmett 2010-2021 | 
|---|---|
| License | BSD3 | 
| Maintainer | ekmett@gmail.com | 
| Stability | experimental | 
| Portability | GHC only | 
| Safe Haskell | Safe-Inferred | 
| Language | Haskell2010 | 
Numeric.AD.Rank1.Sparse
Description
Higher order derivatives via a "dual number tower".
Synopsis
- data Sparse a
 - auto :: Mode t => Scalar t -> t
 - grad :: (Traversable f, Num a) => (f (Sparse a) -> Sparse a) -> f a -> f a
 - grad' :: (Traversable f, Num a) => (f (Sparse a) -> Sparse a) -> f a -> (a, f a)
 - gradWith :: (Traversable f, Num a) => (a -> a -> b) -> (f (Sparse a) -> Sparse a) -> f a -> f b
 - gradWith' :: (Traversable f, Num a) => (a -> a -> b) -> (f (Sparse a) -> Sparse a) -> f a -> (a, f b)
 - class Num a => Grad i o o' a | i -> a o o', o -> a i o', o' -> a i o
 - vgrad :: Grad i o o' a => i -> o
 - grads :: (Traversable f, Num a) => (f (Sparse a) -> Sparse a) -> f a -> Cofree f a
 - class Num a => Grads i o a | i -> a o, o -> a i
 - vgrads :: Grads i o a => i -> o
 - jacobian :: (Traversable f, Functor g, Num a) => (f (Sparse a) -> g (Sparse a)) -> f a -> g (f a)
 - jacobian' :: (Traversable f, Functor g, Num a) => (f (Sparse a) -> g (Sparse a)) -> f a -> g (a, f a)
 - jacobianWith :: (Traversable f, Functor g, Num a) => (a -> a -> b) -> (f (Sparse a) -> g (Sparse a)) -> f a -> g (f b)
 - jacobianWith' :: (Traversable f, Functor g, Num a) => (a -> a -> b) -> (f (Sparse a) -> g (Sparse a)) -> f a -> g (a, f b)
 - jacobians :: (Traversable f, Functor g, Num a) => (f (Sparse a) -> g (Sparse a)) -> f a -> g (Cofree f a)
 - hessian :: (Traversable f, Num a) => (f (Sparse a) -> Sparse a) -> f a -> f (f a)
 - hessian' :: (Traversable f, Num a) => (f (Sparse a) -> Sparse a) -> f a -> (a, f (a, f a))
 - hessianF :: (Traversable f, Functor g, Num a) => (f (Sparse a) -> g (Sparse a)) -> f a -> g (f (f a))
 - hessianF' :: (Traversable f, Functor g, Num a) => (f (Sparse a) -> g (Sparse a)) -> f a -> g (a, f (a, f a))
 
Documentation
We only store partials in sorted order, so the map contained in a partial
 will only contain partials with equal or greater keys to that of the map in
 which it was found. This should be key for efficiently computing sparse hessians.
 there are only n + k - 1 choose k distinct nth partial derivatives of a
 function with k inputs.
Instances
Sparse Gradients
gradWith :: (Traversable f, Num a) => (a -> a -> b) -> (f (Sparse a) -> Sparse a) -> f a -> f b Source #
gradWith' :: (Traversable f, Num a) => (a -> a -> b) -> (f (Sparse a) -> Sparse a) -> f a -> (a, f b) Source #
Variadic Gradients
Variadic combinators for variadic mixed-mode automatic differentiation.
Unfortunately, variadicity comes at the expense of being able to use
 quantification to avoid sensitivity confusion, so be careful when
 counting the number of auto calls you use when taking the gradient
 of a function that takes gradients!
class Num a => Grad i o o' a | i -> a o o', o -> a i o', o' -> a i o Source #
Higher-Order Gradients
Variadic Higher-Order Gradients
Sparse Jacobians (synonyms)
jacobian :: (Traversable f, Functor g, Num a) => (f (Sparse a) -> g (Sparse a)) -> f a -> g (f a) Source #
jacobian' :: (Traversable f, Functor g, Num a) => (f (Sparse a) -> g (Sparse a)) -> f a -> g (a, f a) Source #
jacobianWith :: (Traversable f, Functor g, Num a) => (a -> a -> b) -> (f (Sparse a) -> g (Sparse a)) -> f a -> g (f b) Source #
jacobianWith' :: (Traversable f, Functor g, Num a) => (a -> a -> b) -> (f (Sparse a) -> g (Sparse a)) -> f a -> g (a, f b) Source #
jacobians :: (Traversable f, Functor g, Num a) => (f (Sparse a) -> g (Sparse a)) -> f a -> g (Cofree f a) Source #