packages feed

ad 0.44.4 → 0.45.0

raw patch · 3 files changed

+95/−3 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Numeric.AD.Halley: (*^) :: (Mode t, Num a) => a -> t a -> t a
+ Numeric.AD.Halley: (<+>) :: (Mode t, Num a) => t a -> t a -> t a
+ Numeric.AD.Halley: (^*) :: (Mode t, Num a) => t a -> a -> t a
+ Numeric.AD.Halley: (^/) :: (Mode t, Fractional a) => t a -> a -> t a
+ Numeric.AD.Halley: AD :: f a -> AD f a
+ Numeric.AD.Halley: class (Lifted t) => Mode t
+ Numeric.AD.Halley: extremum :: (Fractional a) => UU a -> a -> [a]
+ Numeric.AD.Halley: findZero :: (Fractional a) => UU a -> a -> [a]
+ Numeric.AD.Halley: fixedPoint :: (Fractional a) => UU a -> a -> [a]
+ Numeric.AD.Halley: inverse :: (Fractional a) => UU a -> a -> a -> [a]
+ Numeric.AD.Halley: lift :: (Mode t, Num a) => a -> t a
+ Numeric.AD.Halley: newtype AD f a
+ Numeric.AD.Halley: runAD :: AD f a -> f a
+ Numeric.AD.Halley: type UF f a = forall s. (Mode s) => AD s a -> f (AD s a)
+ Numeric.AD.Halley: type FF f g a = forall s. (Mode s) => f (AD s a) -> g (AD s a)
+ Numeric.AD.Halley: zero :: (Mode t, Num a) => t a

Files

+ Numeric/AD/Halley.hs view
@@ -0,0 +1,88 @@+{-# LANGUAGE Rank2Types, BangPatterns, ScopedTypeVariables #-}+-----------------------------------------------------------------------------+-- |+-- Module      :  Numeric.AD.Halley+-- Copyright   :  (c) Edward Kmett 2010+-- License     :  BSD3+-- Maintainer  :  ekmett@gmail.com+-- Stability   :  experimental+-- Portability :  GHC only+--+-- Root finding using Halley's rational method (the second in +-- the class of Householder methods). Assumes the function is three +-- times continuously differentiable and converges cubically when +-- progress can be made.+-- +-----------------------------------------------------------------------------++module Numeric.AD.Halley+    (+    -- * Halley's Method (Tower AD)+      findZero+    , inverse+    , fixedPoint+    , extremum+    -- * Exposed Types+    , UU, UF, FU, FF+    , AD(..)+    , Mode(..)+    ) where++import Prelude hiding (all)+-- import Data.Foldable (all)+-- import Data.Traversable (Traversable)+import Numeric.AD.Types+import Numeric.AD.Classes+import Numeric.AD.Mode.Tower (diffs0)+import Numeric.AD.Mode.Forward (diff) -- , diff')+-- import Numeric.AD.Mode.Reverse (gradWith')+import Numeric.AD.Internal.Composition++-- | The 'findZero' function finds a zero of a scalar function using+-- Halley's method; its output is a stream of increasingly accurate+-- results.  (Modulo the usual caveats.) +--+-- Examples:+--+--  > take 10 $ findZero (\\x->x^2-4) 1  -- converge to 2.0+--+--  > module Data.Complex+--  > take 10 $ findZero ((+1).(^2)) (1 :+ 1)  -- converge to (0 :+ 1)@+--+findZero :: Fractional a => UU a -> a -> [a]+findZero f = go+    where+        go x = x : go (x - 2*y*y'/(2*y'*y'-y*y''))+            where+                (y:y':y'':_) = diffs0 f x+{-# INLINE findZero #-}++-- | The 'inverse' function inverts a scalar function using+-- Halley's method; its output is a stream of increasingly accurate+-- results.  (Modulo the usual caveats.)+--+-- Note: the @take 10 $ inverse sqrt 1 (sqrt 10)@ example that works for Newton's method+-- fails with Halley's method because the preconditions do not hold.++inverse :: Fractional a => UU a -> a -> a -> [a]+inverse f x0 y = findZero (\x -> f x - lift y) x0+{-# INLINE inverse  #-}++-- | The 'fixedPoint' function find a fixedpoint of a scalar+-- function using Halley's method; its output is a stream of+-- increasingly accurate results.  (Modulo the usual caveats.)+-- +-- > take 10 $ fixedPoint cos 1 -- converges to 0.7390851332151607+fixedPoint :: Fractional a => UU a -> a -> [a]+fixedPoint f = findZero (\x -> f x - x)+{-# INLINE fixedPoint #-}++-- | The 'extremum' function finds an extremum of a scalar+-- function using Halley's method; produces a stream of increasingly+-- accurate results.  (Modulo the usual caveats.)+--+-- > take 10 $ extremum cos 1 -- convert to 0 +extremum :: Fractional a => UU a -> a -> [a]+extremum f = findZero (diff (decomposeMode . f . composeMode))+{-# INLINE extremum #-}+
Numeric/AD/Internal/Classes.hs view
@@ -35,7 +35,6 @@ infixl 6 +!, -!, <+> infix 4 ==! - class Iso a b where     iso :: f a -> f b     osi :: f b -> f a
ad.cabal view
@@ -1,5 +1,5 @@ name:         ad-version:      0.44.4+version:      0.45.0 license:      BSD3 license-File: LICENSE copyright:    (c) Edward Kmett 2010,@@ -8,7 +8,7 @@ maintainer:   ekmett@gmail.com stability:    Experimental category:     Math-homepage:     http://patch-tag.com/r/ekmett/ad+homepage:     http://github.com/ekmett/ad synopsis:     Automatic Differentiation description:       Forward-, reverse- and mixed- mode automatic differentiation combinators with a common API.@@ -56,6 +56,10 @@     .     * @0@ means that the resulting derivative list is padded with 0s at the end.     .+    Changes since 0.44.5+    .+    * Added Halley's method+    .     Changes since 0.40.0     .     * Fixed bug fix for @'(/)' :: (Mode s, Fractional a) => AD s a@@@ -85,6 +89,7 @@     Numeric.AD.Classes     Numeric.AD.Types     Numeric.AD.Newton+    Numeric.AD.Halley      Numeric.AD.Internal.Classes     Numeric.AD.Internal.Combinators