module Numeric.Interpolation.Private.Piece where

sqr :: (Num a) => a -> a
sqr :: a -> a
sqr a
x = a
xa -> a -> a
forall a. Num a => a -> a -> a
*a
x


type T x y ny = (x, ny) -> (x, ny) -> x -> y

linear :: (Fractional a) => T a a a
linear :: T a a a
linear (a
x0,a
y0) (a
x1,a
y1) a
x =
   (a
y0a -> a -> a
forall a. Num a => a -> a -> a
*(a
x1a -> a -> a
forall a. Num a => a -> a -> a
-a
x) a -> a -> a
forall a. Num a => a -> a -> a
+ a
y1a -> a -> a
forall a. Num a => a -> a -> a
*(a
xa -> a -> a
forall a. Num a => a -> a -> a
-a
x0)) a -> a -> a
forall a. Fractional a => a -> a -> a
/ (a
x1a -> a -> a
forall a. Num a => a -> a -> a
-a
x0)

hermite1 :: (Fractional a) => T a a (a, a)
hermite1 :: T a a (a, a)
hermite1 (a
x0,(a
y0,a
dy0)) (a
x1,(a
y1,a
dy1)) a
x =
   let 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)
   in  T a a a
forall a. Fractional a => T a a a
linear (a
x0,a
y0) (a
x1,a
y1) a
x a -> 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. Num a => a -> a -> a
* a -> a
forall a. Num a => a -> a
sqr ((a
xa -> a -> a
forall a. Num a => a -> a -> a
-a
x1)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
xa -> a -> a
forall a. Num a => a -> a -> a
-a
x0) a -> 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. Num a => a -> a -> a
* a -> a
forall a. Num a => a -> a
sqr ((a
xa -> a -> a
forall a. Num a => a -> a -> a
-a
x0)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
xa -> a -> a
forall a. Num a => a -> a -> a
-a
x1)

hermite1' :: (Fractional a) => T a a (a, a)
hermite1' :: T a a (a, a)
hermite1' (a
x0,(a
y0,a
dy0)) (a
x1,(a
y1,a
dy1)) a
x =
   let 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)
   in  a
d a -> 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
2a -> 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. Num a => a -> a -> a
* (a
xa -> a -> a
forall a. Num a => a -> a -> a
-a
x0) a -> a -> a
forall a. Num a => a -> a -> a
+ a -> a
forall a. Num a => a -> a
sqr (a
xa -> a -> a
forall a. Num a => a -> a -> a
-a
x1)) a -> 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
2a -> a -> a
forall a. Num a => a -> a -> a
*(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. Num a => a -> a -> a
+ a -> a
forall a. Num a => a -> a
sqr (a
xa -> a -> a
forall a. Num a => a -> a -> a
-a
x0))

hermite1'' :: (Fractional a) => T a a (a, a)
hermite1'' :: T a a (a, a)
hermite1'' (a
x0,(a
y0,a
dy0)) (a
x1,(a
y1,a
dy1)) a
x =
   let 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)
   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)