-- for x in [x0, xN].
--
-module ODE.IVP
+module ODE.IVP (
+ eulers_method,
+ eulers_method1,
+ eulers_methodH )
where
-import Misc (partition)
-import NumericPrelude hiding (abs)
-import qualified Algebra.Field as Field
-import qualified Algebra.ToInteger as ToInteger
-import qualified Algebra.ToRational as ToRational
-import qualified Algebra.RealField as RealField
+import Misc ( partition )
+import NumericPrelude hiding ( abs )
+import qualified Algebra.Field as Field ( C )
+import qualified Algebra.ToInteger as ToInteger ( C )
+import qualified Algebra.ToRational as ToRational ( C )
+import qualified Algebra.RealField as RealField ( C )
-- | A single iteration of Euler's method over the interval
-- [$x0$, $x0$+$h$].
-- >>> eulers_method1 x0 y0 f h
-- 2.0
--
-eulers_method1 :: (Field.C a, ToRational.C a, Field.C b)
+eulers_method1 :: forall a b. (Field.C a, ToRational.C a, Field.C b)
=> a -- ^ x0, the initial point
-> b -- ^ y0, the initial value at x0
-> (a -> b -> b) -- ^ The function f(x,y)
eulers_method1 x0 y0 f h =
y0 + h'*y'
where
- h' = fromRational'$ toRational h
+ h' = fromRational'$ toRational h :: b
y' = (f x0 y0)