| Copyright | (c) 2019 Andrew Lelechenko |
|---|---|
| License | BSD3 |
| Maintainer | Andrew Lelechenko <andrew.lelechenko@gmail.com> |
| Safe Haskell | None |
| Language | Haskell2010 |
Data.Poly
Contents
Description
Dense polynomials and a Num-based interface.
Synopsis
- data Poly v a
- type VPoly = Poly Vector
- type UPoly = Poly Vector
- unPoly :: Poly v a -> v a
- toPoly :: (Eq a, Num a, Vector v a) => v a -> Poly v a
- constant :: (Eq a, Num a, Vector v a) => a -> Poly v a
- pattern X :: (Eq a, Num a, Vector v a, Eq (v a)) => Poly v a
- eval :: (Num a, Vector v a) => Poly v a -> a -> a
- deriv :: (Eq a, Num a, Vector v a) => Poly v a -> Poly v a
- integral :: (Eq a, Fractional a, Vector v a) => Poly v a -> Poly v a
Documentation
Polynomials of one variable with coefficients from a,
backed by a Vector v (boxed, unboxed, storable, etc.).
Use pattern X for construction:
>>>(X + 1) + (X - 1) :: VPoly Integer2 * X + 0>>>(X + 1) * (X - 1) :: UPoly Int1 * X^2 + 0 * X + (-1)
Polynomials are stored normalized, without leading
zero coefficients, so 0 * X + 1 equals to 1.
Ord instance does not make much sense mathematically,
it is defined only for the sake of Set, Map, etc.
Instances
| Eq (v a) => Eq (Poly v a) Source # | |
| (Eq a, Num a, Vector v a) => Num (Poly v a) Source # | |
| Ord (v a) => Ord (Poly v a) Source # | |
Defined in Data.Poly.Uni.Dense | |
| (Show a, Vector v a) => Show (Poly v a) Source # | |
| (Eq a, Semiring a, Vector v a) => Semiring (Poly v a) Source # | |
| (Eq a, Ring a, Vector v a) => Ring (Poly v a) Source # | |
Defined in Data.Poly.Uni.Dense | |
unPoly :: Poly v a -> v a Source #
Convert Poly to a vector of coefficients
(first element corresponds to a constant term).
Num interface
toPoly :: (Eq a, Num a, Vector v a) => v a -> Poly v a Source #
Make Poly from a list of coefficients
(first element corresponds to a constant term).
>>>:set -XOverloadedLists>>>toPoly [1,2,3] :: VPoly Integer3 * X^2 + 2 * X + 1>>>toPoly [0,0,0] :: UPoly Int0
constant :: (Eq a, Num a, Vector v a) => a -> Poly v a Source #
Create a polynomial from a constant term.
eval :: (Num a, Vector v a) => Poly v a -> a -> a Source #
Evaluate at a given point.
>>>eval (X^2 + 1 :: UPoly Int) 310>>>eval (X^2 + 1 :: VPoly (UPoly Int)) (X + 1)1 * X^2 + 2 * X + 2