module Numeric.Polynomial (
evaluatePolynomial
, evaluateEvenPolynomial
, evaluateOddPolynomial
, evaluatePolynomialL
, evaluateEvenPolynomialL
, evaluateOddPolynomialL
) where
import qualified Data.Vector.Generic as G
import qualified Data.Vector as V
import Data.Vector.Generic (Vector)
evaluatePolynomial :: (Vector v a, Num a)
=> a
-> v a
-> a
{-# INLINE evaluatePolynomial #-}
evaluatePolynomial :: forall (v :: * -> *) a. (Vector v a, Num a) => a -> v a -> a
evaluatePolynomial a
x v a
v
| forall (v :: * -> *) a. Vector v a => v a -> Bool
G.null v a
v = a
0
| Bool
otherwise = forall (v :: * -> *) a. Vector v a => (a -> a -> a) -> v a -> a
G.foldr1 (\a
a a
r -> a
a forall a. Num a => a -> a -> a
+ a
rforall a. Num a => a -> a -> a
*a
x) v a
v
evaluateEvenPolynomial :: (Vector v a, Num a)
=> a
-> v a
-> a
{-# INLINE evaluateEvenPolynomial #-}
evaluateEvenPolynomial :: forall (v :: * -> *) a. (Vector v a, Num a) => a -> v a -> a
evaluateEvenPolynomial a
x
= forall (v :: * -> *) a. (Vector v a, Num a) => a -> v a -> a
evaluatePolynomial (a
xforall a. Num a => a -> a -> a
*a
x)
evaluateOddPolynomial :: (Vector v a, Num a)
=> a
-> v a
-> a
{-# INLINE evaluateOddPolynomial #-}
evaluateOddPolynomial :: forall (v :: * -> *) a. (Vector v a, Num a) => a -> v a -> a
evaluateOddPolynomial a
x v a
coefs
= a
x forall a. Num a => a -> a -> a
* forall (v :: * -> *) a. (Vector v a, Num a) => a -> v a -> a
evaluatePolynomial (a
xforall a. Num a => a -> a -> a
*a
x) v a
coefs
evaluatePolynomialL :: (Num a) => a -> [a] -> a
evaluatePolynomialL :: forall a. Num a => a -> [a] -> a
evaluatePolynomialL a
x = forall (v :: * -> *) a. (Vector v a, Num a) => a -> v a -> a
evaluatePolynomial a
x forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. [a] -> Vector a
V.fromList
{-# INLINE evaluatePolynomialL #-}
evaluateEvenPolynomialL :: (Num a) => a -> [a] -> a
evaluateEvenPolynomialL :: forall a. Num a => a -> [a] -> a
evaluateEvenPolynomialL a
x = forall (v :: * -> *) a. (Vector v a, Num a) => a -> v a -> a
evaluateEvenPolynomial a
x forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. [a] -> Vector a
V.fromList
{-# INLINE evaluateEvenPolynomialL #-}
evaluateOddPolynomialL :: (Num a) => a -> [a] -> a
evaluateOddPolynomialL :: forall a. Num a => a -> [a] -> a
evaluateOddPolynomialL a
x = forall (v :: * -> *) a. (Vector v a, Num a) => a -> v a -> a
evaluateOddPolynomial a
x forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. [a] -> Vector a
V.fromList
{-# INLINE evaluateOddPolynomialL #-}