| Copyright | (c) Edward Kmett 2010-2015 |
|---|---|
| License | BSD3 |
| Maintainer | ekmett@gmail.com |
| Stability | experimental |
| Portability | GHC only |
| Safe Haskell | None |
| Language | Haskell2010 |
Numeric.AD.Mode.Sparse
Description
Higher order derivatives via a "dual number tower".
Synopsis
- data AD s a
- data Sparse a
- auto :: Mode t => Scalar t -> t
- grad :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> f a
- grad' :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> (a, f a)
- grads :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> Cofree f a
- gradWith :: (Traversable f, Num a) => (a -> a -> b) -> (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> f b
- gradWith' :: (Traversable f, Num a) => (a -> a -> b) -> (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> (a, f b)
- jacobian :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (f a)
- jacobian' :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (a, f a)
- jacobianWith :: (Traversable f, Functor g, Num a) => (a -> a -> b) -> (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (f b)
- jacobianWith' :: (Traversable f, Functor g, Num a) => (a -> a -> b) -> (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (a, f b)
- jacobians :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (Cofree f a)
- hessian :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> f (f a)
- hessian' :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> (a, f (a, f a))
- hessianF :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (f (f a))
- hessianF' :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (a, f (a, f a))
Documentation
Instances
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
| (Num a, Bounded a) => Bounded (Sparse a) # | |
| (Num a, Enum a) => Enum (Sparse a) # | |
Defined in Numeric.AD.Internal.Sparse | |
| (Num a, Eq a) => Eq (Sparse a) # | |
| Floating a => Floating (Sparse a) # | |
Defined in Numeric.AD.Internal.Sparse Methods sqrt :: Sparse a -> Sparse a # (**) :: Sparse a -> Sparse a -> Sparse a # logBase :: Sparse a -> Sparse a -> Sparse a # asin :: Sparse a -> Sparse a # acos :: Sparse a -> Sparse a # atan :: Sparse a -> Sparse a # sinh :: Sparse a -> Sparse a # cosh :: Sparse a -> Sparse a # tanh :: Sparse a -> Sparse a # asinh :: Sparse a -> Sparse a # acosh :: Sparse a -> Sparse a # atanh :: Sparse a -> Sparse a # log1p :: Sparse a -> Sparse a # expm1 :: Sparse a -> Sparse a # | |
| Fractional a => Fractional (Sparse a) # | |
| Data a => Data (Sparse a) # | |
Defined in Numeric.AD.Internal.Sparse Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Sparse a -> c (Sparse a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Sparse a) # toConstr :: Sparse a -> Constr # dataTypeOf :: Sparse a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Sparse a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Sparse a)) # gmapT :: (forall b. Data b => b -> b) -> Sparse a -> Sparse a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Sparse a -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Sparse a -> r # gmapQ :: (forall d. Data d => d -> u) -> Sparse a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Sparse a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Sparse a -> m (Sparse a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Sparse a -> m (Sparse a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Sparse a -> m (Sparse a) # | |
| Num a => Num (Sparse a) # | |
| (Num a, Ord a) => Ord (Sparse a) # | |
Defined in Numeric.AD.Internal.Sparse | |
| Real a => Real (Sparse a) # | |
Defined in Numeric.AD.Internal.Sparse Methods toRational :: Sparse a -> Rational # | |
| RealFloat a => RealFloat (Sparse a) # | |
Defined in Numeric.AD.Internal.Sparse Methods floatRadix :: Sparse a -> Integer # floatDigits :: Sparse a -> Int # floatRange :: Sparse a -> (Int, Int) # decodeFloat :: Sparse a -> (Integer, Int) # encodeFloat :: Integer -> Int -> Sparse a # significand :: Sparse a -> Sparse a # scaleFloat :: Int -> Sparse a -> Sparse a # isInfinite :: Sparse a -> Bool # isDenormalized :: Sparse a -> Bool # isNegativeZero :: Sparse a -> Bool # | |
| RealFrac a => RealFrac (Sparse a) # | |
| Show a => Show (Sparse a) # | |
| Erf a => Erf (Sparse a) # | |
| InvErf a => InvErf (Sparse a) # | |
| Num a => Mode (Sparse a) # | |
Defined in Numeric.AD.Internal.Sparse | |
| Num a => Jacobian (Sparse a) # | |
Defined in Numeric.AD.Internal.Sparse Methods unary :: (Scalar (Sparse a) -> Scalar (Sparse a)) -> D (Sparse a) -> Sparse a -> Sparse a # lift1 :: (Scalar (Sparse a) -> Scalar (Sparse a)) -> (D (Sparse a) -> D (Sparse a)) -> Sparse a -> Sparse a # lift1_ :: (Scalar (Sparse a) -> Scalar (Sparse a)) -> (D (Sparse a) -> D (Sparse a) -> D (Sparse a)) -> Sparse a -> Sparse a # binary :: (Scalar (Sparse a) -> Scalar (Sparse a) -> Scalar (Sparse a)) -> D (Sparse a) -> D (Sparse a) -> Sparse a -> Sparse a -> Sparse a # lift2 :: (Scalar (Sparse a) -> Scalar (Sparse a) -> Scalar (Sparse a)) -> (D (Sparse a) -> D (Sparse a) -> (D (Sparse a), D (Sparse a))) -> Sparse a -> Sparse a -> Sparse a # lift2_ :: (Scalar (Sparse a) -> Scalar (Sparse a) -> Scalar (Sparse a)) -> (D (Sparse a) -> D (Sparse a) -> D (Sparse a) -> (D (Sparse a), D (Sparse a))) -> Sparse a -> Sparse a -> Sparse a # | |
| Num a => Grad (Sparse a) [a] (a, [a]) a # | |
| Num a => Grads (Sparse a) (Cofree [] a) a # | |
| Grads i o a => Grads (Sparse a -> i) (a -> o) a # | |
| Grad i o o' a => Grad (Sparse a -> i) (a -> o) (a -> o') a # | |
| type Scalar (Sparse a) # | |
Defined in Numeric.AD.Internal.Sparse | |
| type D (Sparse a) # | |
Defined in Numeric.AD.Internal.Sparse | |
Sparse Gradients
grad :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> f a #
The grad function calculates the gradient of a non-scalar-to-scalar function with sparse-mode AD in a single pass.
>>>grad (\[x,y,z] -> x*y+z) [1,2,3][2,1,1]
>>>grad (\[x,y] -> x**y) [0,2][0.0,NaN]
grad' :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> (a, f a) #
grads :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> Cofree f a #
gradWith :: (Traversable f, Num a) => (a -> a -> b) -> (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> f b #
gradWith' :: (Traversable f, Num a) => (a -> a -> b) -> (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> (a, f b) #
Sparse Jacobians (synonyms)
jacobian :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (f a) #
jacobian' :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (a, f a) #
jacobianWith :: (Traversable f, Functor g, Num a) => (a -> a -> b) -> (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (f b) #
jacobianWith' :: (Traversable f, Functor g, Num a) => (a -> a -> b) -> (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (a, f b) #
jacobians :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (Cofree f a) #
Sparse Hessians
hessian :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> f (f a) #
hessian' :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> (a, f (a, f a)) #