Difference between revisions of "Functional differentiation"

From HaskellWiki
Jump to: navigation, search
(Code)
(use correct type signature)
Line 13: Line 13:
 
and the Haskell programmer writes
 
and the Haskell programmer writes
 
<haskell>
 
<haskell>
derive :: a -> (a -> a) -> (a -> a)
+
derive :: (Fractional a) => a -> (a -> a) -> (a -> a)
 
derive h f x = (f (x+h) - f x) / h .
 
derive h f x = (f (x+h) - f x) / h .
 
</haskell>
 
</haskell>
Line 20: Line 20:
 
In Haskell <hask>derive h</hask> is called a higher order function for the same reason.
 
In Haskell <hask>derive h</hask> is called a higher order function for the same reason.
 
<math> D </math> is in curried form. If it would be uncurried, you would write <math> D(f,x) </math>.
 
<math> D </math> is in curried form. If it would be uncurried, you would write <math> D(f,x) </math>.
 
   
 
== Blog Posts ==
 
== Blog Posts ==

Revision as of 22:34, 8 December 2010

Introduction

Functional differentiation means computing or approximating the derivative of a function. There are several ways to do this:

  • Approximate the derivative f'(x) by \frac{f(x+h)-f(x)}{h} where h is close to zero. (or at best the square root of the machine precision \varepsilon.
  • Compute the derivative of f symbolically. This approach is particularly interesting for Haskell.

Functional analysis

If you want to explain the terms Higher order function and Currying to mathematicians, this is certainly a good example. The mathematician writes

 D f (x) = \lim_{h\to 0} \frac{f(x+h)-f(x)}{h}

and the Haskell programmer writes

derive :: (Fractional a) => a -> (a -> a) -> (a -> a)
derive h f x = (f (x+h) - f x) / h    .

Haskell's derive h approximates the mathematician's  D . In functional analysis  D is called a (linear) function operator, because it maps functions to functions. In Haskell derive h is called a higher order function for the same reason.  D is in curried form. If it would be uncurried, you would write  D(f,x) .

Blog Posts

There have been several blog posts on this recently. I think we should gather the information together and make a nice wiki article on it here. For now, here are links to articles on the topic.

Code