Package edu.jas.poly
Class GenPolynomial<C extends RingElem<C>>
- java.lang.Object
-
- edu.jas.poly.GenPolynomial<C>
-
- Type Parameters:
C
- coefficient type
- All Implemented Interfaces:
AbelianGroupElem<GenPolynomial<C>>
,Element<GenPolynomial<C>>
,MonoidElem<GenPolynomial<C>>
,RingElem<GenPolynomial<C>>
,java.io.Serializable
,java.lang.Comparable<GenPolynomial<C>>
,java.lang.Iterable<Monomial<C>>
- Direct Known Subclasses:
GenSolvablePolynomial
public class GenPolynomial<C extends RingElem<C>> extends java.lang.Object implements RingElem<GenPolynomial<C>>, java.lang.Iterable<Monomial<C>>
GenPolynomial generic polynomials implementing RingElem. n-variate ordered polynomials over coefficients C. The variables commute with each other and with the coefficients. For non-commutative coefficients some care is taken to respect the multiplication order. Objects of this class are intended to be immutable. The implementation is based on TreeMap respectively SortedMap from exponents to coefficients. Only the coefficients are modeled with generic types, the exponents are fixed to ExpVector with long entries (@see edu.jas.poly.ExpVector StorUnit). C can also be a non integral domain, e.g. a ModInteger, i.e. it may contain zero divisors, since multiply() does check for zeros. Note: multiply() now checks for wrong method dispatch for GenSolvablePolynomial.- Author:
- Heinz Kredel
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Modifier Constructor Description GenPolynomial(GenPolynomialRing<C> r)
Constructor for zero GenPolynomial.GenPolynomial(GenPolynomialRing<C> r, C c)
Constructor for GenPolynomial c * x0.GenPolynomial(GenPolynomialRing<C> r, C c, ExpVector e)
Constructor for GenPolynomial c * xe.GenPolynomial(GenPolynomialRing<C> r, ExpVector e)
Constructor for GenPolynomial xe.protected
GenPolynomial(GenPolynomialRing<C> r, java.util.Map<ExpVector,C> v)
Constructor for GenPolynomial.protected
GenPolynomial(GenPolynomialRing<C> r, java.util.SortedMap<ExpVector,C> v)
Constructor for GenPolynomial.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description GenPolynomial<C>
abs()
GenPolynomial absolute value, i.e. leadingCoefficient > 0.long
bitLength()
Returns the number of bits in the representation of this polynomial.C
coefficient(ExpVector e)
Coefficient.java.util.Iterator<C>
coefficientIterator()
Iterator over coefficients.GenPolynomial<C>
coeffPrimitivePart()
GenPolynomial coefficient primitive part.int
compareTo(GenPolynomial<C> b)
GenPolynomial comparison.java.util.Map<ExpVector,GenPolynomial<C>>
contract(GenPolynomialRing<C> pfac)
Contract variables.GenPolynomial<C>
contractCoeff(GenPolynomialRing<C> pfac)
Contract variables to coefficient polynomial.GenPolynomial<C>
copy()
Copy this GenPolynomial.long
degree()
Maximal degree.long
degree(int i)
Degree in variable i.long
degreeMin()
Minimal degree.ExpVector
degreeVector()
Maximal degree vector.GenPolynomial<C>
deHomogenize(GenPolynomialRing<C> pfac)
Dehomogenize.java.util.List<ExpVector>
deltaExpVectors()
Delta of exponent vectors.java.util.List<ExpVector>
deltaExpVectors(ExpVector u)
Delta of exponent vectors.GenPolynomial<C>
divide(C s)
GenPolynomial division.GenPolynomial<C>
divide(GenPolynomial<C> S)
GenPolynomial division.void
doAddTo(C a)
GenPolynomial destructive summation.void
doAddTo(C a, ExpVector e)
GenPolynomial destructive summation.void
doAddTo(GenPolynomial<C> S)
GenPolynomial destructive summation.void
doPutToMap(ExpVector e, C c)
Put an ExpVector to coefficient entry into the internal map of this GenPolynomial.void
doPutToMap(java.util.SortedMap<ExpVector,C> vals)
Put an a sorted map of exponents to coefficients into the internal map of this GenPolynomial.void
doRemoveFromMap(ExpVector e, C c)
Remove an ExpVector to coefficient entry from the internal map of this GenPolynomial.GenPolynomial<C>[]
egcd(GenPolynomial<C> S)
GenPolynomial extended greatest common divisor.boolean
equals(java.lang.Object B)
Comparison with any other object.java.util.Iterator<ExpVector>
exponentIterator()
Iterator over exponents.GenPolynomial<C>
extend(GenPolynomialRing<C> pfac, int j, long k)
Extend variables.GenPolynomial<C>
extendLower(GenPolynomialRing<C> pfac, int j, long k)
Extend lower variables.GenPolynomial<C>
extendUnivariate(GenPolynomialRing<C> pfac, int i)
Extend univariate to multivariate polynomial.GenPolynomialRing<C>
factory()
Get the corresponding element factory.GenPolynomial<C>
gcd(GenPolynomial<C> S)
GenPolynomial greatest common divisor.java.util.SortedMap<ExpVector,C>
getMap()
ExpVector to coefficient map of GenPolynomial.int
hashCode()
Hash code for this polynomial.GenPolynomial<C>[]
hegcd(GenPolynomial<C> S)
GenPolynomial half extended greatest common divisor.GenPolynomial<C>
homogenize(GenPolynomialRing<C> pfac)
Make homogeneous.GenPolynomial<C>
inflate(long e)
GenPolynomial inflate.GenPolynomial<C>
inverse()
GenPolynomial inverse.boolean
isConstant()
Is GenPolynomial<C> a constant.boolean
isHomogeneous()
Is GenPolynomial<C> homogeneous.boolean
isONE()
Is GenPolynomial<C> one.boolean
isUnit()
Is GenPolynomial<C> a unit.boolean
isWeightHomogeneous()
Is GenPolynomial<C> homogeneous with respect to a weight.boolean
isZERO()
Is GenPolynomial<C> zero.java.util.Iterator<Monomial<C>>
iterator()
Iterator over monomials.C
leadingBaseCoefficient()
Leading base coefficient.ExpVector
leadingExpVector()
Leading exponent vector.GenPolynomial<C>
leadingFacetPolynomial(ExpVector u, ExpVector uv)
Leading facet normal polynomial.java.util.Map.Entry<ExpVector,C>
leadingMonomial()
Leading monomial.GenPolynomial<C>
leadingWeightPolynomial()
Leading weight polynomial.GenPolynomial<C>
leftDivideCoeff(C s)
GenPolynomial left division.int
length()
Length of GenPolynomial.GenPolynomial<C>
map(UnaryFunctor<? super C,C> f)
Map a unary function to the coefficients.GenPolynomial<C>
mapOnStream(java.util.function.Function<? super java.util.Map.Entry<ExpVector,C>,? extends java.util.Map.Entry<ExpVector,C>> f)
Map a function to the polynomial stream entries.GenPolynomial<C>
mapOnStream(java.util.function.Function<? super java.util.Map.Entry<ExpVector,C>,? extends java.util.Map.Entry<ExpVector,C>> f, boolean parallel)
Map a function to the polynomial stream entries.C
maxNorm()
GenPolynomial maximum norm.GenPolynomial<C>
modInverse(GenPolynomial<C> m)
GenPolynomial modular inverse.GenPolynomial<C>
monic()
GenPolynomial monic, i.e. leadingCoefficient == 1.GenPolynomial<C>
monicRight()
GenPolynomial monic, i.e. leadingCoefficient == 1.GenPolynomial<C>
multiply(C s)
GenPolynomial multiplication.GenPolynomial<C>
multiply(C s, ExpVector e)
GenPolynomial multiplication.GenPolynomial<C>
multiply(ExpVector e)
GenPolynomial multiplication.GenPolynomial<C>
multiply(GenPolynomial<C> S)
GenPolynomial multiplication.GenPolynomial<C>
multiply(java.util.Map.Entry<ExpVector,C> m)
GenPolynomial multiplication.GenPolynomial<C>
multiplyLeft(C s)
GenPolynomial left multiplication.GenPolynomial<C>
negate()
GenPolynomial negation.GenPolynomial<C>
negateAlt()
GenPolynomial negation, alternative implementation.int
numberOfVariables()
Number of variables.GenPolynomial<C>[]
quotientRemainder(GenPolynomial<C> S)
GenPolynomial division with remainder.GenPolynomial<C>
reductum()
Reductum.GenPolynomial<C>
remainder(GenPolynomial<C> S)
GenPolynomial remainder.GenPolynomial<C>
reverse(GenPolynomialRing<C> oring)
Reverse variables.GenPolynomial<C>
rightDivideCoeff(C s)
GenPolynomial right division.GenPolynomial<C>
rightGcd(GenPolynomial<C> S)
GenPolynomial greatest common divisor.GenPolynomial<C>
scaleSubtractMultiple(C b, C a, ExpVector e, GenPolynomial<C> S)
GenPolynomial scale and subtract a multiple.GenPolynomial<C>
scaleSubtractMultiple(C b, C a, GenPolynomial<C> S)
GenPolynomial scale and subtract a multiple.GenPolynomial<C>
scaleSubtractMultiple(C b, ExpVector g, C a, ExpVector e, GenPolynomial<C> S)
GenPolynomial scale and subtract a multiple.int
signum()
GenPolynomial signum.java.util.Spliterator<Monomial<C>>
spliterator()
Spliterator over monomials.C
squareNorm()
GenPolynomial square norm.GenPolynomial<C>
subtract(C a)
GenPolynomial subtract.GenPolynomial<C>
subtract(C a, ExpVector e)
GenPolynomial subtraction.GenPolynomial<C>
subtract(GenPolynomial<C> S)
GenPolynomial subtraction.GenPolynomial<C>
subtract(Monomial<C> m)
GenPolynomial subtraction.GenPolynomial<C>
subtractMultiple(C a, ExpVector e, GenPolynomial<C> S)
GenPolynomial subtract a multiple.GenPolynomial<C>
subtractMultiple(C a, GenPolynomial<C> S)
GenPolynomial subtract a multiple.GenPolynomial<C>
sum(C a)
GenPolynomial addition.GenPolynomial<C>
sum(C a, ExpVector e)
GenPolynomial addition.GenPolynomial<C>
sum(GenPolynomial<C> S)
GenPolynomial summation.GenPolynomial<C>
sum(Monomial<C> m)
GenPolynomial addition.C
sumNorm()
GenPolynomial sum norm.java.lang.String
toScript()
Get a scripting compatible string representation.java.lang.String
toScriptFactory()
Get a scripting compatible string representation of the factory.java.lang.String
toString()
String representation of GenPolynomial.java.lang.String
toString(java.lang.String[] v)
String representation of GenPolynomial.long
totalDegree()
Total degree.C
trailingBaseCoefficient()
Trailing base coefficient.ExpVector
trailingExpVector()
Trailing exponent vector.long
weightDegree()
Weight degree.-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface edu.jas.structure.MonoidElem
leftDivide, leftRemainder, power, rightDivide, rightRemainder, twosidedDivide, twosidedRemainder
-
-
-
-
Field Detail
-
ring
public final GenPolynomialRing<C extends RingElem<C>> ring
The factory for the polynomial ring.
-
val
protected final java.util.SortedMap<ExpVector,C extends RingElem<C>> val
The data structure for polynomials.
-
hash
protected transient int hash
Stored hash code.
-
blen
protected transient long blen
Stored bitLength.
-
-
Constructor Detail
-
GenPolynomial
public GenPolynomial(GenPolynomialRing<C> r)
Constructor for zero GenPolynomial.- Parameters:
r
- polynomial ring factory.
-
GenPolynomial
public GenPolynomial(GenPolynomialRing<C> r, C c, ExpVector e)
Constructor for GenPolynomial c * xe.- Parameters:
r
- polynomial ring factory.c
- coefficient.e
- exponent.
-
GenPolynomial
public GenPolynomial(GenPolynomialRing<C> r, C c)
Constructor for GenPolynomial c * x0.- Parameters:
r
- polynomial ring factory.c
- coefficient.
-
GenPolynomial
public GenPolynomial(GenPolynomialRing<C> r, ExpVector e)
Constructor for GenPolynomial xe.- Parameters:
r
- polynomial ring factory.e
- exponent.
-
GenPolynomial
protected GenPolynomial(GenPolynomialRing<C> r, java.util.SortedMap<ExpVector,C> v)
Constructor for GenPolynomial.- Parameters:
r
- polynomial ring factory.v
- the SortedMap of some other polynomial.
-
GenPolynomial
protected GenPolynomial(GenPolynomialRing<C> r, java.util.Map<ExpVector,C> v)
Constructor for GenPolynomial.- Parameters:
r
- polynomial ring factory.v
- some Map from ExpVector to coefficients.
-
-
Method Detail
-
factory
public GenPolynomialRing<C> factory()
Get the corresponding element factory.
-
copy
public GenPolynomial<C> copy()
Copy this GenPolynomial.
-
length
public int length()
Length of GenPolynomial.- Returns:
- number of coefficients of this GenPolynomial.
-
getMap
public java.util.SortedMap<ExpVector,C> getMap()
ExpVector to coefficient map of GenPolynomial.- Returns:
- val as unmodifiable SortedMap.
-
doPutToMap
public void doPutToMap(ExpVector e, C c)
Put an ExpVector to coefficient entry into the internal map of this GenPolynomial. Note: Do not use this method unless you are constructing a new polynomial. this is modified and breaks the immutability promise of this class.- Parameters:
c
- coefficient.e
- exponent.
-
doRemoveFromMap
public void doRemoveFromMap(ExpVector e, C c)
Remove an ExpVector to coefficient entry from the internal map of this GenPolynomial. Note: Do not use this method unless you are constructing a new polynomial. this is modified and breaks the immutability promise of this class.- Parameters:
e
- exponent.c
- expected coefficient, null for ignore.
-
doPutToMap
public void doPutToMap(java.util.SortedMap<ExpVector,C> vals)
Put an a sorted map of exponents to coefficients into the internal map of this GenPolynomial. Note: Do not use this method unless you are constructing a new polynomial. this is modified and breaks the immutability promise of this class.- Parameters:
vals
- sorted map of exponents and coefficients.
-
toString
public java.lang.String toString()
String representation of GenPolynomial.- Overrides:
toString
in classjava.lang.Object
- See Also:
Object.toString()
-
toString
public java.lang.String toString(java.lang.String[] v)
String representation of GenPolynomial.- Parameters:
v
- names for variables.- See Also:
Object.toString()
-
toScript
public java.lang.String toScript()
Get a scripting compatible string representation.
-
toScriptFactory
public java.lang.String toScriptFactory()
Get a scripting compatible string representation of the factory.- Specified by:
toScriptFactory
in interfaceElement<C extends RingElem<C>>
- Returns:
- script compatible representation for this ElemFactory.
- See Also:
Element.toScriptFactory()
-
isZERO
public boolean isZERO()
Is GenPolynomial<C> zero.- Specified by:
isZERO
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Returns:
- If this is 0 then true is returned, else false.
- See Also:
AbelianGroupElem.isZERO()
-
isONE
public boolean isONE()
Is GenPolynomial<C> one.- Specified by:
isONE
in interfaceMonoidElem<C extends RingElem<C>>
- Returns:
- If this is 1 then true is returned, else false.
- See Also:
MonoidElem.isONE()
-
isUnit
public boolean isUnit()
Is GenPolynomial<C> a unit.- Specified by:
isUnit
in interfaceMonoidElem<C extends RingElem<C>>
- Returns:
- If this is a unit then true is returned, else false.
- See Also:
MonoidElem.isUnit()
-
isConstant
public boolean isConstant()
Is GenPolynomial<C> a constant.- Returns:
- If this is a constant polynomial then true is returned, else false.
-
isHomogeneous
public boolean isHomogeneous()
Is GenPolynomial<C> homogeneous.- Returns:
- true, if this is homogeneous, else false.
-
equals
public boolean equals(java.lang.Object B)
Comparison with any other object.
-
hashCode
public int hashCode()
Hash code for this polynomial.
-
compareTo
public int compareTo(GenPolynomial<C> b)
GenPolynomial comparison.
-
signum
public int signum()
GenPolynomial signum.- Specified by:
signum
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Returns:
- sign(ldcf(this)).
-
numberOfVariables
public int numberOfVariables()
Number of variables.- Returns:
- ring.nvar.
-
leadingMonomial
public java.util.Map.Entry<ExpVector,C> leadingMonomial()
Leading monomial.- Returns:
- first map entry.
-
leadingExpVector
public ExpVector leadingExpVector()
Leading exponent vector.- Returns:
- first exponent.
-
trailingExpVector
public ExpVector trailingExpVector()
Trailing exponent vector.- Returns:
- last exponent.
-
leadingBaseCoefficient
public C leadingBaseCoefficient()
Leading base coefficient.- Returns:
- first coefficient.
-
trailingBaseCoefficient
public C trailingBaseCoefficient()
Trailing base coefficient.- Returns:
- coefficient of constant term.
-
coefficient
public C coefficient(ExpVector e)
Coefficient.- Parameters:
e
- exponent.- Returns:
- coefficient for given exponent.
-
reductum
public GenPolynomial<C> reductum()
Reductum.- Returns:
- this - leading monomial.
-
degree
public long degree(int i)
Degree in variable i.- Returns:
- maximal degree in the variable i.
-
degree
public long degree()
Maximal degree.- Returns:
- maximal degree in any variables.
-
degreeMin
public long degreeMin()
Minimal degree. Author: Youssef Elbarbary- Returns:
- minimal degree in any variables.
-
totalDegree
public long totalDegree()
Total degree.- Returns:
- total degree in any variables.
-
weightDegree
public long weightDegree()
Weight degree.- Returns:
- weight degree in all variables.
-
leadingWeightPolynomial
public GenPolynomial<C> leadingWeightPolynomial()
Leading weight polynomial.- Returns:
- polynomial with terms of maximal weight degree.
-
leadingFacetPolynomial
public GenPolynomial<C> leadingFacetPolynomial(ExpVector u, ExpVector uv)
Leading facet normal polynomial.- Parameters:
u
- leading exponent vector.uv
- exponent vector of facet normal.- Returns:
- polynomial with terms of facet normal.
-
isWeightHomogeneous
public boolean isWeightHomogeneous()
Is GenPolynomial<C> homogeneous with respect to a weight.- Returns:
- true, if this is weight homogeneous, else false.
-
degreeVector
public ExpVector degreeVector()
Maximal degree vector.- Returns:
- maximal degree vector of all variables.
-
deltaExpVectors
public java.util.List<ExpVector> deltaExpVectors()
Delta of exponent vectors.- Returns:
- list of u-v, where u = lt() and v != u in this.
-
deltaExpVectors
public java.util.List<ExpVector> deltaExpVectors(ExpVector u)
Delta of exponent vectors.- Parameters:
u
- marked ExpVector in this.expVectors- Returns:
- list of u-v, where v != u in this.expVectors.
-
maxNorm
public C maxNorm()
GenPolynomial maximum norm.- Returns:
- ||this|| the maximum of all absolute values of coefficients.
-
sumNorm
public C sumNorm()
GenPolynomial sum norm.- Returns:
- sum of all absolute values of coefficients.
-
squareNorm
public C squareNorm()
GenPolynomial square norm.- Returns:
- the sum all squared values of coefficients.
-
sum
public GenPolynomial<C> sum(GenPolynomial<C> S)
GenPolynomial summation.- Specified by:
sum
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Parameters:
S
- GenPolynomial.- Returns:
- this+S.
-
sum
public GenPolynomial<C> sum(C a, ExpVector e)
GenPolynomial addition. This method is not very efficient, since this is copied.- Parameters:
a
- coefficient.e
- exponent.- Returns:
- this + a xe.
-
sum
public GenPolynomial<C> sum(Monomial<C> m)
GenPolynomial addition. This method is not very efficient, since this is copied.- Parameters:
m
- monomial.- Returns:
- this + m.
-
sum
public GenPolynomial<C> sum(C a)
GenPolynomial addition. This method is not very efficient, since this is copied.- Parameters:
a
- coefficient.- Returns:
- this + a x0.
-
doAddTo
public void doAddTo(GenPolynomial<C> S)
GenPolynomial destructive summation.- Parameters:
S
- GenPolynomial.
-
doAddTo
public void doAddTo(C a, ExpVector e)
GenPolynomial destructive summation.- Parameters:
a
- coefficient.e
- exponent.
-
subtract
public GenPolynomial<C> subtract(GenPolynomial<C> S)
GenPolynomial subtraction.- Specified by:
subtract
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Parameters:
S
- GenPolynomial.- Returns:
- this-S.
-
subtract
public GenPolynomial<C> subtract(C a, ExpVector e)
GenPolynomial subtraction. This method is not very efficient, since this is copied.- Parameters:
a
- coefficient.e
- exponent.- Returns:
- this - a xe.
-
subtract
public GenPolynomial<C> subtract(Monomial<C> m)
GenPolynomial subtraction. This method is not very efficient, since this is copied.- Parameters:
m
- monomial.- Returns:
- this - m.
-
subtract
public GenPolynomial<C> subtract(C a)
GenPolynomial subtract. This method is not very efficient, since this is copied.- Parameters:
a
- coefficient.- Returns:
- this + a x0.
-
subtractMultiple
public GenPolynomial<C> subtractMultiple(C a, GenPolynomial<C> S)
GenPolynomial subtract a multiple.- Parameters:
a
- coefficient.S
- GenPolynomial.- Returns:
- this - a S.
-
subtractMultiple
public GenPolynomial<C> subtractMultiple(C a, ExpVector e, GenPolynomial<C> S)
GenPolynomial subtract a multiple.- Parameters:
a
- coefficient.e
- exponent.S
- GenPolynomial.- Returns:
- this - a xe S.
-
scaleSubtractMultiple
public GenPolynomial<C> scaleSubtractMultiple(C b, C a, GenPolynomial<C> S)
GenPolynomial scale and subtract a multiple.- Parameters:
b
- scale factor.a
- coefficient.S
- GenPolynomial.- Returns:
- this * b - a S.
-
scaleSubtractMultiple
public GenPolynomial<C> scaleSubtractMultiple(C b, C a, ExpVector e, GenPolynomial<C> S)
GenPolynomial scale and subtract a multiple.- Parameters:
b
- scale factor.a
- coefficient.e
- exponent.S
- GenPolynomial.- Returns:
- this * b - a xe S.
-
scaleSubtractMultiple
public GenPolynomial<C> scaleSubtractMultiple(C b, ExpVector g, C a, ExpVector e, GenPolynomial<C> S)
GenPolynomial scale and subtract a multiple.- Parameters:
b
- scale factor.g
- scale exponent.a
- coefficient.e
- exponent.S
- GenPolynomial.- Returns:
- this * a xg - a xe S.
-
negateAlt
public GenPolynomial<C> negateAlt()
GenPolynomial negation, alternative implementation.- Returns:
- -this.
-
negate
public GenPolynomial<C> negate()
GenPolynomial negation.- Specified by:
negate
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Returns:
- -this.
-
abs
public GenPolynomial<C> abs()
GenPolynomial absolute value, i.e. leadingCoefficient > 0.- Specified by:
abs
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Returns:
- abs(this).
-
multiply
public GenPolynomial<C> multiply(GenPolynomial<C> S)
GenPolynomial multiplication.- Specified by:
multiply
in interfaceMonoidElem<C extends RingElem<C>>
- Parameters:
S
- GenPolynomial.- Returns:
- this*S.
-
multiply
public GenPolynomial<C> multiply(C s)
GenPolynomial multiplication. Product with coefficient ring element.- Parameters:
s
- coefficient.- Returns:
- this*s.
-
multiplyLeft
public GenPolynomial<C> multiplyLeft(C s)
GenPolynomial left multiplication. Left product with coefficient ring element.- Parameters:
s
- coefficient.- Returns:
- s*this.
-
monic
public GenPolynomial<C> monic()
GenPolynomial monic, i.e. leadingCoefficient == 1. If leadingCoefficient is not invertible returns this unmodified.- Returns:
- monic(this).
-
monicRight
public GenPolynomial<C> monicRight()
GenPolynomial monic, i.e. leadingCoefficient == 1. If leadingCoefficient is not invertible returns this unmodified.- Returns:
- monic(this).
-
multiply
public GenPolynomial<C> multiply(C s, ExpVector e)
GenPolynomial multiplication. Product with ring element and exponent vector.- Parameters:
s
- coefficient.e
- exponent.- Returns:
- this * s xe.
-
multiply
public GenPolynomial<C> multiply(ExpVector e)
GenPolynomial multiplication. Product with exponent vector.- Parameters:
e
- exponent (!= null).- Returns:
- this * xe.
-
multiply
public GenPolynomial<C> multiply(java.util.Map.Entry<ExpVector,C> m)
GenPolynomial multiplication. Product with 'monomial'.- Parameters:
m
- 'monomial'.- Returns:
- this * m.
-
divide
public GenPolynomial<C> divide(C s)
GenPolynomial division. Division by coefficient ring element. Fails, if exact division is not possible.- Parameters:
s
- coefficient.- Returns:
- s**(-1) * this.
-
rightDivideCoeff
public GenPolynomial<C> rightDivideCoeff(C s)
GenPolynomial right division. Right division by coefficient ring element. Fails, if exact division is not possible.- Parameters:
s
- coefficient.- Returns:
- this * s**(-1).
-
leftDivideCoeff
public GenPolynomial<C> leftDivideCoeff(C s)
GenPolynomial left division. Left division by coefficient ring element. Fails, if exact division is not possible.- Parameters:
s
- coefficient.- Returns:
- s**(-1) * this.
-
coeffPrimitivePart
public GenPolynomial<C> coeffPrimitivePart()
GenPolynomial coefficient primitive part. Division by gcd of coefficients.- Returns:
- this/gcd(coeff(this)).
-
quotientRemainder
public GenPolynomial<C>[] quotientRemainder(GenPolynomial<C> S)
GenPolynomial division with remainder. Fails, if exact division by leading base coefficient is not possible. Meaningful only for univariate polynomials over fields, but works in any case.- Specified by:
quotientRemainder
in interfaceMonoidElem<C extends RingElem<C>>
- Parameters:
S
- nonzero GenPolynomial with invertible leading coefficient.- Returns:
- [ quotient , remainder ] with this = quotient * S + remainder and deg(remainder) < deg(S) or remainder = 0.
- See Also:
PolyUtil.baseSparsePseudoRemainder(edu.jas.poly.GenPolynomial,edu.jas.poly.GenPolynomial)
-
divide
public GenPolynomial<C> divide(GenPolynomial<C> S)
GenPolynomial division. Fails, if exact division by leading base coefficient is not possible. Meaningful only for univariate polynomials over fields, but works in any case.- Specified by:
divide
in interfaceMonoidElem<C extends RingElem<C>>
- Parameters:
S
- nonzero GenPolynomial with invertible leading coefficient.- Returns:
- quotient with this = quotient * S + remainder.
- See Also:
PolyUtil.baseSparsePseudoRemainder(edu.jas.poly.GenPolynomial,edu.jas.poly.GenPolynomial)
-
remainder
public GenPolynomial<C> remainder(GenPolynomial<C> S)
GenPolynomial remainder. Fails, if exact division by leading base coefficient is not possible. Meaningful only for univariate polynomials over fields, but works in any case.- Specified by:
remainder
in interfaceMonoidElem<C extends RingElem<C>>
- Parameters:
S
- nonzero GenPolynomial with invertible leading coefficient.- Returns:
- remainder with this = quotient * S + remainder.
- See Also:
PolyUtil.baseSparsePseudoRemainder(edu.jas.poly.GenPolynomial,edu.jas.poly.GenPolynomial)
-
gcd
public GenPolynomial<C> gcd(GenPolynomial<C> S)
GenPolynomial greatest common divisor. Only for univariate polynomials over fields.
-
egcd
public GenPolynomial<C>[] egcd(GenPolynomial<C> S)
GenPolynomial extended greatest common divisor. Only for univariate polynomials over fields.
-
hegcd
public GenPolynomial<C>[] hegcd(GenPolynomial<C> S)
GenPolynomial half extended greatest common divisor. Only for univariate polynomials over fields.- Parameters:
S
- GenPolynomial.- Returns:
- [ gcd(this,S), a ] with a*this + b*S = gcd(this,S).
-
inverse
public GenPolynomial<C> inverse()
GenPolynomial inverse. Required by RingElem. Throws not invertible exception.- Specified by:
inverse
in interfaceMonoidElem<C extends RingElem<C>>
- Returns:
- x with this * x = 1, if it exists.
-
modInverse
public GenPolynomial<C> modInverse(GenPolynomial<C> m)
GenPolynomial modular inverse. Only for univariate polynomials over fields.- Parameters:
m
- GenPolynomial.- Returns:
- a with with a*this = 1 mod m.
-
rightGcd
public GenPolynomial<C> rightGcd(GenPolynomial<C> S)
GenPolynomial greatest common divisor. Only for univariate polynomials over fields.
-
extend
public GenPolynomial<C> extend(GenPolynomialRing<C> pfac, int j, long k)
Extend variables. Used e.g. in module embedding. Extend all ExpVectors by i elements and multiply by x_j^k.- Parameters:
pfac
- extended polynomial ring factory (by i variables).j
- index of variable to be used for multiplication.k
- exponent for x_j.- Returns:
- extended polynomial.
-
extendLower
public GenPolynomial<C> extendLower(GenPolynomialRing<C> pfac, int j, long k)
Extend lower variables. Used e.g. in module embedding. Extend all ExpVectors by i lower elements and multiply by x_j^k.- Parameters:
pfac
- extended polynomial ring factory (by i variables).j
- index of variable to be used for multiplication.k
- exponent for x_j.- Returns:
- extended polynomial.
-
contract
public java.util.Map<ExpVector,GenPolynomial<C>> contract(GenPolynomialRing<C> pfac)
Contract variables. Used e.g. in module embedding. Remove i elements of each ExpVector.- Parameters:
pfac
- contracted polynomial ring factory (by i variables).- Returns:
- Map of exponents and contracted polynomials. Note: could return SortedMap
-
contractCoeff
public GenPolynomial<C> contractCoeff(GenPolynomialRing<C> pfac)
Contract variables to coefficient polynomial. Remove i elements of each ExpVector, removed elements must be zero.- Parameters:
pfac
- contracted polynomial ring factory (by i variables).- Returns:
- contracted coefficient polynomial.
-
extendUnivariate
public GenPolynomial<C> extendUnivariate(GenPolynomialRing<C> pfac, int i)
Extend univariate to multivariate polynomial. This is an univariate polynomial in variable i of the polynomial ring, it is extended to the given polynomial ring.- Parameters:
pfac
- extended polynomial ring factory.i
- index of the variable of this polynomial in pfac.- Returns:
- extended multivariate polynomial.
-
homogenize
public GenPolynomial<C> homogenize(GenPolynomialRing<C> pfac)
Make homogeneous.- Parameters:
pfac
- extended polynomial ring factory (by 1 variable).- Returns:
- homogeneous polynomial.
-
deHomogenize
public GenPolynomial<C> deHomogenize(GenPolynomialRing<C> pfac)
Dehomogenize.- Parameters:
pfac
- contracted polynomial ring factory (by 1 variable).- Returns:
- in homogeneous polynomial.
-
reverse
public GenPolynomial<C> reverse(GenPolynomialRing<C> oring)
Reverse variables. Used e.g. in opposite rings.- Returns:
- polynomial with reversed variables.
-
inflate
public GenPolynomial<C> inflate(long e)
GenPolynomial inflate. Only for univariate polynomials over fields.- Parameters:
e
- exponent.- Returns:
- this(x**e)
-
coefficientIterator
public java.util.Iterator<C> coefficientIterator()
Iterator over coefficients.- Returns:
- val.values().iterator().
-
exponentIterator
public java.util.Iterator<ExpVector> exponentIterator()
Iterator over exponents.- Returns:
- val.keySet().iterator().
-
spliterator
public java.util.Spliterator<Monomial<C>> spliterator()
Spliterator over monomials.
-
map
public GenPolynomial<C> map(UnaryFunctor<? super C,C> f)
Map a unary function to the coefficients.- Parameters:
f
- evaluation functor.- Returns:
- new polynomial with coefficients f(this.coefficients).
-
mapOnStream
public GenPolynomial<C> mapOnStream(java.util.function.Function<? super java.util.Map.Entry<ExpVector,C>,? extends java.util.Map.Entry<ExpVector,C>> f)
Map a function to the polynomial stream entries.- Parameters:
f
- evaluation functor.- Returns:
- new polynomial with f(this.entries).
-
mapOnStream
public GenPolynomial<C> mapOnStream(java.util.function.Function<? super java.util.Map.Entry<ExpVector,C>,? extends java.util.Map.Entry<ExpVector,C>> f, boolean parallel)
Map a function to the polynomial stream entries.- Parameters:
f
- evaluation functor.- Returns:
- new polynomial with f(this.entries).
-
bitLength
public long bitLength()
Returns the number of bits in the representation of this polynomial.- Returns:
- number of bits in the representation of this polynomial, including sign bits.
-
-