import Data.List (find)
-import Vector
+import Normed
import qualified Roots.Fast as F
-- at x0. We delegate to the version that returns the number of
-- iterations and simply discard the number of iterations.
--
-fixed_point :: (Vector a, RealFrac b)
+fixed_point :: (Normed a, RealFrac 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 :: (Vector a, RealFrac b)
+fixed_point_iteration_count :: (Normed a, RealFrac 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 :: (Vector a, RealFrac b)
+fixed_point_error_ratios :: (Normed a, RealFrac b)
=> (a -> a) -- ^ The function @f@ to iterate.
-> a -- ^ The initial value @x0@.
-> a -- ^ The true solution, @x_star@.
zipWith (/) en_plus_one en_exp
where
xn = F.fixed_point_iterations f x0
- en = map (\x -> norm_2 (x_star - x)) xn
+ en = map (\x -> norm (x_star - x)) xn
en_plus_one = tail en
en_exp = map (^p) en