Package cc.redberry.rings.poly
Class MultivariateRing<Poly extends AMultivariatePolynomial<?,Poly>>
- java.lang.Object
-
- cc.redberry.rings.ARing<Poly>
-
- cc.redberry.rings.poly.MultivariateRing<Poly>
-
- Type Parameters:
Poly
- type of multivariate polynomials
- All Implemented Interfaces:
IParser<Poly>
,Stringifiable<Poly>
,IPolynomialRing<Poly>
,Ring<Poly>
,Serializable
,Iterable<Poly>
,Comparator<Poly>
public final class MultivariateRing<Poly extends AMultivariatePolynomial<?,Poly>> extends ARing<Poly>
Ring of multivariate polynomials.- Since:
- 1.0
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description static int
DEGREE_OF_RANDOM_POLY
Default degree of polynomial generated withrandomElementTree(RandomGenerator)
static int
SIZE_OF_RANDOM_POLY
Default size of polynomial generated withrandomElementTree(RandomGenerator)
-
Constructor Summary
Constructors Constructor Description MultivariateRing(Poly factory)
Creates ring of multivariate polynomials which support operations over multivariate polynomials of the type and number of variables same as of providedfactory
polynomial
-
Method Summary
Modifier and Type Method Description Poly
add(Poly a, Poly b)
Add two elementsPoly
addMutable(Poly a, Poly b)
Adds two elements and destroys the initial content ofa
.BigInteger
cardinality()
Returns the number of elements in this ring (cardinality) or null if ring is infiniteBigInteger
characteristic()
Returns characteristic of this ringint
compare(Poly o1, Poly o2)
Poly
copy(Poly element)
Makes a deep copy of the specified element (for immutable instances the same reference returned).Poly
create(DegreeVector term)
Creates multivariate polynomial over the same ring as this with the single monomialPoly[]
divideAndRemainder(Poly dividend, Poly divider)
Returns quotient and remainder ofdividend / divider
MultivariateRing<Poly>
dropVariable()
boolean
equals(Object o)
PolynomialFactorDecomposition<Poly>
factor(Poly element)
Factor specified elementPolynomialFactorDecomposition<Poly>
factorSquareFree(Poly element)
Square-free factorization of specified elementPoly
factory()
Factory polynomialPoly
gcd(Iterable<Poly> elements)
Returns greatest common divisor of specified elementsPoly
gcd(Poly[] elements)
Returns greatest common divisor of specified elementsPoly
gcd(Poly a, Poly b)
Returns the greatest common divisor of two elementsPoly
getOne()
Returns unit element of this ring (one)Poly
getZero()
Returns zero element of this ringint
hashCode()
boolean
isEuclideanRing()
Returns whether this ring is a Euclidean ringboolean
isField()
Returns whether this ring is a fieldboolean
isOne(Poly element)
Tests whether specified element is one (exactly)boolean
isUnit(Poly element)
Tests whether specified element is a ring unitboolean
isZero(Poly element)
Tests whether specified element is zeroIterator<Poly>
iterator()
Returns iterator over ring elements (for finite rings, otherwise throws exception)<Term extends AMonomial<Term>>
IMonomialAlgebra<Term>monomialAlgebra()
Poly
multiply(Poly a, Poly b)
Multiplies two elementsPoly
multiplyMutable(Poly a, Poly b)
Multiplies two elements and destroys the initial content ofa
Poly
negate(Poly element)
Negates the given elementPoly
negateMutable(Poly element)
Negates the given element and destroys the initial content ofelement
int
nVariables()
Number of polynomial variablesComparator<DegreeVector>
ordering()
Poly
parse(String string)
Parse string into ring elementPoly
pow(Poly base, BigInteger exponent)
Returnsbase
in a power ofexponent
(non negative)Poly
randomElement(int degree, int size)
Generates random multivariate polynomialPoly
randomElement(int degree, int size, org.apache.commons.math3.random.RandomGenerator rnd)
Generates random multivariate polynomialPoly
randomElement(org.apache.commons.math3.random.RandomGenerator rnd)
Gives a random constant polynomial.Poly
randomElementTree(int degree, int size, org.apache.commons.math3.random.RandomGenerator rnd)
Generates random multivariate polynomialPoly
randomElementTree(org.apache.commons.math3.random.RandomGenerator rnd)
If this ring has a complicated nested structure, this method guaranties that the resulting random element will reflect ring complicated structure, i.e.Poly
reciprocal(Poly element)
Gives the inverse elementelement ^ (-1)
Poly
subtract(Poly a, Poly b)
Subtractsb
froma
Poly
subtractMutable(Poly a, Poly b)
Subtractsb
froma
and destroys the initial content ofa
String
toString()
String
toString(IStringifier<Poly> stringifier)
convert this to string with the use of stringifierString
toString(String... variables)
Poly
valueOf(long val)
Returns ring element associated with specifiedlong
Poly
valueOf(Poly val)
Converts a value from other ring to this ring.Poly
valueOfBigInteger(BigInteger val)
Returns ring element associated with specified integerPoly
variable(int variable)
Creates poly representing a single specified variable-
Methods inherited from class cc.redberry.rings.ARing
isPerfectPower, perfectPowerBase, perfectPowerExponent
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.Comparator
reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Methods inherited from interface cc.redberry.rings.poly.IPolynomialRing
mkCoder, parse, signum
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Methods inherited from interface cc.redberry.rings.Ring
abs, add, createArray, createArray, createArray, createArray, createArray2d, createArray2d, createZeroesArray, createZeroesArray2d, decrement, divideExact, divideExactMutable, divideOrNull, extendedGCD, factorial, fillZeros, firstBezoutCoefficient, getNegativeOne, increment, isFinite, isFiniteField, isMinusOne, isPerfectPower, isUnitOrZero, lcm, lcm, lcm, max, min, multiply, multiply, multiply, perfectPowerBase, perfectPowerExponent, pow, pow, quotient, randomElement, randomElementTree, randomNonZeroElement, remainder, setToValueOf, valueOf
-
-
-
-
Field Detail
-
DEGREE_OF_RANDOM_POLY
public static final int DEGREE_OF_RANDOM_POLY
Default degree of polynomial generated withrandomElementTree(RandomGenerator)
- See Also:
- Constant Field Values
-
SIZE_OF_RANDOM_POLY
public static final int SIZE_OF_RANDOM_POLY
Default size of polynomial generated withrandomElementTree(RandomGenerator)
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
MultivariateRing
public MultivariateRing(Poly factory)
Creates ring of multivariate polynomials which support operations over multivariate polynomials of the type and number of variables same as of providedfactory
polynomial- Parameters:
factory
- the factory polynomial (the exact value offactory
is irrelevant) which fixes the element type of this ring, coefficient ring and the number of variables
-
-
Method Detail
-
monomialAlgebra
public <Term extends AMonomial<Term>> IMonomialAlgebra<Term> monomialAlgebra()
-
nVariables
public int nVariables()
Description copied from interface:IPolynomialRing
Number of polynomial variables
-
ordering
public Comparator<DegreeVector> ordering()
-
dropVariable
public MultivariateRing<Poly> dropVariable()
-
divideAndRemainder
public Poly[] divideAndRemainder(Poly dividend, Poly divider)
Description copied from interface:Ring
Returns quotient and remainder ofdividend / divider
- Parameters:
dividend
- the dividenddivider
- the divider- Returns:
{quotient, remainder}
-
gcd
public Poly gcd(Poly a, Poly b)
Description copied from interface:Ring
Returns the greatest common divisor of two elements- Parameters:
a
- the first elementb
- the second element- Returns:
- gcd
-
gcd
public Poly gcd(Poly[] elements)
Description copied from interface:Ring
Returns greatest common divisor of specified elements- Parameters:
elements
- the elements- Returns:
- gcd
-
gcd
public Poly gcd(Iterable<Poly> elements)
Description copied from interface:Ring
Returns greatest common divisor of specified elements- Parameters:
elements
- the elements- Returns:
- gcd
-
factorSquareFree
public PolynomialFactorDecomposition<Poly> factorSquareFree(Poly element)
Description copied from interface:Ring
Square-free factorization of specified element
-
factor
public PolynomialFactorDecomposition<Poly> factor(Poly element)
Description copied from interface:Ring
Factor specified element
-
variable
public Poly variable(int variable)
Description copied from interface:IPolynomialRing
Creates poly representing a single specified variable
-
create
public Poly create(DegreeVector term)
Creates multivariate polynomial over the same ring as this with the single monomial- Parameters:
term
- the monomial- Returns:
- multivariate polynomial
-
randomElement
public Poly randomElement(int degree, int size, org.apache.commons.math3.random.RandomGenerator rnd)
Generates random multivariate polynomial- Parameters:
degree
- maximal degree of the resultsize
- number of elements in the resultrnd
- random source- Returns:
- random polynomial
-
randomElementTree
public Poly randomElementTree(int degree, int size, org.apache.commons.math3.random.RandomGenerator rnd)
Generates random multivariate polynomial- Parameters:
degree
- maximal degree of the resultsize
- number of elements in the resultrnd
- random source- Returns:
- random polynomial
-
randomElement
public Poly randomElement(int degree, int size)
Generates random multivariate polynomial- Parameters:
degree
- maximal degree of the resultsize
- number of elements in the result- Returns:
- random polynomial
-
randomElement
public Poly randomElement(org.apache.commons.math3.random.RandomGenerator rnd)
Gives a random constant polynomial. For generating non-constant random polynomials seeRandomMultivariatePolynomials
- Parameters:
rnd
- the source of randomness- Returns:
- random constant polynomial
- See Also:
RandomMultivariatePolynomials
-
randomElementTree
public Poly randomElementTree(org.apache.commons.math3.random.RandomGenerator rnd)
Description copied from interface:Ring
If this ring has a complicated nested structure, this method guaranties that the resulting random element will reflect ring complicated structure, i.e. the result will be roughly as complicated as the ring is- Returns:
- random element from this ring
-
factory
public Poly factory()
Description copied from interface:IPolynomialRing
Factory polynomial- Specified by:
factory
in interfaceIPolynomialRing<Poly extends IPolynomial<Poly>>
-
isEuclideanRing
public boolean isEuclideanRing()
Description copied from interface:Ring
Returns whether this ring is a Euclidean ring- Specified by:
isEuclideanRing
in interfaceRing<Poly extends IPolynomial<Poly>>
- Returns:
- whether this ring is a Euclidean ring
-
isField
public final boolean isField()
Description copied from interface:Ring
Returns whether this ring is a field- Specified by:
isField
in interfaceRing<Poly extends IPolynomial<Poly>>
- Returns:
- whether this ring is a field
-
cardinality
public final BigInteger cardinality()
Description copied from interface:Ring
Returns the number of elements in this ring (cardinality) or null if ring is infinite- Specified by:
cardinality
in interfaceRing<Poly extends IPolynomial<Poly>>
- Returns:
- the number of elements in this ring (cardinality) or null if ring is infinite
-
characteristic
public final BigInteger characteristic()
Description copied from interface:Ring
Returns characteristic of this ring- Specified by:
characteristic
in interfaceRing<Poly extends IPolynomial<Poly>>
- Returns:
- characteristic of this ring
-
add
public final Poly add(Poly a, Poly b)
Description copied from interface:Ring
Add two elements- Specified by:
add
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
a
- the first elementb
- the second element- Returns:
- a + b
-
subtract
public final Poly subtract(Poly a, Poly b)
Description copied from interface:Ring
Subtractsb
froma
- Specified by:
subtract
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
a
- the first elementb
- the second element- Returns:
- a - b
-
multiply
public final Poly multiply(Poly a, Poly b)
Description copied from interface:Ring
Multiplies two elements- Specified by:
multiply
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
a
- the first elementb
- the second element- Returns:
- a * b
-
negate
public final Poly negate(Poly element)
Description copied from interface:Ring
Negates the given element- Specified by:
negate
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the ring element- Returns:
- -val
-
pow
public Poly pow(Poly base, BigInteger exponent)
Description copied from interface:Ring
Returnsbase
in a power ofexponent
(non negative)- Specified by:
pow
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
base
- baseexponent
- exponent (non negative)- Returns:
base
in a power ofexponent
-
addMutable
public Poly addMutable(Poly a, Poly b)
Description copied from interface:Ring
Adds two elements and destroys the initial content ofa
.- Specified by:
addMutable
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
a
- the first element (may be destroyed)b
- the second element- Returns:
- a + b
-
subtractMutable
public Poly subtractMutable(Poly a, Poly b)
Description copied from interface:Ring
Subtractsb
froma
and destroys the initial content ofa
- Specified by:
subtractMutable
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
a
- the first element (may be destroyed)b
- the second element- Returns:
- a - b
-
multiplyMutable
public Poly multiplyMutable(Poly a, Poly b)
Description copied from interface:Ring
Multiplies two elements and destroys the initial content ofa
- Specified by:
multiplyMutable
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
a
- the first element (may be destroyed)b
- the second element- Returns:
- a * b
-
negateMutable
public Poly negateMutable(Poly element)
Description copied from interface:Ring
Negates the given element and destroys the initial content ofelement
- Specified by:
negateMutable
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the ring element (may be destroyed)- Returns:
- -element
-
reciprocal
public final Poly reciprocal(Poly element)
Description copied from interface:Ring
Gives the inverse elementelement ^ (-1)
- Specified by:
reciprocal
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the element- Returns:
element ^ (-1)
-
getZero
public final Poly getZero()
Description copied from interface:Ring
Returns zero element of this ring- Specified by:
getZero
in interfaceRing<Poly extends IPolynomial<Poly>>
- Returns:
- 0
-
getOne
public final Poly getOne()
Description copied from interface:Ring
Returns unit element of this ring (one)- Specified by:
getOne
in interfaceRing<Poly extends IPolynomial<Poly>>
- Returns:
- 1
-
isZero
public final boolean isZero(Poly element)
Description copied from interface:Ring
Tests whether specified element is zero- Specified by:
isZero
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the ring element- Returns:
- whether specified element is zero
-
isOne
public final boolean isOne(Poly element)
Description copied from interface:Ring
Tests whether specified element is one (exactly)- Specified by:
isOne
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the ring element- Returns:
- whether specified element is exactly one
- See Also:
Ring.isUnit(Object)
-
isUnit
public boolean isUnit(Poly element)
Description copied from interface:Ring
Tests whether specified element is a ring unit- Specified by:
isUnit
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the ring element- Returns:
- whether specified element is a ring unit
- See Also:
Ring.isOne(Object)
-
valueOf
public final Poly valueOf(long val)
Description copied from interface:Ring
Returns ring element associated with specifiedlong
- Specified by:
valueOf
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
val
- machine integer- Returns:
- ring element associated with specified
long
-
valueOfBigInteger
public Poly valueOfBigInteger(BigInteger val)
Description copied from interface:Ring
Returns ring element associated with specified integer- Specified by:
valueOfBigInteger
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
val
- integer- Returns:
- ring element associated with specified integer
-
valueOf
public final Poly valueOf(Poly val)
Description copied from interface:Ring
Converts a value from other ring to this ring. The result is not guarantied to be a new instance (i.e.val == valueOf(val)
is possible).- Specified by:
valueOf
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
val
- some element from any ring- Returns:
- this ring element associated with specified
val
-
copy
public Poly copy(Poly element)
Description copied from interface:Ring
Makes a deep copy of the specified element (for immutable instances the same reference returned).- Specified by:
copy
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
element
- the element- Returns:
- deep copy of specified element
-
compare
public final int compare(Poly o1, Poly o2)
- Specified by:
compare
in interfaceComparator<Poly extends IPolynomial<Poly>>
-
equals
public final boolean equals(Object o)
- Specified by:
equals
in interfaceComparator<Poly extends IPolynomial<Poly>>
- Overrides:
equals
in classObject
-
iterator
public Iterator<Poly> iterator()
Description copied from interface:Ring
Returns iterator over ring elements (for finite rings, otherwise throws exception)- Specified by:
iterator
in interfaceIterable<Poly extends IPolynomial<Poly>>
- Specified by:
iterator
in interfaceRing<Poly extends IPolynomial<Poly>>
-
parse
public Poly parse(String string)
Description copied from interface:Ring
Parse string into ring element- Specified by:
parse
in interfaceIParser<Poly extends IPolynomial<Poly>>
- Specified by:
parse
in interfaceRing<Poly extends IPolynomial<Poly>>
- Parameters:
string
- string- Returns:
- ring element
- See Also:
Coder
-
toString
public String toString(IStringifier<Poly> stringifier)
Description copied from interface:Stringifiable
convert this to string with the use of stringifier- Specified by:
toString
in interfaceStringifiable<Poly extends IPolynomial<Poly>>
-
-