Copyright | (c) 2019 Andrew Lelechenko |
---|---|
License | BSD3 |
Maintainer | Andrew Lelechenko <andrew.lelechenko@gmail.com> |
Safe Haskell | None |
Language | Haskell2010 |
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 Integer
2 * X + 0>>>
(X + 1) * (X - 1) :: UPoly Int
1 * 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 Integer
3 * X^2 + 2 * X + 1>>>
toPoly [0,0,0] :: UPoly Int
0
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) 3
10>>>
eval (X^2 + 1 :: VPoly (UPoly Int)) (X + 1)
1 * X^2 + 2 * X + 2