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>>
,java.io.Serializable
,java.lang.Comparable<GenWordPolynomial<C>>
,java.lang.Iterable<WordMonomial<C>>
public final class GenWordPolynomial<C extends RingElem<C>> extends java.lang.Object implements RingElem<GenWordPolynomial<C>>, java.lang.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.- Author:
- Heinz Kredel
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description GenWordPolynomialRing<C>
ring
The factory for the polynomial ring.
-
Constructor Summary
Constructors Modifier Constructor Description GenWordPolynomial(GenWordPolynomialRing<C> r)
Constructor 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.GenWordPolynomial(GenWordPolynomialRing<C> r, ExpVector e)
Constructor for GenWordPolynomial xe.GenWordPolynomial(GenWordPolynomialRing<C> r, Word e)
Constructor for GenWordPolynomial xe.protected
GenWordPolynomial(GenWordPolynomialRing<C> r, java.util.SortedMap<Word,C> v)
Constructor for GenWordPolynomial.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description GenWordPolynomial<C>
abs()
GenWordPolynomial absolute value, i.e. leadingCoefficient > 0.C
coefficient(Word e)
Coefficient.java.util.Iterator<C>
coefficientIterator()
Iterator over coefficients.int
compareTo(GenWordPolynomial<C> b)
GenWordPolynomial comparison.GenWordPolynomial<C>
contract(GenWordPolynomialRing<C> fac)
GenWordPolynomial contraction.GenWordPolynomial<C>
copy()
Copy this GenWordPolynomial.long
degree()
Maximal degree.GenWordPolynomial<C>
divide(C s)
GenWordPolynomial division.GenWordPolynomial<C>
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(java.util.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.GenWordPolynomial<C>[]
egcd(GenWordPolynomial<C> S)
GenWordPolynomial extended greatest common divisor.boolean
equals(java.lang.Object B)
Comparison with any other object.GenWordPolynomialRing<C>
factory()
Get the corresponding element factory.GenWordPolynomial<C>
gcd(GenWordPolynomial<C> S)
GenWordPolynomial greatest common divisor.java.util.SortedMap<Word,C>
getMap()
Word to coefficient map of GenWordPolynomial.int
hashCode()
Hash code for this polynomial.GenWordPolynomial<C>[]
hegcd(GenWordPolynomial<C> S)
GenWordPolynomial half extended greatest common divisor.GenWordPolynomial<C>
inverse()
GenWordPolynomial inverse.boolean
isConstant()
Is GenWordPolynomial<C> a constant.boolean
isHomogeneous()
Is GenWordPolynomial<C> homogeneous.boolean
isONE()
Is GenWordPolynomial<C> one.boolean
isUnit()
Is GenWordPolynomial<C> a unit.boolean
isZERO()
Is GenWordPolynomial<C> zero.java.util.Iterator<WordMonomial<C>>
iterator()
Iterator over monomials.C
leadingBaseCoefficient()
Leading base coefficient.java.util.Map.Entry<Word,C>
leadingMonomial()
Leading monomial.Word
leadingWord()
Leading word.int
length()
Length of GenWordPolynomial.GenWordPolynomial<C>
map(UnaryFunctor<? super C,C> f)
Map a unary function to the coefficients.C
maxNorm()
GenWordPolynomial maximum norm.GenWordPolynomial<C>
modInverse(GenWordPolynomial<C> m)
GenWordPolynomial modular inverse.GenWordPolynomial<C>
monic()
GenWordPolynomial monic, i.e. leadingCoefficient == 1.GenWordPolynomial<C>
multiply(C s)
GenWordPolynomial multiplication.GenWordPolynomial<C>
multiply(C s, C t)
GenWordPolynomial multiplication.GenWordPolynomial<C>
multiply(C s, Word e)
GenWordPolynomial multiplication.GenWordPolynomial<C>
multiply(C s, Word e, C t, Word f)
GenWordPolynomial left and right multiplication.GenWordPolynomial<C>
multiply(C s, Word e, Word f)
GenWordPolynomial left and right multiplication.GenWordPolynomial<C>
multiply(GenWordPolynomial<C> S)
GenWordPolynomial multiplication.GenWordPolynomial<C>
multiply(GenWordPolynomial<C> S, GenWordPolynomial<C> T)
GenWordPolynomial left and right multiplication.GenWordPolynomial<C>
multiply(Word e)
GenWordPolynomial multiplication.GenWordPolynomial<C>
multiply(Word e, Word f)
GenWordPolynomial left and right multiplication.GenWordPolynomial<C>
multiply(java.util.Map.Entry<Word,C> m)
GenWordPolynomial multiplication.GenWordPolynomial<C>
negate()
GenWordPolynomial negation.int
numberOfVariables()
Number of variables.GenWordPolynomial<C>[]
quotientRemainder(GenWordPolynomial<C> S)
GenWordPolynomial division with remainder.GenWordPolynomial<C>
reductum()
Reductum.GenWordPolynomial<C>
remainder(GenWordPolynomial<C> S)
GenWordPolynomial remainder.int
signum()
GenWordPolynomial signum.GenWordPolynomial<C>
subtract(C a)
GenWordPolynomial subtract.GenWordPolynomial<C>
subtract(C a, Word e)
GenWordPolynomial subtraction.GenWordPolynomial<C>
subtract(GenWordPolynomial<C> S)
GenWordPolynomial subtraction.GenWordPolynomial<C>
sum(C a)
GenWordPolynomial addition.GenWordPolynomial<C>
sum(C a, Word e)
GenWordPolynomial addition.GenWordPolynomial<C>
sum(GenWordPolynomial<C> S)
GenWordPolynomial summation.C
sumNorm()
GenWordPolynomial 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 GenWordPolynomial.C
trailingBaseCoefficient()
Trailing base coefficient.Word
trailingWord()
Trailing word.java.util.Iterator<Word>
wordIterator()
Iterator over words.-
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 GenWordPolynomialRing<C extends RingElem<C>> ring
The factory for the polynomial ring.
-
-
Constructor Detail
-
GenWordPolynomial
public GenWordPolynomial(GenWordPolynomialRing<C> r)
Constructor for zero GenWordPolynomial.- Parameters:
r
- polynomial ring factory.
-
GenWordPolynomial
public GenWordPolynomial(GenWordPolynomialRing<C> r, C c, Word e)
Constructor for GenWordPolynomial c * xe.- Parameters:
r
- polynomial ring factory.c
- coefficient.e
- word.
-
GenWordPolynomial
public GenWordPolynomial(GenWordPolynomialRing<C> r, C c)
Constructor for GenWordPolynomial c * x0.- Parameters:
r
- polynomial ring factory.c
- coefficient.
-
GenWordPolynomial
public GenWordPolynomial(GenWordPolynomialRing<C> r, Word e)
Constructor for GenWordPolynomial xe.- Parameters:
r
- polynomial ring factory.e
- word.
-
GenWordPolynomial
public GenWordPolynomial(GenWordPolynomialRing<C> r, ExpVector e)
Constructor for GenWordPolynomial xe.- Parameters:
r
- polynomial ring factory.e
- exponent vector.
-
GenWordPolynomial
public GenWordPolynomial(GenWordPolynomialRing<C> r, C c, ExpVector e)
Constructor for GenWordPolynomial c * xe.- Parameters:
r
- polynomial ring factory.c
- coefficient.e
- exponent vector.
-
GenWordPolynomial
protected GenWordPolynomial(GenWordPolynomialRing<C> r, java.util.SortedMap<Word,C> v)
Constructor for GenWordPolynomial.- Parameters:
r
- polynomial ring factory.v
- the SortedMap of some other polynomial.
-
-
Method Detail
-
factory
public GenWordPolynomialRing<C> factory()
Get the corresponding element factory.
-
copy
public GenWordPolynomial<C> copy()
Copy this GenWordPolynomial.
-
length
public int length()
Length of GenWordPolynomial.- Returns:
- number of coefficients of this GenWordPolynomial.
-
getMap
public java.util.SortedMap<Word,C> getMap()
Word to coefficient map of GenWordPolynomial.- Returns:
- val as unmodifiable SortedMap.
-
doPutToMap
public void doPutToMap(Word e, C c)
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:
c
- coefficient.e
- word.
-
doRemoveFromMap
public void doRemoveFromMap(Word e, C c)
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
public void doPutToMap(java.util.SortedMap<Word,C> vals)
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
public java.lang.String toString()
String representation of GenWordPolynomial.- Overrides:
toString
in classjava.lang.Object
- 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 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:
AbelianGroupElem.isZERO()
-
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:
MonoidElem.isONE()
-
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:
MonoidElem.isUnit()
-
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
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(GenWordPolynomial<C> b)
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
public java.util.Map.Entry<Word,C> leadingMonomial()
Leading monomial.- Returns:
- first map entry.
-
leadingWord
public Word leadingWord()
Leading word.- Returns:
- first highest word.
-
trailingWord
public Word trailingWord()
Trailing word.- Returns:
- last lowest word.
-
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(Word e)
Coefficient.- Parameters:
e
- word.- Returns:
- coefficient for given word.
-
reductum
public GenWordPolynomial<C> reductum()
Reductum.- Returns:
- this - leading monomial.
-
degree
public long degree()
Maximal degree.- Returns:
- maximal degree in any variables.
-
sumNorm
public C sumNorm()
GenWordPolynomial sum norm.- Returns:
- sum of all absolute values of coefficients.
-
sum
public GenWordPolynomial<C> sum(GenWordPolynomial<C> S)
GenWordPolynomial summation.- Specified by:
sum
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Parameters:
S
- GenWordPolynomial.- Returns:
- this+S.
-
sum
public GenWordPolynomial<C> sum(C a, Word e)
GenWordPolynomial addition. This method is not very efficient, since this is copied.- Parameters:
a
- coefficient.e
- word.- Returns:
- this + a e.
-
sum
public GenWordPolynomial<C> sum(C a)
GenWordPolynomial addition. This method is not very efficient, since this is copied.- Parameters:
a
- coefficient.- Returns:
- this + a x0.
-
subtract
public GenWordPolynomial<C> subtract(GenWordPolynomial<C> S)
GenWordPolynomial subtraction.- Specified by:
subtract
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Parameters:
S
- GenWordPolynomial.- Returns:
- this-S.
-
subtract
public GenWordPolynomial<C> subtract(C a, Word e)
GenWordPolynomial subtraction. This method is not very efficient, since this is copied.- Parameters:
a
- coefficient.e
- word.- Returns:
- this - a e.
-
subtract
public GenWordPolynomial<C> subtract(C a)
GenWordPolynomial subtract. This method is not very efficient, since this is copied.- Parameters:
a
- coefficient.- Returns:
- this + a x0.
-
negate
public GenWordPolynomial<C> negate()
GenWordPolynomial negation.- Specified by:
negate
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Returns:
- -this.
-
abs
public GenWordPolynomial<C> abs()
GenWordPolynomial absolute value, i.e. leadingCoefficient > 0.- Specified by:
abs
in interfaceAbelianGroupElem<C extends RingElem<C>>
- Returns:
- abs(this).
-
multiply
public GenWordPolynomial<C> multiply(GenWordPolynomial<C> S)
GenWordPolynomial multiplication.- Specified by:
multiply
in interfaceMonoidElem<C extends RingElem<C>>
- Parameters:
S
- GenWordPolynomial.- Returns:
- this*S.
-
multiply
public GenWordPolynomial<C> multiply(GenWordPolynomial<C> S, GenWordPolynomial<C> T)
GenWordPolynomial left and right multiplication. Product with two polynomials.- Parameters:
S
- GenWordPolynomial.T
- GenWordPolynomial.- Returns:
- S*this*T.
-
multiply
public GenWordPolynomial<C> multiply(C s)
GenWordPolynomial multiplication. Product with coefficient ring element.- Parameters:
s
- coefficient.- Returns:
- this*s.
-
multiply
public GenWordPolynomial<C> multiply(C s, C t)
GenWordPolynomial multiplication. Product with coefficient ring element.- Parameters:
s
- coefficient.t
- coefficient.- Returns:
- s*this*t.
-
monic
public GenWordPolynomial<C> monic()
GenWordPolynomial monic, i.e. leadingCoefficient == 1. If leadingCoefficient is not invertible returns this unmodified.- Returns:
- monic(this).
-
multiply
public GenWordPolynomial<C> multiply(C s, Word e)
GenWordPolynomial multiplication. Product with ring element and word.- Parameters:
s
- coefficient.e
- left word.- Returns:
- this * s e.
-
multiply
public GenWordPolynomial<C> multiply(Word e, Word f)
GenWordPolynomial left and right multiplication. Product with ring element and two words.- Parameters:
e
- left word.f
- right word.- Returns:
- e * this * f.
-
multiply
public GenWordPolynomial<C> multiply(C s, Word e, Word f)
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
public GenWordPolynomial<C> multiply(C s, Word e, C t, Word f)
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
public GenWordPolynomial<C> multiply(Word e)
GenWordPolynomial multiplication. Product with word.- Parameters:
e
- word (!= null).- Returns:
- this * e.
-
multiply
public GenWordPolynomial<C> multiply(java.util.Map.Entry<Word,C> m)
GenWordPolynomial multiplication. Product with 'monomial'.- Parameters:
m
- 'monomial'.- Returns:
- this * m.
-
divide
public GenWordPolynomial<C> divide(C s)
GenWordPolynomial division. Division by coefficient ring element. Fails, if exact division is not possible.- Parameters:
s
- coefficient.- Returns:
- this/s.
-
quotientRemainder
public GenWordPolynomial<C>[] quotientRemainder(GenWordPolynomial<C> S)
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
public GenWordPolynomial<C> divide(GenWordPolynomial<C> S)
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.
-
remainder
public GenWordPolynomial<C> remainder(GenWordPolynomial<C> S)
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.
-
gcd
public GenWordPolynomial<C> gcd(GenWordPolynomial<C> S)
GenWordPolynomial greatest common divisor. Only for univariate polynomials over fields.
-
egcd
public GenWordPolynomial<C>[] egcd(GenWordPolynomial<C> S)
GenWordPolynomial extended greatest common divisor. Only for univariate polynomials over fields.
-
hegcd
public GenWordPolynomial<C>[] hegcd(GenWordPolynomial<C> S)
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
public GenWordPolynomial<C> 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
public GenWordPolynomial<C> modInverse(GenWordPolynomial<C> m)
GenWordPolynomial modular inverse. Only for univariate polynomials over fields.- Parameters:
m
- GenWordPolynomial.- Returns:
- a with with a*this = 1 mod m.
-
coefficientIterator
public java.util.Iterator<C> coefficientIterator()
Iterator over coefficients.- Returns:
- val.values().iterator().
-
wordIterator
public java.util.Iterator<Word> wordIterator()
Iterator over words.- Returns:
- val.keySet().iterator().
-
iterator
public java.util.Iterator<WordMonomial<C>> iterator()
Iterator over monomials.
-
map
public GenWordPolynomial<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(e)).
-
contract
public GenWordPolynomial<C> contract(GenWordPolynomialRing<C> fac)
GenWordPolynomial contraction.- Parameters:
fac
- GenWordPolynomialRing.- Returns:
- this contracted to fac ring, if this in fac ring, null else.
-
-