-
-
-
--- | 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