poly-0.2.0.0: Polynomials

Copyright(c) 2019 Andrew Lelechenko
LicenseBSD3
MaintainerAndrew Lelechenko <andrew.lelechenko@gmail.com>
Safe HaskellNone
LanguageHaskell2010

Data.Poly.Semiring

Contents

Description

Dense polynomials and a Semiring-based interface.

Synopsis

Documentation

data Poly v a Source #

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 # 
Instance details

Defined in Data.Poly.Uni.Dense

Methods

(==) :: Poly v a -> Poly v a -> Bool #

(/=) :: Poly v a -> Poly v a -> Bool #

(Eq a, Num a, Vector v a) => Num (Poly v a) Source # 
Instance details

Defined in Data.Poly.Uni.Dense

Methods

(+) :: Poly v a -> Poly v a -> Poly v a #

(-) :: Poly v a -> Poly v a -> Poly v a #

(*) :: Poly v a -> Poly v a -> Poly v a #

negate :: Poly v a -> Poly v a #

abs :: Poly v a -> Poly v a #

signum :: Poly v a -> Poly v a #

fromInteger :: Integer -> Poly v a #

Ord (v a) => Ord (Poly v a) Source # 
Instance details

Defined in Data.Poly.Uni.Dense

Methods

compare :: Poly v a -> Poly v a -> Ordering #

(<) :: Poly v a -> Poly v a -> Bool #

(<=) :: Poly v a -> Poly v a -> Bool #

(>) :: Poly v a -> Poly v a -> Bool #

(>=) :: Poly v a -> Poly v a -> Bool #

max :: Poly v a -> Poly v a -> Poly v a #

min :: Poly v a -> Poly v a -> Poly v a #

(Show a, Vector v a) => Show (Poly v a) Source # 
Instance details

Defined in Data.Poly.Uni.Dense

Methods

showsPrec :: Int -> Poly v a -> ShowS #

show :: Poly v a -> String #

showList :: [Poly v a] -> ShowS #

(Eq a, Semiring a, Vector v a) => Semiring (Poly v a) Source # 
Instance details

Defined in Data.Poly.Uni.Dense

Methods

plus :: Poly v a -> Poly v a -> Poly v a #

zero :: Poly v a #

times :: Poly v a -> Poly v a -> Poly v a #

one :: Poly v a #

(Eq a, Ring a, Vector v a) => Ring (Poly v a) Source # 
Instance details

Defined in Data.Poly.Uni.Dense

Methods

negate :: Poly v a -> Poly v a #

type VPoly = Poly Vector Source #

Polynomials backed by boxed vectors.

type UPoly = Poly Vector Source #

Polynomials backed by unboxed vectors.

unPoly :: Poly v a -> v a Source #

Convert Poly to a vector of coefficients (first element corresponds to a constant term).

Semiring interface

toPoly :: (Eq a, Semiring a, Vector v a) => v a -> Poly v a Source #

Make Poly from a vector 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, Semiring a, Vector v a) => a -> Poly v a Source #

Create a polynomial from a constant term.

pattern X :: (Eq a, Semiring a, Vector v a, Eq (v a)) => Poly v a Source #

Create an identity polynomial.

eval :: (Semiring 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

deriv :: (Eq a, Semiring a, Vector v a) => Poly v a -> Poly v a Source #

Take a derivative.

>>> deriv (X^3 + 3 * X) :: UPoly Int
3 * X^2 + 0 * X + 3