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
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to