Horner's scheme for evaluating a polynomial in a ring.
Modulenumeric-prelude-0.4.4Haskell98
MathObj.Polynomial.Core
This module implements polynomial functions on plain lists. We use such functions in order to implement methods of other datatypes.
The module organization differs from that of ResidueClass:
Here the Polynomial module exports the type
that fits to the NumericPrelude type classes,
whereas in ResidueClass the sub-modules export various flavors of them.
- 28 values
- Packagenumeric-prelude-0.4.4
- Exports28
- LanguageHaskell98
- LicenceBSD-3-Clause
- SourceCore.hs
Horner's scheme for evaluating a polynomial in a module.
It's also helpful to put a polynomial in canonical form. normalize strips leading coefficients that are zero.
Multiply by the variable, used internally.
\(QC.NonEmpty xs) (QC.NonEmpty ys) -> PolyCore.tensorProduct xs ys == List.transpose (PolyCore.tensorProduct ys (intPoly xs))mul is fast if the second argument is a short polynomial,
MathObj.PowerSeries.** relies on that fact.
\xs ys -> PolyCore.equal (intPoly $ PolyCore.mul xs ys) (PolyCore.mulShear xs ys)\x y -> case (PolyCore.normalize x, PolyCore.normalize y) of (nx, ny) -> not (null (ratioPoly ny)) ==> mapSnd PolyCore.normalize (PolyCore.divMod nx ny) == mapPair (PolyCore.normalize, PolyCore.normalize) (PolyCore.divMod x y)\x y -> not (isZero (ratioPoly y)) ==> let z = fst $ PolyCore.divMod (Poly.coeffs x) y in PolyCore.normalize z == z\x y -> case PolyCore.normalize $ ratioPoly y of ny -> not (null ny) ==> List.length (snd $ PolyCore.divMod x y) < List.length nyThe modulus will always have one element less than the divisor.
This means that the modulus will be denormalized in some cases,
e.g. mod [2,1,1] [1,1,1] == [1,0] instead of [1].
Integrates if it is possible to represent the integrated polynomial in the given ring. Otherwise undefined coefficients occur.