module Numeric.Interpolation.Private.Basis where import Numeric.Interpolation.Private.Piece (sqr) import qualified Data.List.Match as Match _hermite1Split :: [a] -> [b] -> [(b, b)] _hermite1Split :: [a] -> [b] -> [(b, b)] _hermite1Split [a] xs = ([b] -> [b] -> [(b, b)]) -> ([b], [b]) -> [(b, b)] forall a b c. (a -> b -> c) -> (a, b) -> c uncurry [b] -> [b] -> [(b, b)] forall a b. [a] -> [b] -> [(a, b)] zip (([b], [b]) -> [(b, b)]) -> ([b] -> ([b], [b])) -> [b] -> [(b, b)] forall b c a. (b -> c) -> (a -> b) -> a -> c . [a] -> [b] -> ([b], [b]) forall b a. [b] -> [a] -> ([a], [a]) Match.splitAt [a] xs hermite1Split :: [a] -> [b] -> [(b, b)] hermite1Split :: [a] -> [b] -> [(b, b)] hermite1Split [a] _ = [b] -> [(b, b)] forall a. [a] -> [(a, a)] pairs pairs :: [a] -> [(a,a)] pairs :: [a] -> [(a, a)] pairs (a x0:a x1:[a] xs) = (a x0,a x1) (a, a) -> [(a, a)] -> [(a, a)] forall a. a -> [a] -> [a] : [a] -> [(a, a)] forall a. [a] -> [(a, a)] pairs [a] xs pairs [] = [] pairs [a] _ = [Char] -> [(a, a)] forall a. HasCallStack => [Char] -> a error [Char] "pairs: odd number of elements" parabolaDerivative :: (Fractional a) => (a,a) -> (a,a) -> (a,a) -> a -> (a,a) parabolaDerivative :: (a, a) -> (a, a) -> (a, a) -> a -> (a, a) parabolaDerivative (a x0,a y0) (a x1,a y1) (a x2,a y2) a x = let l0 :: a l0 = (a xa -> a -> a forall a. Num a => a -> a -> a -a x1)a -> a -> a forall a. Num a => a -> a -> a *(a xa -> a -> a forall a. Num a => a -> a -> a -a x2)a -> a -> a forall a. Fractional a => a -> a -> a /((a x0a -> a -> a forall a. Num a => a -> a -> a -a x1)a -> a -> a forall a. Num a => a -> a -> a *(a x0a -> a -> a forall a. Num a => a -> a -> a -a x2)) l1 :: a l1 = (a xa -> a -> a forall a. Num a => a -> a -> a -a x0)a -> a -> a forall a. Num a => a -> a -> a *(a xa -> a -> a forall a. Num a => a -> a -> a -a x2)a -> a -> a forall a. Fractional a => a -> a -> a /((a x1a -> a -> a forall a. Num a => a -> a -> a -a x0)a -> a -> a forall a. Num a => a -> a -> a *(a x1a -> a -> a forall a. Num a => a -> a -> a -a x2)) l2 :: a l2 = (a xa -> a -> a forall a. Num a => a -> a -> a -a x0)a -> a -> a forall a. Num a => a -> a -> a *(a xa -> a -> a forall a. Num a => a -> a -> a -a x1)a -> a -> a forall a. Fractional a => a -> a -> a /((a x2a -> a -> a forall a. Num a => a -> a -> a -a x0)a -> a -> a forall a. Num a => a -> a -> a *(a x2a -> a -> a forall a. Num a => a -> a -> a -a x1)) dl0 :: a dl0 = (a 2a -> a -> a forall a. Num a => a -> a -> a *a xa -> a -> a forall a. Num a => a -> a -> a -a x1a -> a -> a forall a. Num a => a -> a -> a -a x2)a -> a -> a forall a. Fractional a => a -> a -> a /((a x0a -> a -> a forall a. Num a => a -> a -> a -a x1)a -> a -> a forall a. Num a => a -> a -> a *(a x0a -> a -> a forall a. Num a => a -> a -> a -a x2)) dl1 :: a dl1 = (a 2a -> a -> a forall a. Num a => a -> a -> a *a xa -> a -> a forall a. Num a => a -> a -> a -a x0a -> a -> a forall a. Num a => a -> a -> a -a x2)a -> a -> a forall a. Fractional a => a -> a -> a /((a x1a -> a -> a forall a. Num a => a -> a -> a -a x0)a -> a -> a forall a. Num a => a -> a -> a *(a x1a -> a -> a forall a. Num a => a -> a -> a -a x2)) dl2 :: a dl2 = (a 2a -> a -> a forall a. Num a => a -> a -> a *a xa -> a -> a forall a. Num a => a -> a -> a -a x0a -> a -> a forall a. Num a => a -> a -> a -a x1)a -> a -> a forall a. Fractional a => a -> a -> a /((a x2a -> a -> a forall a. Num a => a -> a -> a -a x0)a -> a -> a forall a. Num a => a -> a -> a *(a x2a -> a -> a forall a. Num a => a -> a -> a -a x1)) in (a y0a -> a -> a forall a. Num a => a -> a -> a *a l0 a -> a -> a forall a. Num a => a -> a -> a + a y1a -> a -> a forall a. Num a => a -> a -> a *a l1 a -> a -> a forall a. Num a => a -> a -> a + a y2a -> a -> a forall a. Num a => a -> a -> a *a l2, a y0a -> a -> a forall a. Num a => a -> a -> a *a dl0 a -> a -> a forall a. Num a => a -> a -> a + a y1a -> a -> a forall a. Num a => a -> a -> a *a dl1 a -> a -> a forall a. Num a => a -> a -> a + a y2a -> a -> a forall a. Num a => a -> a -> a *a dl2) parabolaBasisDerivativeLeft, parabolaBasisDerivativeCenter, parabolaBasisDerivativeRight :: (Fractional a) => a -> a -> a -> a parabolaBasisDerivativeLeft :: a -> a -> a -> a parabolaBasisDerivativeLeft a x0 a x1 a x2 = (a x1a -> a -> a forall a. Num a => a -> a -> a -a x2)a -> a -> a forall a. Fractional a => a -> a -> a /((a x0a -> a -> a forall a. Num a => a -> a -> a -a x1)a -> a -> a forall a. Num a => a -> a -> a *(a x0a -> a -> a forall a. Num a => a -> a -> a -a x2)) parabolaBasisDerivativeCenter :: a -> a -> a -> a parabolaBasisDerivativeCenter a x0 a x1 a x2 = a 1a -> a -> a forall a. Fractional a => a -> a -> a /(a x1a -> a -> a forall a. Num a => a -> a -> a -a x0) a -> a -> a forall a. Num a => a -> a -> a + a 1a -> a -> a forall a. Fractional a => a -> a -> a /(a x1a -> a -> a forall a. Num a => a -> a -> a -a x2) parabolaBasisDerivativeRight :: a -> a -> a -> a parabolaBasisDerivativeRight a x0 a x1 a x2 = (a x1a -> a -> a forall a. Num a => a -> a -> a -a x0)a -> a -> a forall a. Fractional a => a -> a -> a /((a x2a -> a -> a forall a. Num a => a -> a -> a -a x0)a -> a -> a forall a. Num a => a -> a -> a *(a x2a -> a -> a forall a. Num a => a -> a -> a -a x1)) parabolaDerivativeCenterNode :: (Fractional a) => (a,a) -> (a,a) -> (a,a) -> a parabolaDerivativeCenterNode :: (a, a) -> (a, a) -> (a, a) -> a parabolaDerivativeCenterNode (a x0,a y0) (a x1,a y1) (a x2,a y2) = a y0 a -> a -> a forall a. Num a => a -> a -> a * a -> a -> a -> a forall a. Fractional a => a -> a -> a -> a parabolaBasisDerivativeLeft a x0 a x1 a x2 a -> a -> a forall a. Num a => a -> a -> a + a y1 a -> a -> a forall a. Num a => a -> a -> a * a -> a -> a -> a forall a. Fractional a => a -> a -> a -> a parabolaBasisDerivativeCenter a x0 a x1 a x2 a -> a -> a forall a. Num a => a -> a -> a + a y2 a -> a -> a forall a. Num a => a -> a -> a * a -> a -> a -> a forall a. Fractional a => a -> a -> a -> a parabolaBasisDerivativeRight a x0 a x1 a x2 parabola2ndDerivativeCenterNode :: (Fractional a) => (a,a) -> (a,a) -> (a,a) -> (a,a) -> a parabola2ndDerivativeCenterNode :: (a, a) -> (a, a) -> (a, a) -> (a, a) -> a parabola2ndDerivativeCenterNode (a xl,a yl) (a x0,a y0) (a x1,a y1) (a x2,a y2) = let dy0 :: a dy0 = a yl a -> a -> a forall a. Num a => a -> a -> a * (a x0a -> a -> a forall a. Num a => a -> a -> a -a x1)a -> a -> a forall a. Fractional a => a -> a -> a /((a xla -> a -> a forall a. Num a => a -> a -> a -a x0)a -> a -> a forall a. Num a => a -> a -> a *(a xla -> a -> a forall a. Num a => a -> a -> a -a x1)) a -> a -> a forall a. Num a => a -> a -> a + a y0 a -> a -> a forall a. Num a => a -> a -> a * (a 1a -> a -> a forall a. Fractional a => a -> a -> a /(a x0a -> a -> a forall a. Num a => a -> a -> a -a xl) a -> a -> a forall a. Num a => a -> a -> a + a 1a -> a -> a forall a. Fractional a => a -> a -> a /(a x0a -> a -> a forall a. Num a => a -> a -> a -a x1)) a -> a -> a forall a. Num a => a -> a -> a + a y1 a -> a -> a forall a. Num a => a -> a -> a * (a x0a -> a -> a forall a. Num a => a -> a -> a -a xl)a -> a -> a forall a. Fractional a => a -> a -> a /((a x1a -> a -> a forall a. Num a => a -> a -> a -a xl)a -> a -> a forall a. Num a => a -> a -> a *(a x1a -> a -> a forall a. Num a => a -> a -> a -a x0)) dy1 :: a dy1 = a y0 a -> a -> a forall a. Num a => a -> a -> a * (a x1a -> a -> a forall a. Num a => a -> a -> a -a x2)a -> a -> a forall a. Fractional a => a -> a -> a /((a x0a -> a -> a forall a. Num a => a -> a -> a -a x1)a -> a -> a forall a. Num a => a -> a -> a *(a x0a -> a -> a forall a. Num a => a -> a -> a -a x2)) a -> a -> a forall a. Num a => a -> a -> a + a y1 a -> a -> a forall a. Num a => a -> a -> a * (a 1a -> a -> a forall a. Fractional a => a -> a -> a /(a x1a -> a -> a forall a. Num a => a -> a -> a -a x0) a -> a -> a forall a. Num a => a -> a -> a + a 1a -> a -> a forall a. Fractional a => a -> a -> a /(a x1a -> a -> a forall a. Num a => a -> a -> a -a x2)) a -> a -> a forall a. Num a => a -> a -> a + a y2 a -> a -> a forall a. Num a => a -> a -> a * (a x1a -> a -> a forall a. Num a => a -> a -> a -a x0)a -> a -> a forall a. Fractional a => a -> a -> a /((a x2a -> a -> a forall a. Num a => a -> a -> a -a x0)a -> a -> a forall a. Num a => a -> a -> a *(a x2a -> a -> a forall a. Num a => a -> a -> a -a x1)) d :: a d = (a y1a -> a -> a forall a. Num a => a -> a -> a -a y0)a -> a -> a forall a. Fractional a => a -> a -> a /(a x1a -> a -> a forall a. Num a => a -> a -> a -a x0) x :: a x = a x0 in a 2a -> a -> a forall a. Num a => a -> a -> a *(a dy0a -> a -> a forall a. Num a => a -> a -> a -a d) a -> a -> a forall a. Fractional a => a -> a -> a / a -> a forall a. Num a => a -> a sqr (a x0a -> a -> a forall a. Num a => a -> a -> a -a x1) a -> a -> a forall a. Num a => a -> a -> a * (a 3a -> a -> a forall a. Num a => a -> a -> a *a xa -> a -> a forall a. Num a => a -> a -> a -a 2a -> a -> a forall a. Num a => a -> a -> a *a x1a -> a -> a forall a. Num a => a -> a -> a -a x0) a -> a -> a forall a. Num a => a -> a -> a + a 2a -> a -> a forall a. Num a => a -> a -> a *(a dy1a -> a -> a forall a. Num a => a -> a -> a -a d) a -> a -> a forall a. Fractional a => a -> a -> a / a -> a forall a. Num a => a -> a sqr (a x1a -> a -> a forall a. Num a => a -> a -> a -a x0) a -> a -> a forall a. Num a => a -> a -> a * (a 3a -> a -> a forall a. Num a => a -> a -> a *a xa -> a -> a forall a. Num a => a -> a -> a -a 2a -> a -> a forall a. Num a => a -> a -> a *a x0a -> a -> a forall a. Num a => a -> a -> a -a x1)