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 +88/−0
- Numeric/AD/Internal/Classes.hs +0/−1
- ad.cabal +7/−2
+ 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