public class MultipleFieldExtension<Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> extends ImageRing<sPoly,mPoly> implements IPolynomialRing<mPoly>
F(α_1, α_2, ..., α_N)
. Elements are represented as multivariate polynomials over
(α_1, α_2, ..., α_N)
; internally all arithmetic operations are performed by switching to appropriate simple
field extension F(γ)
(accessible via getSimpleExtension()
method) where γ
is some primitive
element (accessible via getPrimitiveElement()
method) computed automatically. Representation of generating
algebraic elements α_i
as elements of this simple extension can be obtained via getGeneratorRep(int)
method. Originally, generators are represented by their minimal polynomials over F(α_1, α_2, ..., α_i)
("tower" representation). To construct multiple field extensions one should use #mkMultipleExtension(...)
and
joinAlgebraicElement(UnivariatePolynomial)
.imageFunc, inverseFunc, ring
Constructor and Description |
---|
MultipleFieldExtension(MultipleFieldExtension<Term,mPoly,sPoly>[] tower,
UnivariatePolynomial<mPoly>[] minimalPolynomialsOfGenerators,
mPoly primitiveElement,
sPoly[] generatorsReps,
SimpleFieldExtension<sPoly> simpleExtension) |
Modifier and Type | Method and Description |
---|---|
mPoly |
copy(mPoly element)
Makes a deep copy of the specified element (for immutable instances the same reference returned).
|
int |
degree()
Returns the degree of this filed extension (that is the degree of primitive element)
|
boolean |
equals(Object o) |
mPoly[] |
extendedGCD(mPoly a,
mPoly b)
Returns array of
[gcd(a,b), s, t] such that s * a + t * b = gcd(a, b) |
mPoly |
factorial(long num)
Gives a product of {@code valueOf(1) * valueOf(2) * ....
|
mPoly |
factory()
Factory polynomial
|
mPoly |
gcd(Iterable<mPoly> elements)
Returns greatest common divisor of specified elements
|
mPoly |
gcd(mPoly... elements)
Returns greatest common divisor of specified elements
|
mPoly |
gcd(mPoly a,
mPoly b)
Returns the greatest common divisor of two elements
|
UnivariatePolynomial<mPoly> |
getGeneratorMinimalPoly(int iGenerator)
Returns minimal polynomial corresponding to i-th generator.
|
sPoly |
getGeneratorRep(int iGenerator)
Returns representation of i-th generator as element of simple field extension generated by primitive element
getPrimitiveElement() |
sPoly[] |
getGeneratorReps()
Returns representation of generators as elements of simple field extension generated by primitive element
getPrimitiveElement() |
mPoly |
getOne()
Returns unit element of this ring (one)
|
mPoly |
getPrimitiveElement()
Returns the primitive element of this multiple field extension
|
SimpleFieldExtension<sPoly> |
getSimpleExtension()
Returns the isomorphic simple field extension generated by
getPrimitiveElement() |
MultipleFieldExtension<Term,mPoly,sPoly> |
getSubExtension(int i)
Returns the i-th extension from the tower
|
sPoly |
getUnivariateFactory() |
mPoly |
getZero()
Returns zero element of this ring
|
int |
hashCode() |
boolean |
isOne(mPoly element)
Tests whether specified element is one (exactly)
|
boolean |
isUnit(mPoly element)
Tests whether specified element is a ring unit
|
boolean |
isZero(mPoly element)
Tests whether specified element is zero
|
MultipleFieldExtension<Term,mPoly,sPoly> |
joinAlgebraicElement(sPoly minimalPoly)
Adds algebraic element given by its minimal polynomial (not checked that it is irreducible) to this.
|
MultipleFieldExtension<Term,mPoly,sPoly> |
joinAlgebraicElement(UnivariatePolynomial<mPoly> algebraicElement)
Adds algebraic element given by its minimal polynomial (not checked that it is irreducible) to this.
|
MultipleFieldExtension<Term,mPoly,sPoly> |
joinRedundantElement(mPoly element)
Adds algebraic element given by its minimal polynomial (not checked that it is irreducible) to this.
|
mPoly |
lcm(mPoly a,
mPoly b)
Returns the least common multiple of two elements
|
static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> |
mkMultipleExtension(SimpleFieldExtension<sPoly> ext) |
static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> |
mkMultipleExtension(sPoly... minimalPolynomials)
Creates multiple field extension
F(α_1, α_2, ..., α_i) where α_i are specified by their minimal
polynomials over F. |
static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> |
mkMultipleExtension(sPoly a) |
static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> |
mkSplittingField(sPoly poly)
Constructs splitting field for a given polynomial.
|
int |
nVariables()
Number of polynomial variables
|
int |
signum(mPoly element)
Returns -1 if
element < 0 , 0 if element == 0 and 1 if element > 0 , where comparison is
specified by Comparator.compare(Object, Object) |
String |
toString() |
String |
toString(IStringifier stringifier)
convert this to string with the use of stringifier
|
String |
toString(String... variables) |
mPoly |
valueOf(long val)
Returns ring element associated with specified
long |
mPoly |
valueOfBigInteger(BigInteger val)
Returns ring element associated with specified integer
|
mPoly |
variable(int variable)
Creates poly representing a single specified variable
|
abs, add, add, cardinality, characteristic, compare, decrement, divideAndRemainder, factor, factorSquareFree, image, image, increment, inverse, inverse, isEuclideanRing, isField, isPerfectPower, iterator, multiply, multiply, negate, parse, perfectPowerBase, perfectPowerExponent, pow, pow, pow, quotient, randomElement, reciprocal, remainder, subtract, valueOf
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
mkCoder, parse
abs, add, add, addMutable, cardinality, characteristic, createArray, createArray, createArray, createArray, createArray2d, createArray2d, createZeroesArray, createZeroesArray2d, decrement, divideAndRemainder, divideExact, divideExactMutable, divideOrNull, factor, factorSquareFree, fillZeros, firstBezoutCoefficient, getNegativeOne, increment, isEuclideanRing, isField, isFinite, isFiniteField, isMinusOne, isPerfectPower, isUnitOrZero, iterator, lcm, lcm, max, min, multiply, multiply, multiply, multiply, multiplyMutable, negate, negateMutable, parse, perfectPowerBase, perfectPowerExponent, pow, pow, pow, quotient, randomElement, randomElement, randomElementTree, randomElementTree, randomNonZeroElement, reciprocal, remainder, setToValueOf, subtract, subtractMutable, valueOf, valueOf
compare, comparing, comparing, comparingDouble, comparingInt, comparingLong, naturalOrder, nullsFirst, nullsLast, reversed, reverseOrder, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
forEach, spliterator
public MultipleFieldExtension(MultipleFieldExtension<Term,mPoly,sPoly>[] tower, UnivariatePolynomial<mPoly>[] minimalPolynomialsOfGenerators, mPoly primitiveElement, sPoly[] generatorsReps, SimpleFieldExtension<sPoly> simpleExtension)
public int nVariables()
IPolynomialRing
nVariables
in interface IPolynomialRing<mPoly extends AMultivariatePolynomial<Term,mPoly>>
public mPoly factory()
IPolynomialRing
factory
in interface IPolynomialRing<mPoly extends AMultivariatePolynomial<Term,mPoly>>
public mPoly variable(int variable)
IPolynomialRing
variable
in interface IPolynomialRing<mPoly extends AMultivariatePolynomial<Term,mPoly>>
public sPoly getUnivariateFactory()
public mPoly getPrimitiveElement()
public int degree()
public SimpleFieldExtension<sPoly> getSimpleExtension()
getPrimitiveElement()
public UnivariatePolynomial<mPoly> getGeneratorMinimalPoly(int iGenerator)
public MultipleFieldExtension<Term,mPoly,sPoly> getSubExtension(int i)
public sPoly getGeneratorRep(int iGenerator)
getPrimitiveElement()
public sPoly[] getGeneratorReps()
getPrimitiveElement()
public MultipleFieldExtension<Term,mPoly,sPoly> joinAlgebraicElement(UnivariatePolynomial<mPoly> algebraicElement)
public MultipleFieldExtension<Term,mPoly,sPoly> joinAlgebraicElement(sPoly minimalPoly)
public MultipleFieldExtension<Term,mPoly,sPoly> joinRedundantElement(mPoly element)
public mPoly valueOf(long val)
Ring
long
valueOf
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
valueOf
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
val
- machine integerlong
public mPoly valueOfBigInteger(BigInteger val)
Ring
valueOfBigInteger
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
valueOfBigInteger
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
val
- integerpublic mPoly getZero()
Ring
getZero
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
getZero
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
public mPoly getOne()
Ring
getOne
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
getOne
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
public mPoly copy(mPoly element)
Ring
copy
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
copy
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
element
- the elementpublic boolean isZero(mPoly element)
Ring
isZero
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
isZero
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
element
- the ring elementpublic boolean isOne(mPoly element)
Ring
isOne
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
isOne
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
element
- the ring elementRing.isUnit(Object)
public boolean isUnit(mPoly element)
Ring
isUnit
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
isUnit
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
element
- the ring elementRing.isOne(Object)
public mPoly gcd(mPoly a, mPoly b)
Ring
gcd
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
gcd
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
a
- the first elementb
- the second elementpublic mPoly[] extendedGCD(mPoly a, mPoly b)
Ring
[gcd(a,b), s, t]
such that s * a + t * b = gcd(a, b)
extendedGCD
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
extendedGCD
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
public mPoly lcm(mPoly a, mPoly b)
Ring
lcm
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
lcm
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
a
- the first elementb
- the second elementpublic mPoly gcd(mPoly... elements)
Ring
gcd
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
gcd
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
elements
- the elementspublic mPoly gcd(Iterable<mPoly> elements)
Ring
gcd
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
gcd
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
elements
- the elementspublic int signum(mPoly element)
Ring
element < 0
, 0 if element == 0
and 1 if element > 0
, where comparison is
specified by Comparator.compare(Object, Object)
signum
in interface IPolynomialRing<mPoly extends AMultivariatePolynomial<Term,mPoly>>
signum
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
signum
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
element
- the elementelement < 0
, 0 if element == 0
and 1 otherwisepublic mPoly factorial(long num)
Ring
valueOf(1) * valueOf(2) * .... * valueOf(num)
factorial
in interface Ring<mPoly extends AMultivariatePolynomial<Term,mPoly>>
factorial
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
num
- the numbervalueOf(1) * valueOf(2) * .... * valueOf(num)
public boolean equals(Object o)
equals
in interface Comparator<mPoly extends AMultivariatePolynomial<Term,mPoly>>
equals
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
public int hashCode()
hashCode
in class ImageRing<sPoly extends IUnivariatePolynomial<sPoly>,mPoly extends AMultivariatePolynomial<Term,mPoly>>
public String toString(IStringifier stringifier)
Stringifiable
toString
in interface Stringifiable<mPoly extends AMultivariatePolynomial<Term,mPoly>>
public static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> MultipleFieldExtension<Term,mPoly,sPoly> mkMultipleExtension(sPoly a)
public static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> MultipleFieldExtension<Term,mPoly,sPoly> mkMultipleExtension(SimpleFieldExtension<sPoly> ext)
public static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> MultipleFieldExtension<Term,mPoly,sPoly> mkMultipleExtension(sPoly... minimalPolynomials)
F(α_1, α_2, ..., α_i)
where α_i
are specified by their minimal
polynomials over F.
NOTE: it is not tested that specified minimal polynomials are irreducible
minimalPolynomials
- minimal polynomials of algebraic elementspublic static <Term extends AMonomial<Term>,mPoly extends AMultivariatePolynomial<Term,mPoly>,sPoly extends IUnivariatePolynomial<sPoly>> MultipleFieldExtension<Term,mPoly,sPoly> mkSplittingField(sPoly poly)
Copyright © 2018. All rights reserved.