X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FIntegration%2FTrapezoid.hs;h=8d4b76903b04603a09ebb748e501582b4026b0c6;hb=923c967324f861e48ede2737b1df63aff8798b70;hp=959800135ea27be2da25aacd8bb3fc4a690139a6;hpb=57a982c464095201f7635977aac937ad6a08c0b0;p=numerical-analysis.git diff --git a/src/Integration/Trapezoid.hs b/src/Integration/Trapezoid.hs index 9598001..8d4b769 100644 --- a/src/Integration/Trapezoid.hs +++ b/src/Integration/Trapezoid.hs @@ -1,26 +1,7 @@ module Integration.Trapezoid where - --- | Partition the interval [@a@, @b@] into @n@ subintervals, which we --- then return as a list of pairs. -partition :: (RealFrac a, Integral b) - => b -- ^ The number of subintervals to use, @n@ - -> a -- ^ The \"left\" endpoint of the interval, @a@ - -> a -- ^ The \"right\" endpoint of the interval, @b@ - -> [(a,a)] - -- Somebody asked for zero subintervals? Ok. -partition 0 _ _ = [] -partition n a b - | n < 0 = error "partition: asked for a negative number of subintervals" - | otherwise = - [ (xi, xj) | k <- [0..n-1], - let k' = fromIntegral k, - let xi = a + k'*h, - let xj = a + (k'+1)*h ] - where - h = fromRational $ (toRational (b-a))/(toRational n) - +import Misc (partition) -- | Use the trapezoid rule to numerically integrate @f@ over the -- interval [@a@, @b@]. @@ -52,18 +33,18 @@ trapezoid_1 f a b = (((f a) + (f b)) / 2) * (fromRational $ toRational (b - a)) --- | Use the composite trapezoid tule to numerically integrate @f@ +-- | Use the composite trapezoid rule to numerically integrate @f@ -- over @n@ subintervals of [@a@, @b@]. -- -- Examples: -- -- >>> let f x = x^2 -- >>> let area = trapezoid 1000 f (-1) 1 --- abs (area - (2/3)) < 0.00001 +-- >>> abs (area - (2/3)) < 0.00001 -- True -- --- >>> let area = trapezoid 1000 sin (-1) 1 --- >>> abs (area - 2) < 0.00001 +-- >>> let area = trapezoid 1000 sin 0 pi +-- >>> abs (area - 2) < 0.0001 -- True -- trapezoid :: (RealFrac a, Fractional b, Num b, Integral c)