[Haskell-cafe] representing differencial equations in haskell

Henning Thielemann lemming at henning-thielemann.de
Tue Sep 25 09:20:50 EDT 2007


On Tue, 25 Sep 2007, Thomas Girod wrote:

> Let's say I have mathematical model composed of several differential
> equations, such as :
>
> di/dt = cos(i)
> dc/dt = alpha * (i(t) - c(t))
>
> (sorry my maths are really bad, but I hope you get the point)
>
> I would like to approximate the evolution of such a system iteratively. How
> would you do that in haskell ?

Solving differential equations in Haskell can be done in a very elegant 
manner. My favorite example:


  integrate :: Num a => a -> [a] -> [a]
  integrate = scanl (+)

  eulerExplicit :: Num a => (a -> a -> a) -> a -> a -> [a]
  eulerExplicit f x0 y0 =
     let x  = iterate (1+) x0
         y  = integrate y0 y'
         y' = zipWith f x y
     in  y


It's left as an exercise to extend this to two differential equations.


See also:

Jerzy Karczmarczuk: "Lazy Processing and Optimization of Discrete Sequences"
   http://users.info.unicaen.fr/~karczma/arpap/

http://darcs.haskell.org/htam/src/Numerics/ODEEuler.lhs


More information about the Haskell-Cafe mailing list