module Math.GaussianQuadratureIntegration (nIntegrate128, nIntegrate256, nIntegrate512, nIntegrate1024) where
import Math.GaussianQuadratureRules
import Data.List
baseCase :: (Fractional a) => (a -> a) -> [a] -> [a] -> a
baseCase func points weights = foldl' (+) 0 $ map (\(x,w) -> w*(func x + func(x))) $ zip points weights
nIntegrate128 :: (Fractional a) => (a -> a) -> a -> a -> a
nIntegrate128 func a b = 0.5*(ba) * (baseCase (\x -> func $ 0.5*((ba)*x+b+a)) points128 weights128)
nIntegrate256 :: (Fractional a) => (a -> a) -> a -> a -> a
nIntegrate256 func a b = 0.5*(ba) * (baseCase (\x -> func $ 0.5*((ba)*x+b+a)) points256 weights256)
nIntegrate512 :: (Fractional a) => (a -> a) -> a -> a -> a
nIntegrate512 func a b = 0.5*(ba) * (baseCase (\x -> func $ 0.5*((ba)*x+b+a)) points512 weights512)
nIntegrate1024 :: (Fractional a) => (a -> a) -> a -> a -> a
nIntegrate1024 func a b = 0.5*(ba) * (baseCase (\x -> func $ 0.5*((ba)*x+b+a)) points1024 weights1024)