
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