X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FRoots%2FSimple.hs;h=a5924f4658d5c6ca8d15fbba6b10c24ed446566b;hb=907977c61c9d817e1270541ab481586a986cc21c;hp=a6aa09e497ba841d2c3a8e0be2749aab27c72662;hpb=04f56a8882bb0c574b603f8c3fed9481ea934f7f;p=numerical-analysis.git diff --git a/src/Roots/Simple.hs b/src/Roots/Simple.hs index a6aa09e..a5924f4 100644 --- a/src/Roots/Simple.hs +++ b/src/Roots/Simple.hs @@ -8,22 +8,34 @@ -- 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 @@ -195,8 +207,8 @@ newton_iterations :: (Field.C a) -> (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) ) @@ -280,8 +292,8 @@ secant_iterations :: (Field.C a) -> 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