module Math.Polynomial.Bernoulli (bernoulliPoly) where
import Math.Polynomial
import Data.VectorSpace
bernoulliPoly :: (Fractional a, Eq a) => [Poly a]
bernoulliPoly :: [Poly a]
bernoulliPoly = ((Poly a, Poly a) -> Poly a) -> [(Poly a, Poly a)] -> [Poly a]
forall a b. (a -> b) -> [a] -> [b]
map (Poly a, Poly a) -> Poly a
forall a b. (a, b) -> a
fst [(Poly a, Poly a)]
forall a. (Fractional a, Eq a) => [(Poly a, Poly a)]
biIntegralBi
biIntegralBi :: (Fractional a, Eq a) => [(Poly a, Poly a)]
biIntegralBi :: [(Poly a, Poly a)]
biIntegralBi = (a -> Poly a
forall a. (Num a, Eq a) => a -> Poly a
constPoly 1, Poly a -> Poly a
forall a. (Fractional a, Eq a) => Poly a -> Poly a
polyIntegral (a -> Poly a
forall a. (Num a, Eq a) => a -> Poly a
constPoly 1)) (Poly a, Poly a) -> [(Poly a, Poly a)] -> [(Poly a, Poly a)]
forall a. a -> [a] -> [a]
: ((Poly a, Poly a) -> (Poly a, Poly a))
-> [(Poly a, Poly a)] -> [(Poly a, Poly a)]
forall a b. (a -> b) -> [a] -> [b]
map (Poly a, Poly a) -> (Poly a, Poly a)
forall a a. (Fractional a, Eq a) => (a, Poly a) -> (Poly a, Poly a)
f [(Poly a, Poly a)]
forall a. (Fractional a, Eq a) => [(Poly a, Poly a)]
biIntegralBi
where f :: (a, Poly a) -> (Poly a, Poly a)
f (p :: a
p, ip :: Poly a
ip) = case Poly a -> Poly a
forall a. (Fractional a, Eq a) => Poly a -> Poly a
polyIntegral Poly a
ip of
ip2 :: Poly a
ip2 -> case a -> Poly a
forall a. (Num a, Eq a) => a -> Poly a
constPoly (a -> Poly a) -> a -> Poly a
forall a b. (a -> b) -> a -> b
$ Poly a -> a -> a
forall a. (Num a, Eq a) => Poly a -> a -> a
evalPoly Poly a
ip2 0 a -> a -> a
forall a. Num a => a -> a -> a
- Poly a -> a -> a
forall a. (Num a, Eq a) => Poly a -> a -> a
evalPoly Poly a
ip2 1 of
c :: Poly a
c -> (Poly a
c Poly a -> Poly a -> Poly a
forall a. (Num a, Eq a) => Poly a -> Poly a -> Poly a
`addPoly` Poly a
ip, Poly a -> Poly a
forall a. (Fractional a, Eq a) => Poly a -> Poly a
polyIntegral Poly a
c Poly a -> Poly a -> Poly a
forall a. (Num a, Eq a) => Poly a -> Poly a -> Poly a
`addPoly` Poly a
ip2)