+
+
+
+-- | Find a fixed point of the function @f@ with the search starting
+-- at x0. We delegate to the version that returns the number of
+-- iterations and simply discard the number of iterations.
+--
+fixed_point :: (Normed a, RealFrac b)
+ => (a -> a) -- ^ The function @f@ to iterate.
+ -> b -- ^ The tolerance, @epsilon@.
+ -> a -- ^ The initial value @x0@.
+ -> a -- ^ The fixed point.
+fixed_point f epsilon x0 =
+ snd $ F.fixed_point_with_iterations f epsilon x0
+
+
+-- | Return the number of iterations required to find a fixed point of
+-- 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, RealFrac b)
+ => (a -> a) -- ^ The function @f@ to iterate.
+ -> b -- ^ The tolerance, @epsilon@.
+ -> a -- ^ The initial value @x0@.
+ -> Int -- ^ The fixed point.
+fixed_point_iteration_count f epsilon x0 =
+ fst $ F.fixed_point_with_iterations f epsilon x0
+
+
+-- | Returns a list of ratios,
+--
+-- ||x^{*} - x_{n+1}|| / ||x^{*} - x_{n}||^{p}
+--
+-- of fixed point iterations for the function @f@ with initial guess
+-- @x0@ and @p@ some positive power.
+--
+-- This is used to determine the rate of convergence.
+--
+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@.
+ -> Integer -- ^ The power @p@.
+ -> [b] -- ^ The resulting sequence of x_{n}.
+fixed_point_error_ratios f x0 x_star p =
+ zipWith (/) en_plus_one en_exp
+ where
+ xn = F.fixed_point_iterations f x0
+ en = map (\x -> norm (x_star - x)) xn
+ en_plus_one = tail en
+ en_exp = map (^p) en