import NumericPrelude hiding (abs)
import qualified Algebra.Absolute as Absolute
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
-- at x0. We delegate to the version that returns the number of
-- iterations and simply discard the number of iterations.
--
-fixed_point :: (Normed a, RealField.C b)
+fixed_point :: (Normed a, Algebraic.C a, Algebraic.C b, RealField.C b)
=> (a -> a) -- ^ The function @f@ to iterate.
-> b -- ^ The tolerance, @epsilon@.
-> a -- ^ The initial value @x0@.
-- the function @f@ with the search starting at x0 and tolerance
-- @epsilon@. We delegate to the version that returns the number of
-- iterations and simply discard the fixed point.
-fixed_point_iteration_count :: (Normed a, RealField.C b)
+fixed_point_iteration_count :: (Normed a,
+ Algebraic.C a,
+ RealField.C b,
+ Algebraic.C b)
=> (a -> a) -- ^ The function @f@ to iterate.
-> b -- ^ The tolerance, @epsilon@.
-> a -- ^ The initial value @x0@.
--
-- This is used to determine the rate of convergence.
--
-fixed_point_error_ratios :: (Normed a, RealField.C b)
+fixed_point_error_ratios :: (Normed a,
+ Additive.C a,
+ RealField.C b,
+ Algebraic.C b)
=> (a -> a) -- ^ The function @f@ to iterate.
-> a -- ^ The initial value @x0@.
-> a -- ^ The true solution, @x_star@.