Package edu.jas.poly
Class GenWordPolynomial<C extends RingElem<C>>
java.lang.Object
edu.jas.poly.GenWordPolynomial<C>
- Type Parameters:
C
- coefficient type
- All Implemented Interfaces:
AbelianGroupElem<GenWordPolynomial<C>>
,Element<GenWordPolynomial<C>>
,MonoidElem<GenWordPolynomial<C>>
,RingElem<GenWordPolynomial<C>>
,Serializable
,Comparable<GenWordPolynomial<C>>
,Iterable<WordMonomial<C>>
public final class GenWordPolynomial<C extends RingElem<C>>
extends Object
implements RingElem<GenWordPolynomial<C>>, Iterable<WordMonomial<C>>
GenWordPolynomial generic polynomials implementing RingElem. Non-commutative
string polynomials over C. Objects of this class are intended to be
immutable. The implementation is based on TreeMap respectively SortedMap from
words to coefficients. Only the coefficients are modeled with generic types,
the "exponents" are fixed to Word. 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.
- See Also:
-
Field Summary
Fields -
Constructor Summary
ConstructorsModifierConstructorDescriptionConstructor for zero GenWordPolynomial.GenWordPolynomial
(GenWordPolynomialRing<C> r, C c) Constructor for GenWordPolynomial c * x0.GenWordPolynomial
(GenWordPolynomialRing<C> r, C c, ExpVector e) Constructor for GenWordPolynomial c * xe.GenWordPolynomial
(GenWordPolynomialRing<C> r, C c, Word e) Constructor for GenWordPolynomial c * xe.Constructor for GenWordPolynomial xe.Constructor for GenWordPolynomial xe.protected
Constructor for GenWordPolynomial.private
GenWordPolynomial
(GenWordPolynomialRing<C> r, TreeMap<Word, C> t) Private constructor for GenWordPolynomial. -
Method Summary
Modifier and TypeMethodDescriptionabs()
GenWordPolynomial absolute value, i.e.coefficient
(Word e) Coefficient.Iterator over coefficients.int
GenWordPolynomial comparison.contract
(GenWordPolynomialRing<C> fac) GenWordPolynomial contraction.copy()
Copy this GenWordPolynomial.long
degree()
Maximal degree.GenWordPolynomial division.divide
(GenWordPolynomial<C> S) GenWordPolynomial division.void
doPutToMap
(Word e, C c) Put a Word to coefficient entry into the internal map of this GenWordPolynomial.void
doPutToMap
(SortedMap<Word, C> vals) Put an a sorted map of words to coefficients into the internal map of this GenWordPolynomial.void
doRemoveFromMap
(Word e, C c) Remove a Word to coefficient entry from the internal map of this GenWordPolynomial.egcd
(GenWordPolynomial<C> S) GenWordPolynomial extended greatest common divisor.boolean
Comparison with any other object.factory()
Get the corresponding element factory.gcd
(GenWordPolynomial<C> S) GenWordPolynomial greatest common divisor.getMap()
Word to coefficient map of GenWordPolynomial.int
hashCode()
Hash code for this polynomial.hegcd
(GenWordPolynomial<C> S) GenWordPolynomial half extended greatest common divisor.inverse()
GenWordPolynomial inverse.boolean
Is GenWordPolynomial<C> a constant.boolean
Is GenWordPolynomial<C> homogeneous.boolean
isONE()
Is GenWordPolynomial<C> one.boolean
isUnit()
Is GenWordPolynomial<C> a unit.boolean
isZERO()
Is GenWordPolynomial<C> zero.iterator()
Iterator over monomials.Leading base coefficient.Leading monomial.Leading word.int
length()
Length of GenWordPolynomial.map
(UnaryFunctor<? super C, C> f) Map a unary function to the coefficients.maxNorm()
GenWordPolynomial maximum norm.GenWordPolynomial modular inverse.monic()
GenWordPolynomial monic, i.e.GenWordPolynomial multiplication.GenWordPolynomial multiplication.GenWordPolynomial multiplication.GenWordPolynomial left and right multiplication.GenWordPolynomial left and right multiplication.GenWordPolynomial multiplication.multiply
(GenWordPolynomial<C> S, GenWordPolynomial<C> T) GenWordPolynomial left and right multiplication.GenWordPolynomial multiplication.GenWordPolynomial left and right multiplication.GenWordPolynomial multiplication.negate()
GenWordPolynomial negation.int
Number of variables.GenWordPolynomial division with remainder.reductum()
Reductum.GenWordPolynomial remainder.int
signum()
GenWordPolynomial signum.GenWordPolynomial subtract.GenWordPolynomial subtraction.GenWordPolynomial subtraction.GenWordPolynomial addition.GenWordPolynomial addition.sum
(GenWordPolynomial<C> S) GenWordPolynomial summation.sumNorm()
GenWordPolynomial sum norm.toScript()
Get a scripting compatible string representation.Get a scripting compatible string representation of the factory.toString()
String representation of GenWordPolynomial.Trailing base coefficient.Trailing word.Iterator over words.Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface java.lang.Iterable
forEach, spliterator
Methods inherited from interface edu.jas.structure.MonoidElem
leftDivide, leftRemainder, power, rightDivide, rightRemainder, twosidedDivide, twosidedRemainder
-
Field Details
-
ring
The factory for the polynomial ring. -
val
The data structure for polynomials. -
logger
private static final org.apache.logging.log4j.Logger logger -
debug
private static final boolean debug
-
-
Constructor Details
-
GenWordPolynomial
Private constructor for GenWordPolynomial.- Parameters:
r
- polynomial ring factory.t
- TreeMap with correct ordering.
-
GenWordPolynomial
Constructor for zero GenWordPolynomial.- Parameters:
r
- polynomial ring factory.
-
GenWordPolynomial
Constructor for GenWordPolynomial c * xe.- Parameters:
r
- polynomial ring factory.c
- coefficient.e
- word.
-
GenWordPolynomial
Constructor for GenWordPolynomial c * x0.- Parameters:
r
- polynomial ring factory.c
- coefficient.
-
GenWordPolynomial
Constructor for GenWordPolynomial xe.- Parameters:
r
- polynomial ring factory.e
- word.
-
GenWordPolynomial
Constructor for GenWordPolynomial xe.- Parameters:
r
- polynomial ring factory.e
- exponent vector.
-
GenWordPolynomial
Constructor for GenWordPolynomial c * xe.- Parameters:
r
- polynomial ring factory.c
- coefficient.e
- exponent vector.
-
GenWordPolynomial
Constructor for GenWordPolynomial.- Parameters:
r
- polynomial ring factory.v
- the SortedMap of some other polynomial.
-
-
Method Details
-
factory
Get the corresponding element factory. -
copy
Copy this GenWordPolynomial. -
length
public int length()Length of GenWordPolynomial.- Returns:
- number of coefficients of this GenWordPolynomial.
-
getMap
Word to coefficient map of GenWordPolynomial.- Returns:
- val as unmodifiable SortedMap.
-
doPutToMap
Put a Word to coefficient entry into the internal map of this GenWordPolynomial. 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
- word.c
- coefficient.
-
doRemoveFromMap
Remove a Word to coefficient entry from the internal map of this GenWordPolynomial. 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
- Word.c
- expected coefficient, null for ignore.
-
doPutToMap
Put an a sorted map of words to coefficients into the internal map of this GenWordPolynomial. 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 wordss and coefficients.
-
toString
String representation of GenWordPolynomial. -
toScript
Get a scripting compatible string representation. -
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:
-
isZERO
public boolean isZERO()Is GenWordPolynomial<C> zero.- Specified by:
isZERO
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Returns:
- If this is 0 then true is returned, else false.
- See Also:
-
isONE
public boolean isONE()Is GenWordPolynomial<C> one.- Specified by:
isONE
in interfaceMonoidElem<C extends RingElem<C>>
- Returns:
- If this is 1 then true is returned, else false.
- See Also:
-
isUnit
public boolean isUnit()Is GenWordPolynomial<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:
-
isConstant
public boolean isConstant()Is GenWordPolynomial<C> a constant.- Returns:
- If this is a constant polynomial then true is returned, else false.
-
isHomogeneous
public boolean isHomogeneous()Is GenWordPolynomial<C> homogeneous.- Returns:
- true, if this is homogeneous, else false.
-
equals
Comparison with any other object. -
hashCode
public int hashCode()Hash code for this polynomial. -
compareTo
GenWordPolynomial comparison. -
signum
public int signum()GenWordPolynomial signum.- Specified by:
signum
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Returns:
- sign(ldcf(this)).
-
numberOfVariables
public int numberOfVariables()Number of variables.- Returns:
- ring.alphabet.length().
-
leadingMonomial
Leading monomial.- Returns:
- first map entry.
-
leadingWord
Leading word.- Returns:
- first highest word.
-
trailingWord
Trailing word.- Returns:
- last lowest word.
-
leadingBaseCoefficient
Leading base coefficient.- Returns:
- first coefficient.
-
trailingBaseCoefficient
Trailing base coefficient.- Returns:
- coefficient of constant term.
-
coefficient
Coefficient.- Parameters:
e
- word.- Returns:
- coefficient for given word.
-
reductum
Reductum.- Returns:
- this - leading monomial.
-
degree
public long degree()Maximal degree.- Returns:
- maximal degree in any variables.
-
maxNorm
GenWordPolynomial maximum norm.- Returns:
- ||this||.
-
sumNorm
GenWordPolynomial sum norm.- Returns:
- sum of all absolute values of coefficients.
-
sum
GenWordPolynomial summation.- Specified by:
sum
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Parameters:
S
- GenWordPolynomial.- Returns:
- this+S.
-
sum
GenWordPolynomial addition. This method is not very efficient, since this is copied.- Parameters:
a
- coefficient.e
- word.- Returns:
- this + a e.
-
sum
GenWordPolynomial addition. This method is not very efficient, since this is copied.- Parameters:
a
- coefficient.- Returns:
- this + a x0.
-
subtract
GenWordPolynomial subtraction.- Specified by:
subtract
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Parameters:
S
- GenWordPolynomial.- Returns:
- this-S.
-
subtract
GenWordPolynomial subtraction. This method is not very efficient, since this is copied.- Parameters:
a
- coefficient.e
- word.- Returns:
- this - a e.
-
subtract
GenWordPolynomial subtract. This method is not very efficient, since this is copied.- Parameters:
a
- coefficient.- Returns:
- this + a x0.
-
negate
GenWordPolynomial negation.- Specified by:
negate
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Returns:
- -this.
-
abs
GenWordPolynomial absolute value, i.e. leadingCoefficient > 0.- Specified by:
abs
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Returns:
- abs(this).
-
multiply
GenWordPolynomial multiplication.- Specified by:
multiply
in interfaceMonoidElem<C extends RingElem<C>>
- Parameters:
S
- GenWordPolynomial.- Returns:
- this*S.
-
multiply
GenWordPolynomial left and right multiplication. Product with two polynomials.- Parameters:
S
- GenWordPolynomial.T
- GenWordPolynomial.- Returns:
- S*this*T.
-
multiply
GenWordPolynomial multiplication. Product with coefficient ring element.- Parameters:
s
- coefficient.- Returns:
- this*s.
-
multiply
GenWordPolynomial multiplication. Product with coefficient ring element.- Parameters:
s
- coefficient.t
- coefficient.- Returns:
- s*this*t.
-
monic
GenWordPolynomial monic, i.e. leadingCoefficient == 1. If leadingCoefficient is not invertible returns this unmodified.- Returns:
- monic(this).
-
multiply
GenWordPolynomial multiplication. Product with ring element and word.- Parameters:
s
- coefficient.e
- left word.- Returns:
- this * s e.
-
multiply
GenWordPolynomial left and right multiplication. Product with ring element and two words.- Parameters:
e
- left word.f
- right word.- Returns:
- e * this * f.
-
multiply
GenWordPolynomial left and right multiplication. Product with ring element and two words.- Parameters:
s
- coefficient.e
- left word.f
- right word.- Returns:
- e * this * s * f.
-
multiply
GenWordPolynomial left and right multiplication. Product with ring element and two words.- Parameters:
s
- coefficient.e
- left word.t
- coefficient.f
- right word.- Returns:
- s * e * this * t * f.
-
multiply
GenWordPolynomial multiplication. Product with word.- Parameters:
e
- word (!= null).- Returns:
- this * e.
-
multiply
GenWordPolynomial multiplication. Product with 'monomial'.- Parameters:
m
- 'monomial'.- Returns:
- this * m.
-
divide
GenWordPolynomial division. Division by coefficient ring element. Fails, if exact division is not possible.- Parameters:
s
- coefficient.- Returns:
- this/s.
-
quotientRemainder
GenWordPolynomial 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 GenWordPolynomial with invertible leading coefficient.- Returns:
- [ quotient , remainder ] with this = quotient * S + remainder and deg(remainder) < deg(S) or remainder = 0.
- See Also:
-
divide
GenWordPolynomial 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 GenWordPolynomial with invertible leading coefficient.- Returns:
- quotient with this = quotient * S + remainder.
- See Also:
-
remainder
GenWordPolynomial 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 GenWordPolynomial with invertible leading coefficient.- Returns:
- remainder with this = quotient * S + remainder.
- See Also:
-
gcd
GenWordPolynomial greatest common divisor. Only for univariate polynomials over fields. -
egcd
GenWordPolynomial extended greatest common divisor. Only for univariate polynomials over fields. -
hegcd
GenWordPolynomial half extended greatest common divisor. Only for univariate polynomials over fields.- Parameters:
S
- GenWordPolynomial.- Returns:
- [ gcd(this,S), a ] with a*this + b*S = gcd(this,S).
-
inverse
GenWordPolynomial 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
GenWordPolynomial modular inverse. Only for univariate polynomials over fields.- Parameters:
m
- GenWordPolynomial.- Returns:
- a with with a*this = 1 mod m.
-
coefficientIterator
Iterator over coefficients.- Returns:
- val.values().iterator().
-
wordIterator
Iterator over words.- Returns:
- val.keySet().iterator().
-
iterator
Iterator over monomials. -
map
Map a unary function to the coefficients.- Parameters:
f
- evaluation functor.- Returns:
- new polynomial with coefficients f(this(e)).
-
contract
GenWordPolynomial contraction.- Parameters:
fac
- GenWordPolynomialRing.- Returns:
- this contracted to fac ring, if this in fac ring, null else.
-