-- where f is assumed to be continuous on the interval of interest.
--
-module Roots.Simple
+module Roots.Simple (
+ bisect,
+ fixed_point,
+ fixed_point_error_ratios,
+ fixed_point_iteration_count,
+ has_root,
+ newtons_method,
+ secant_method,
+ trisect )
where
import Data.List (find)
+import NumericPrelude hiding ( abs )
+import Algebra.Absolute ( abs )
+import qualified Algebra.Additive as Additive ( C )
+import qualified Algebra.Algebraic as Algebraic ( C )
+import qualified Algebra.Field as Field ( C )
+import qualified Algebra.RealField as RealField ( C )
+import qualified Algebra.RealRing as RealRing ( C )
-import Normed
+import Normed ( Normed(..) )
+import qualified Roots.Fast as F (
+ bisect,
+ fixed_point_iterations,
+ fixed_point_with_iterations,
+ has_root,
+ trisect )
-import qualified Roots.Fast as F
-
-import NumericPrelude hiding (abs)
-import Algebra.Absolute (abs)
-import qualified Algebra.Additive as Additive
-import qualified Algebra.Algebraic as Algebraic
-import qualified Algebra.Field as Field
-import qualified Algebra.RealField as RealField
-import qualified Algebra.RealRing as RealRing
-- | Does the (continuous) function @f@ have a root on the interval
-- [a,b]? If f(a) <] 0 and f(b) ]> 0, we know that there's a root in
-> (a -> a) -- ^ The derivative of @f@
-> a -- ^ Initial guess, x-naught
-> [a]
-newton_iterations f f' x0 =
- iterate next x0
+newton_iterations f f' =
+ iterate next
where
next xn =
xn - ( (f xn) / (f' xn) )
-> a -- ^ Initial guess, x-naught
-> a -- ^ Second initial guess, x-one
-> [a]
-secant_iterations f x0 x1 =
- iterate2 g x0 x1
+secant_iterations f =
+ iterate2 g
where
g prev2 prev1 =
let x_change = prev1 - prev2