| Copyright | (c) Ross Paterson 2011 |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | [email protected] |
| Stability | provisional |
| Portability | portable |
| Safe Haskell | None |
| Language | Haskell2010 |
Data.YAP.Polynomial
Description
An example instance of the algebraic classes: formal polynomials.
Synopsis
- data Polynomial a
- constant :: a -> Polynomial a
- linear :: AdditiveMonoid a => a -> Polynomial a
- fromCoefficients :: [a] -> Polynomial a
- fromRoots :: Ring a => [a] -> Polynomial a
- type RationalFunction a = Ratio (Polynomial a)
- degree :: (Eq a, AdditiveMonoid a) => Polynomial a -> Int
- coefficients :: (Eq a, AdditiveMonoid a) => Polynomial a -> [a]
- unsafeCoefficients :: Polynomial a -> [a]
- evaluate :: Semiring a => Polynomial a -> a -> a
- evaluateWith :: (Semiring b, AdditiveMonoid c) => (a -> b -> c) -> Polynomial a -> b -> c
- pretty :: ToInteger a => Polynomial a -> String -> String
- identity :: Semiring a => Polynomial a
- compose :: Semiring a => Polynomial a -> Polynomial a -> Polynomial a
- (.*) :: Semiring a => Polynomial a -> a -> Polynomial a
- (.^) :: AdditiveMonoid a => Polynomial a -> Int -> Polynomial a
Polynomials
data Polynomial a Source #
Formal polynomials.
Instances
constant :: a -> Polynomial a Source #
Polynomial representing a constant value c
linear :: AdditiveMonoid a => a -> Polynomial a Source #
fromCoefficients :: [a] -> Polynomial a Source #
Construct a polynomial from a list of coefficients, least significant first.
fromRoots :: Ring a => [a] -> Polynomial a Source #
A monic polynomial with the given roots (with multiplicity)
type RationalFunction a = Ratio (Polynomial a) Source #
A rational function with coefficients from a field is a field
Queries
degree :: (Eq a, AdditiveMonoid a) => Polynomial a -> Int Source #
The degree of a polynomial: the highest power of the indeterminate.
coefficients :: (Eq a, AdditiveMonoid a) => Polynomial a -> [a] Source #
The coefficients of a polynomial, least significant first and with no trailing zeros.
unsafeCoefficients :: Polynomial a -> [a] Source #
The coefficients of a polynomial, least significant first and with an arbitrary number of trailing zeros. This is only safe to use in contexts where the number of trailing zeros is immaterial.
evaluate :: Semiring a => Polynomial a -> a -> a Source #
Evaluate a polynomial for a given value of x.
evaluatea x =zipWith(*) (coefficientsa) (iterate(*x) 1)
(The implementation uses Horner's rule.)
evaluateWith :: (Semiring b, AdditiveMonoid c) => (a -> b -> c) -> Polynomial a -> b -> c Source #
Evaluate a polynomial for a given value of x, using the given
function to combine coefficients and powers.
pretty :: ToInteger a => Polynomial a -> String -> String Source #
Pretty-print a polynomial, e.g.
pretty (fromCoefficients [3, -4, 0, -1, 5]) "x" = "5x^4 - x^3 - 4x + 3"
Composition
identity :: Semiring a => Polynomial a Source #
Identity polynomial, i.e. x
compose :: Semiring a => Polynomial a -> Polynomial a -> Polynomial a Source #
Special compositions
(.*) :: Semiring a => Polynomial a -> a -> Polynomial a infixl 9 Source #
Maps a function \(f(x)\) to \(f(a x)\), equivalent to composition
with a*.identity
(.^) :: AdditiveMonoid a => Polynomial a -> Int -> Polynomial a infixl 9 Source #
Maps a function \(f(x)\) to \(f(x^k)\) for positive \(k\), equivalent
to composition with .identity^k