xs = partition n x0 xN
-- The 'go' function actually does all the work. It takes a list
- -- of intervals [(x0,x1), (x1, x2)...] and peels off the first
+ -- of intervals [(v0,v1), (v1, v2)...] and peels off the first
-- one. It then runs the single-step Euler's method on that
-- interval, and afterwards recurses down the rest of the list.
+ --
go :: [(a,a)] -> b -> (a -> b -> b) -> [b]
go [] _ _ = []
- go ((x0,x1):rest) y0 f = y1 : (go rest y1 f)
+ go ((v0,v1):rest) w0 g = w1 : (go rest w1 g)
where
- y1 = eulers_method1 x0 y0 f (x1 - x0)
+ w1 = eulers_method1 v0 w0 g (v1 - v0)
-- | Perform as many iterations of Euler's method over the interval
eulers_methodH x0 y0 xN f h =
eulers_method x0 y0 xN f n
where
+ n :: Integer
n = floor $ (xN - x0) / h