public final class MultivariatePolynomial<E> extends AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
Modifier and Type | Class and Description |
---|---|
static class |
MultivariatePolynomial.HornerForm<E>
A representation of multivariate polynomial specifically optimized for fast evaluation of given variables
|
static class |
MultivariatePolynomial.PrecomputedPowersHolder<E>
holds an array of precomputed powers
|
AMultivariatePolynomial.PolynomialCollector<Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>>
Modifier and Type | Field and Description |
---|---|
Ring<E> |
ring
The coefficient ring
|
monomialAlgebra, nVariables, ordering
Modifier and Type | Method and Description |
---|---|
MultivariatePolynomial<E> |
add(E oth)
Adds
oth to this polynomial |
static <E> MultivariatePolynomial<E> |
asMultivariate(UnivariatePolynomial<E> poly,
int nVariables,
int variable,
Comparator<DegreeVector> ordering)
Converts univariate polynomial to multivariate.
|
static <E> MultivariatePolynomial<E> |
asNormalMultivariate(MultivariatePolynomial<MultivariatePolynomial<E>> poly)
Converts multivariate polynomial over multivariate polynomial ring to a multivariate polynomial over coefficient
ring
|
static <E> MultivariatePolynomial<E> |
asNormalMultivariate(MultivariatePolynomial<MultivariatePolynomial<E>> poly,
int[] coefficientVariables,
int[] mainVariables)
Converts multivariate polynomial over multivariate polynomial ring to a multivariate polynomial over coefficient
ring
|
static <E> MultivariatePolynomial<E> |
asNormalMultivariate(MultivariatePolynomial<UnivariatePolynomial<E>> poly,
int variable)
Converts multivariate polynomial over univariate polynomial ring (R[variable][other_variables]) to a multivariate
polynomial over coefficient ring (R[variables])
|
MultivariatePolynomial<MultivariatePolynomial<E>> |
asOverMultivariate(int... variables)
Converts this to a multivariate polynomial with coefficients being multivariate polynomials polynomials over
variables that is polynomial in R[variables][other_variables] |
MultivariatePolynomial<MultivariatePolynomial<E>> |
asOverMultivariateEliminate(int[] variables,
Comparator<DegreeVector> ordering)
Converts this to a multivariate polynomial with coefficients being multivariate polynomials polynomials over
variables that is polynomial in R[variables][other_variables] |
MultivariatePolynomial<UnivariatePolynomial<E>> |
asOverUnivariate(int variable)
Converts this to a multivariate polynomial with coefficients being univariate polynomials over
variable |
MultivariatePolynomial<UnivariatePolynomial<E>> |
asOverUnivariateEliminate(int variable)
Converts this to a multivariate polynomial with coefficients being univariate polynomials over
variable ,
the resulting polynomial have (nVariable - 1) multivariate variables (specified variable is eliminated) |
static MultivariatePolynomialZp64 |
asOverZp64(MultivariatePolynomial<BigInteger> poly)
Converts multivariate polynomial over BigIntegers to multivariate polynomial over machine modular integers
|
static MultivariatePolynomialZp64 |
asOverZp64(MultivariatePolynomial<BigInteger> poly,
IntegersZp64 ring)
Converts multivariate polynomial over BigIntegers to multivariate polynomial over machine modular integers
|
static MultivariatePolynomial<BigInteger> |
asPolyZ(MultivariatePolynomial<BigInteger> poly,
boolean copy)
Returns Z[X] polynomial formed from the coefficients of the poly.
|
static MultivariatePolynomial<BigInteger> |
asPolyZSymmetric(MultivariatePolynomial<BigInteger> poly)
Converts Zp[x] polynomial to Z[x] polynomial formed from the coefficients of this represented in symmetric
modular form (
-modulus/2 <= cfx <= modulus/2 ). |
UnivariatePolynomial<E> |
asUnivariate()
Converts this to univariate polynomial or throws exception if conversion is impossible (more than one variable
have non zero exponents)
|
E |
cc()
Returns the constant coefficient of this polynomial.
|
MultivariatePolynomial<E> |
ccAsPoly()
Returns the constant coefficient as a constant poly
|
MultivariatePolynomial<E> |
clone()
Deep copy of this
|
BigInteger |
coefficientRingCardinality()
Returns cardinality of the coefficient ring of this poly
|
BigInteger |
coefficientRingCharacteristic()
Returns characteristic of the coefficient ring of this poly
|
BigInteger |
coefficientRingPerfectPowerBase()
Returns
base so that coefficientRingCardinality() == base^exponent or null if cardinality is not
finite |
BigInteger |
coefficientRingPerfectPowerExponent()
Returns
exponent so that coefficientRingCardinality() == base^exponent or null if cardinality is
not finite |
String |
coefficientRingToString(IStringifier<MultivariatePolynomial<E>> stringifier)
String representation of the coefficient ring of this
|
Iterable<E> |
coefficients()
Returns iterable over polynomial coefficients
|
E[] |
coefficientsArray()
Returns array of polynomial coefficients
|
int |
compareTo(MultivariatePolynomial<E> oth) |
E |
content()
Returns the content of this polynomial.
|
MultivariatePolynomial<E> |
contentAsPoly()
Returns the content of this (gcd of coefficients) as a constant poly
|
UnivariatePolynomial<E> |
contentUnivariate(int variable)
Gives the content of this considered as R[variable][other_variables]
|
static <E> MultivariatePolynomial<E> |
create(int nVariables,
Ring<E> ring,
Comparator<DegreeVector> ordering,
Iterable<Monomial<E>> terms)
Creates multivariate polynomial from a list of monomial terms
|
static <E> MultivariatePolynomial<E> |
create(int nVariables,
Ring<E> ring,
Comparator<DegreeVector> ordering,
Monomial<E>... terms)
Creates multivariate polynomial from a list of monomial terms
|
MultivariatePolynomial<E>[] |
createArray(int length)
overcome Java generics...
|
MultivariatePolynomial<E>[][] |
createArray2d(int length)
overcome Java generics...
|
MultivariatePolynomial<E>[][] |
createArray2d(int length1,
int length2)
overcome Java generics...
|
MultivariatePolynomial<E> |
createConstant(E val)
Creates constant polynomial with specified value
|
MultivariatePolynomial<E> |
createConstantFromTerm(Monomial<E> monomial)
Creates multivariate polynomial over the same ring as this with the single constant element taken from given
monomial
|
MultivariatePolynomial<E> |
createLinear(int variable,
E cc,
E lc)
Creates linear polynomial of the form
cc + lc * variable |
MultivariatePolynomial<E> |
createOne()
Returns the new instance of unit polynomial (with the same coefficient ring)
|
MultivariatePolynomial<E> |
createZero()
Returns the new instance of zero polynomial (with the same coefficient ring)
|
MultivariatePolynomial<E> |
decrement()
Subtracts 1 from this
|
MultivariatePolynomial<E> |
derivative(int variable,
int order)
Gives partial derivative of specified
order with respect to specified variable (new instance created) |
MultivariatePolynomial<E> |
divideByLC(MultivariatePolynomial<E> other)
Divides this polynomial by the leading coefficient of
other or returns null (causing loss of
internal data) if some of the elements can't be exactly divided by the other.lc() . |
MultivariatePolynomial<E> |
divideExact(E factor)
Divides this polynomial by a
factor or throws exception if exact division is not possible |
MultivariatePolynomial<E> |
divideOrNull(E factor)
Divides this polynomial by a
factor or returns null (causing loss of internal data) if some of
the elements can't be exactly divided by the factor . |
MultivariatePolynomial<E> |
divideOrNull(Monomial<E> monomial)
Divides this polynomial by a
monomial or returns null (causing loss of internal data) if some of
the elements can't be exactly divided by the monomial . |
MultivariatePolynomial<E> |
eliminate(int[] variables,
E[] values)
Returns a copy of this with
values substituted for variables |
MultivariatePolynomial<E> |
eliminate(int variable,
E value)
Substitutes
value for variable and eliminates variable from the list of variables so that
the resulting polynomial has result.nVariables = this.nVariables - 1 . |
MultivariatePolynomial<E> |
eliminate(int variable,
long value)
Substitutes
value for variable and eliminates variable from the list of variables so that
the resulting polynomial has result.nVariables = this.nVariables - 1 . |
E |
evaluate(E... values)
Evaluates this polynomial at specified points
|
MultivariatePolynomial<E> |
evaluate(int[] variables,
E[] values)
Returns a copy of this with
values substituted for variables . |
MultivariatePolynomial<E>[] |
evaluate(int variable,
E... values)
Evaluates this polynomial at specified points
|
MultivariatePolynomial<E> |
evaluate(int variable,
E value)
Returns a copy of this with
value substituted for variable . |
MultivariatePolynomial<E> |
evaluate(int variable,
long value)
Returns a copy of this with
value substituted for variable . |
MultivariatePolynomial<E> |
evaluateAtRandom(int variable,
org.apache.commons.math3.random.RandomGenerator rnd)
Evaluates
poly at random point |
MultivariatePolynomial<E> |
evaluateAtRandomPreservingSkeleton(int variable,
org.apache.commons.math3.random.RandomGenerator rnd)
Evaluates
poly at random point chosen in such way that the skeleton of evaluated version is the same as
of the original poly with respect to all except variable variables |
static <E> E |
evaluateDenseRecursiveForm(UnivariatePolynomial recForm,
int nVariables,
E[] values)
Evaluates polynomial given in a dense recursive form at a given points
|
static <E> E |
evaluateSparseRecursiveForm(AMultivariatePolynomial recForm,
int nVariables,
E[] values)
Evaluates polynomial given in a sparse recursive form at a given points
|
static <E> MultivariatePolynomial<E> |
fromDenseRecursiveForm(UnivariatePolynomial recForm,
int nVariables,
Comparator<DegreeVector> ordering)
Converts poly from a recursive univariate representation.
|
static <E> MultivariatePolynomial<E> |
fromSparseRecursiveForm(AMultivariatePolynomial recForm,
int nVariables,
Comparator<DegreeVector> ordering)
Converts poly from a recursive univariate representation.
|
MultivariatePolynomial.HornerForm |
getHornerForm(int[] evaluationVariables)
Gives data structure for fast Horner-like sparse evaluation of this multivariate polynomial
|
MultivariatePolynomial<E> |
increment()
Adds 1 to this
|
boolean |
isConstant()
Returns
true if this polynomial has only constant term |
boolean |
isMonic()
Returns
true if this polynomial is monic |
boolean |
isOne()
Returns
true if this is one |
boolean |
isOverField()
Returns whether the coefficient ring of this polynomial is a field
|
boolean |
isOverFiniteField()
Returns whether the coefficient ring of this polynomial is a finite field
|
boolean |
isOverPerfectPower()
Returns whether the
coefficientRingCardinality() is a perfect power |
boolean |
isOverZ()
Returns whether the coefficient ring of this polynomial is Z
|
boolean |
isUnitCC()
Returns true if constant term is equal to one
|
E |
lc()
Returns the leading coefficient of this polynomial that is coefficient of the largest term according to the
ordering.
|
E |
lc(Comparator<DegreeVector> ordering)
Returns the leading coefficient of this polynomial with respect to specified ordering
|
MultivariatePolynomial<E> |
lcAsPoly()
Returns the leading coefficient as a constant poly
|
MultivariatePolynomial<E> |
lcAsPoly(Comparator<DegreeVector> ordering)
Returns the leading coefficient with respect to specified ordering as a constant poly
|
MultivariatePolynomialZp64 |
mapCoefficients(IntegersZp64 newDomain,
ToLongFunction<E> mapper)
Maps coefficients of this using specified mapping function
|
<T> MultivariatePolynomial<T> |
mapCoefficients(Ring<T> newRing,
Function<E,T> mapper)
Maps coefficients of this using specified mapping function
|
<T> MultivariatePolynomial<T> |
mapCoefficientsAsPolys(Ring<T> ring,
Function<MultivariatePolynomial<E>,T> mapper) |
<T> MultivariatePolynomial<T> |
mapTerms(Ring<T> newRing,
Function<Monomial<E>,Monomial<T>> mapper)
Maps terms of this using specified mapping function
|
E |
maxAbsCoefficient()
Returns max absolute coefficient
|
MultivariatePolynomial.PrecomputedPowersHolder<E> |
mkPrecomputedPowers(E[] values) |
MultivariatePolynomial.PrecomputedPowersHolder<E> |
mkPrecomputedPowers(int[] variables,
E[] values) |
MultivariatePolynomial.PrecomputedPowersHolder<E> |
mkPrecomputedPowers(int variable,
E value) |
static <E> MultivariatePolynomial.PrecomputedPowersHolder<E> |
mkPrecomputedPowers(int nVariables,
Ring<E> ring,
int[] variables,
E[] values) |
MultivariatePolynomial<E> |
monic()
Makes this polynomial monic if possible, if not -- destroys this and returns null
|
MultivariatePolynomial<E> |
monic(Comparator<DegreeVector> ordering)
Make this poly monic considering leading term with respect to given ordering
|
MultivariatePolynomial<E> |
monic(Comparator<DegreeVector> ordering,
E factor)
Sets
this to its monic part (with respect to given ordering) multiplied by the given factor; |
MultivariatePolynomial<E> |
monic(E factor)
Sets
this to its monic part multiplied by the factor modulo modulus (that is monic(modulus).multiply(factor) ). |
MultivariatePolynomial<E> |
monicWithLC(Comparator<DegreeVector> ordering,
MultivariatePolynomial<E> other)
Sets
this to its monic part multiplied by the leading coefficient of other with respect to given
ordering |
MultivariatePolynomial<E> |
monicWithLC(MultivariatePolynomial<E> other)
Sets
this to its monic part multiplied by the leading coefficient of other ; |
MultivariatePolynomial<E> |
multiply(E factor)
Multiplies
this by the factor |
MultivariatePolynomial<E> |
multiply(long factor)
Multiplies this by
factor |
MultivariatePolynomial<E> |
multiply(Monomial<E> monomial)
Multiplies
this by the monomial |
MultivariatePolynomial<E> |
multiply(MultivariatePolynomial<E> oth)
Multiplies this by
oth |
MultivariatePolynomial<E> |
multiplyByBigInteger(BigInteger factor)
Multiplies this by
factor |
MultivariatePolynomial<E> |
multiplyByLC(MultivariatePolynomial<E> other)
Multiply this by the leading coefficient of
other |
static <E> MultivariatePolynomial<E> |
one(int nVariables,
Ring<E> ring,
Comparator<DegreeVector> ordering)
Creates unit polynomial.
|
static MultivariatePolynomial<BigInteger> |
parse(String string)
Deprecated.
use #parse(string, ring, ordering, variables)
|
static MultivariatePolynomial<BigInteger> |
parse(String string,
Comparator<DegreeVector> ordering)
Deprecated.
use #parse(string, ring, ordering, variables)
|
static MultivariatePolynomial<BigInteger> |
parse(String string,
Comparator<DegreeVector> ordering,
String... variables)
Parse multivariate Z[X] polynomial from string.
|
static <E> MultivariatePolynomial<E> |
parse(String string,
Ring<E> ring)
Deprecated.
use #parse(string, ring, ordering, variables)
|
static <E> MultivariatePolynomial<E> |
parse(String string,
Ring<E> ring,
Comparator<DegreeVector> ordering)
Deprecated.
use #parse(string, ring, ordering, variables)
|
static <E> MultivariatePolynomial<E> |
parse(String string,
Ring<E> ring,
Comparator<DegreeVector> ordering,
String... variables)
Parse multivariate polynomial from string.
|
static <E> MultivariatePolynomial<E> |
parse(String string,
Ring<E> ring,
String... variables)
Parse multivariate polynomial from string.
|
static MultivariatePolynomial<BigInteger> |
parse(String string,
String... variables)
Parse multivariate Z[X] polynomial from string.
|
MultivariatePolynomial<E> |
parsePoly(String string)
Deprecated.
|
MultivariatePolynomial<E> |
primitivePart()
Reduces poly to its primitive part (primitive part will always have positive l.c.)
|
MultivariatePolynomial<E> |
primitivePart(int variable)
Gives primitive part of this considered as R[variable][other_variables]
|
MultivariatePolynomial<E> |
primitivePartSameSign()
Reduces poly to its primitive part, so that primitive part will have the same signum as the initial poly
|
protected void |
release()
release caches
|
boolean |
sameCoefficientRingWith(MultivariatePolynomial<E> oth)
Returns whether
oth and this have the same coefficient ring |
MultivariatePolynomial<E> |
seriesCoefficient(int variable,
int order)
Gives (unevaluated) coefficient of Taylor series expansion for specified variable that is
derivative(poly,
variable, order) / order! , where the derivative is formal derivative and calculated with arithmetic performed
in Z ring (to overcome possible zeros in Zp). |
MultivariatePolynomial<E> |
setCoefficientRingFrom(MultivariatePolynomial<E> poly)
Set the coefficient ring from specified poly
|
MultivariatePolynomial<E> |
setLC(E val)
Sets the leading coefficient to the specified value
|
MultivariatePolynomial<E> |
setRing(Ring<E> newRing)
Returns a copy of this with coefficient reduced to a
newRing |
MultivariatePolynomial<E> |
setRingUnsafe(Ring<E> newRing)
internal API
|
MultivariatePolynomial<E> |
shift(int[] variables,
E[] shifts)
Returns a copy of this with
variables -> variables + shifts |
MultivariatePolynomial<E> |
shift(int variable,
E shift)
Returns a copy of this with
variable -> variable + shift |
MultivariatePolynomial<E> |
shift(int variable,
long shift)
Returns a copy of this with
variable -> variable + shift |
int |
signumOfLC()
Gives signum of the leading coefficient
|
MultivariatePolynomial<E> |
square()
Squares
this |
Stream<E> |
stream()
Returns a stream of coefficients of this
|
MultivariatePolynomial<E> |
substitute(int variable,
MultivariatePolynomial<E> poly)
Returns a copy of this with
poly substituted for variable . |
MultivariatePolynomial<E> |
subtract(E oth)
Subtracts
oth from this polynomial |
UnivariatePolynomial |
toDenseRecursiveForm()
Gives a recursive univariate representation of this poly.
|
AMultivariatePolynomial |
toSparseRecursiveForm()
Gives a recursive sparse univariate representation of this poly.
|
String |
toString(IStringifier<MultivariatePolynomial<E>> stringifier)
convert this to string with the use of stringifier
|
static <E> MultivariatePolynomial<E> |
zero(int nVariables,
Ring<E> ring,
Comparator<DegreeVector> ordering)
Creates zero polynomial.
|
add, add, add, add, ascendingIterator, asMultivariate, asMultivariate, asMultivariate, asOverMultivariateEliminate, asOverPoly, asUnivariate, asUnivariateEliminate, coefficientOf, coefficientOf, collection, composition, composition, composition, composition, composition, content, contentExcept, create, create, create, create, createMonomial, degree, degree, degree, degreeMax, degrees, degrees, degreesRef, degreeSum, derivative, derivative, descendingIterator, divideDegreeVectorOrNull, dropCoefficientOf, dropSelectVariables, dropVariable, dropVariables, ecart, equals, evaluateAtZero, evaluateAtZero, first, getSkeleton, getSkeleton, getSkeletonDrop, getSkeletonExcept, hashCode, homogenize, insertVariable, insertVariable, isEffectiveUnivariate, isHomogeneous, isLinearExactly, isLinearOrConstant, isMonomial, isZero, isZeroCC, iterator, joinNewVariable, joinNewVariables, last, lc, lt, lt, ltAsPoly, mapVariables, monomialContent, mt, multidegree, multiplyByDegreeVector, multiplyByMonomial, negate, nUsedVariables, put, renameVariables, renameVariables, renameVariables, sameSkeletonExceptQ, sameSkeletonQ, sameSkeletonQ, set, setAllCoefficientsToUnit, setLC, setNVariables, setOrdering, size, sparsity, sparsity2, subtract, subtract, subtract, subtractLt, swapVariables, toArray, toString, totalDegree, toZero, univariateVariable
finalize, getClass, notify, notifyAll, wait, wait, wait
add, assertSameCoefficientRingWith, canonical, coefficientRingToString, copy, createArray, createArray, createArray, createConstant, monicExact, multiply, multiply, setCoefficientRingFromOptional, subtract, toPositiveLC, toString
forEach, spliterator
public static <E> MultivariatePolynomial<E> create(int nVariables, Ring<E> ring, Comparator<DegreeVector> ordering, Iterable<Monomial<E>> terms)
ring
- the ringordering
- term orderingterms
- the monomial termspublic static <E> MultivariatePolynomial<E> create(int nVariables, Ring<E> ring, Comparator<DegreeVector> ordering, Monomial<E>... terms)
ring
- the ringordering
- term orderingterms
- the monomial termspublic static <E> MultivariatePolynomial<E> zero(int nVariables, Ring<E> ring, Comparator<DegreeVector> ordering)
nVariables
- number of variablesring
- the ringordering
- the orderingpublic static <E> MultivariatePolynomial<E> one(int nVariables, Ring<E> ring, Comparator<DegreeVector> ordering)
nVariables
- number of variablesring
- the ringordering
- the orderingpublic static MultivariatePolynomial<BigInteger> parse(String string, String... variables)
string
- the stringvariables
- string variables that should be taken into account. For examples: parse("a", LEX)
and
parse("a", LEX, "a", "b")
although give the same mathematical expressions are differ,
since the first one is considered as Z[x], while the second as Z[x1,x2]@Deprecated public static MultivariatePolynomial<BigInteger> parse(String string)
string
- the stringpublic static <E> MultivariatePolynomial<E> parse(String string, Ring<E> ring, String... variables)
string
- the stringring
- the ringvariables
- string variables that should be taken into account. For examples: parse("a", LEX)
and
parse("a", LEX, "a", "b")
although give the same mathematical expressions are differ,
since the first one is considered as Z[x], while the second as Z[x1,x2]@Deprecated public static <E> MultivariatePolynomial<E> parse(String string, Ring<E> ring)
string
- the stringring
- the ringpublic static MultivariatePolynomial<BigInteger> parse(String string, Comparator<DegreeVector> ordering, String... variables)
string
- the stringordering
- monomial ordervariables
- string variables that should be taken into account. For examples: parse("a", LEX)
and
parse("a", LEX, "a", "b")
although give the same mathematical expressions are differ,
since the first one is considered as Z[x], while the second as Z[x1,x2]@Deprecated public static MultivariatePolynomial<BigInteger> parse(String string, Comparator<DegreeVector> ordering)
string
- the stringordering
- monomial orderpublic static <E> MultivariatePolynomial<E> parse(String string, Ring<E> ring, Comparator<DegreeVector> ordering, String... variables)
string
- the stringring
- the ringordering
- monomial ordervariables
- string variables that should be taken into account. For examples: parse("a", LEX)
and
parse("a", LEX, "a", "b")
although give the same mathematical expressions are different,
since the first one is considered as Z[a], while the second as Z[a,b]@Deprecated public static <E> MultivariatePolynomial<E> parse(String string, Ring<E> ring, Comparator<DegreeVector> ordering)
string
- the stringring
- the ringordering
- monomial orderpublic static MultivariatePolynomialZp64 asOverZp64(MultivariatePolynomial<BigInteger> poly)
poly
- the polynomialIllegalArgumentException
- if poly.ring is not ZpArithmeticException
- if some of coefficients will not exactly fit in a long
.public static MultivariatePolynomialZp64 asOverZp64(MultivariatePolynomial<BigInteger> poly, IntegersZp64 ring)
poly
- the polynomialring
- Zp64 ringIllegalArgumentException
- if poly.ring is not ZpArithmeticException
- if some of coefficients will not exactly fit in a long
.public static <E> MultivariatePolynomial<E> asMultivariate(UnivariatePolynomial<E> poly, int nVariables, int variable, Comparator<DegreeVector> ordering)
poly
- univariate polynomialnVariables
- number of variables in the resultvariable
- variable that will be used as a primary variableordering
- monomial orderpublic UnivariatePolynomial<E> asUnivariate()
AMultivariatePolynomial
asUnivariate
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
public MultivariatePolynomial<UnivariatePolynomial<E>> asOverUnivariate(int variable)
AMultivariatePolynomial
variable
asOverUnivariate
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
variable
- variablevariable
public MultivariatePolynomial<UnivariatePolynomial<E>> asOverUnivariateEliminate(int variable)
AMultivariatePolynomial
variable
,
the resulting polynomial have (nVariable - 1) multivariate variables (specified variable
is eliminated)asOverUnivariateEliminate
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
variable
- the variablevariable
, the
resulting polynomial have (nVariable - 1) multivariate variablespublic MultivariatePolynomial<MultivariatePolynomial<E>> asOverMultivariate(int... variables)
AMultivariatePolynomial
variables
that is polynomial in R[variables][other_variables]asOverMultivariate
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
variables
- the variables to separatevariables
that is polynomial in R[variables][other_variables]public MultivariatePolynomial<MultivariatePolynomial<E>> asOverMultivariateEliminate(int[] variables, Comparator<DegreeVector> ordering)
AMultivariatePolynomial
variables
that is polynomial in R[variables][other_variables]asOverMultivariateEliminate
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
variables
- the variables to separateordering
- monomial order to use for resultvariables
that is polynomial in R[variables][other_variables]public static <E> MultivariatePolynomial<E> asNormalMultivariate(MultivariatePolynomial<UnivariatePolynomial<E>> poly, int variable)
poly
- the polynomialvariable
- the variable to insertpublic static <E> MultivariatePolynomial<E> asNormalMultivariate(MultivariatePolynomial<MultivariatePolynomial<E>> poly)
poly
- the polynomialpublic static <E> MultivariatePolynomial<E> asNormalMultivariate(MultivariatePolynomial<MultivariatePolynomial<E>> poly, int[] coefficientVariables, int[] mainVariables)
poly
- the polynomialpublic static MultivariatePolynomial<BigInteger> asPolyZ(MultivariatePolynomial<BigInteger> poly, boolean copy)
poly
- the polynomialcopy
- whether to copy the internal datapublic static MultivariatePolynomial<BigInteger> asPolyZSymmetric(MultivariatePolynomial<BigInteger> poly)
-modulus/2 <= cfx <= modulus/2
).poly
- Zp polynomial-modulus/2 <=
cfx <= modulus/2
).IllegalArgumentException
- is poly.ring
is not a IntegersZp
public MultivariatePolynomial<E> contentAsPoly()
IPolynomial
public MultivariatePolynomial<E> lcAsPoly()
IPolynomial
public MultivariatePolynomial<E> lcAsPoly(Comparator<DegreeVector> ordering)
AMultivariatePolynomial
lcAsPoly
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
public MultivariatePolynomial<E> ccAsPoly()
IPolynomial
public boolean isOverField()
IPolynomial
public boolean isOverFiniteField()
IPolynomial
public boolean isOverZ()
IPolynomial
public BigInteger coefficientRingCardinality()
IPolynomial
public BigInteger coefficientRingCharacteristic()
IPolynomial
public boolean isOverPerfectPower()
IPolynomial
coefficientRingCardinality()
is a perfect powercoefficientRingCardinality()
is a perfect powerpublic BigInteger coefficientRingPerfectPowerBase()
IPolynomial
base
so that coefficientRingCardinality() == base^exponent
or null if cardinality is not
finitebase
so that coefficientRingCardinality() == base^exponent
or null if cardinality is not
finitepublic BigInteger coefficientRingPerfectPowerExponent()
IPolynomial
exponent
so that coefficientRingCardinality() == base^exponent
or null if cardinality is
not finiteexponent
so that coefficientRingCardinality() == base^exponent
or null if cardinality is
not finitepublic MultivariatePolynomial<E>[] createArray(int length)
IPolynomial
public MultivariatePolynomial<E>[][] createArray2d(int length)
IPolynomial
public MultivariatePolynomial<E>[][] createArray2d(int length1, int length2)
IPolynomial
public boolean sameCoefficientRingWith(MultivariatePolynomial<E> oth)
IPolynomial
oth
and this
have the same coefficient ringoth
- other polynomialpublic MultivariatePolynomial<E> setCoefficientRingFrom(MultivariatePolynomial<E> poly)
IPolynomial
poly
- the polynomialpoly
protected void release()
release
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
public MultivariatePolynomial<E> setRing(Ring<E> newRing)
newRing
newRing
- the new ringnewRing
public MultivariatePolynomial<E> setRingUnsafe(Ring<E> newRing)
public MultivariatePolynomial<E> createConstant(E val)
val
- valuepublic MultivariatePolynomial<E> createConstantFromTerm(Monomial<E> monomial)
AMultivariatePolynomial
createConstantFromTerm
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
monomial
- the monomialpublic MultivariatePolynomial<E> createZero()
IPolynomial
public MultivariatePolynomial<E> createOne()
IPolynomial
public final MultivariatePolynomial<E> createLinear(int variable, E cc, E lc)
cc + lc * variable
variable
- the variablecc
- the constant coefficientlc
- the leading coefficientcc + lc * variable
public boolean isMonic()
IPolynomial
true
if this polynomial is monicthis
is monicpublic int signumOfLC()
IPolynomial
public boolean isOne()
IPolynomial
true
if this is onethis
is onepublic boolean isUnitCC()
IPolynomial
public boolean isConstant()
IPolynomial
true
if this polynomial has only constant termthis
is constantpublic E maxAbsCoefficient()
public E lc()
public E lc(Comparator<DegreeVector> ordering)
public MultivariatePolynomial<E> setLC(E val)
val
- new value for the lcpublic E cc()
public E content()
public Iterable<E> coefficients()
public E[] coefficientsArray()
public MultivariatePolynomial<E> primitivePart(int variable)
AMultivariatePolynomial
primitivePart
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
variable
- the variablepublic UnivariatePolynomial<E> contentUnivariate(int variable)
AMultivariatePolynomial
contentUnivariate
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
variable
- the variablepublic MultivariatePolynomial<E> primitivePart()
IPolynomial
public MultivariatePolynomial<E> primitivePartSameSign()
IPolynomial
public MultivariatePolynomial<E> divideByLC(MultivariatePolynomial<E> other)
IPolynomial
other
or returns null
(causing loss of
internal data) if some of the elements can't be exactly divided by the other.lc()
. NOTE: if null
is returned, the content of this
is destroyed.other
- the polynomialthis
divided by the other.lc()
or null
if exact division is not possiblepublic MultivariatePolynomial<E> divideOrNull(E factor)
factor
or returns null
(causing loss of internal data) if some of
the elements can't be exactly divided by the factor
. NOTE: if null
is returned, the content of
this
is destroyed.factor
- the factorthis
divided by the factor
or null
public MultivariatePolynomial<E> divideExact(E factor)
factor
or throws exception if exact division is not possiblefactor
- the factorthis
divided by the factor
ArithmeticException
- if exact division is not possiblepublic MultivariatePolynomial<E> divideOrNull(Monomial<E> monomial)
AMultivariatePolynomial
monomial
or returns null
(causing loss of internal data) if some of
the elements can't be exactly divided by the monomial
. NOTE: if null
is returned, the content of
this
is destroyed.divideOrNull
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
monomial
- monomial degreesthis
divided by the factor * monomial
or null
public MultivariatePolynomial<E> monic()
public MultivariatePolynomial<E> monic(Comparator<DegreeVector> ordering)
AMultivariatePolynomial
monic
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
public MultivariatePolynomial<E> monic(E factor)
this
to its monic part multiplied by the factor
modulo modulus
(that is monic(modulus).multiply(factor)
).factor
- the factorthis
public MultivariatePolynomial<E> monic(Comparator<DegreeVector> ordering, E factor)
this
to its monic part (with respect to given ordering) multiplied by the given factor;public MultivariatePolynomial<E> monicWithLC(MultivariatePolynomial<E> other)
IPolynomial
this
to its monic part multiplied by the leading coefficient of other
;other
- other polynomialother
or null if exact division by the
reduced leading coefficient is not possiblepublic MultivariatePolynomial<E> monicWithLC(Comparator<DegreeVector> ordering, MultivariatePolynomial<E> other)
AMultivariatePolynomial
this
to its monic part multiplied by the leading coefficient of other
with respect to given
orderingmonicWithLC
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
public UnivariatePolynomial toDenseRecursiveForm()
public static <E> MultivariatePolynomial<E> fromDenseRecursiveForm(UnivariatePolynomial recForm, int nVariables, Comparator<DegreeVector> ordering)
recForm
- recursive univariate representationnVariables
- number of variables in multivariate polynomialordering
- monomial orderpublic static <E> E evaluateDenseRecursiveForm(UnivariatePolynomial recForm, int nVariables, E[] values)
public AMultivariatePolynomial toSparseRecursiveForm()
public static <E> MultivariatePolynomial<E> fromSparseRecursiveForm(AMultivariatePolynomial recForm, int nVariables, Comparator<DegreeVector> ordering)
recForm
- recursive univariate representationnVariables
- number of variables in multivariate polynomialordering
- monomial orderpublic static <E> E evaluateSparseRecursiveForm(AMultivariatePolynomial recForm, int nVariables, E[] values)
public MultivariatePolynomial.HornerForm getHornerForm(int[] evaluationVariables)
evaluationVariables
- variables which will be substitutedpublic MultivariatePolynomial<E> evaluate(int variable, E value)
value
substituted for variable
.variable
- the variablevalue
- the valuevalue
substituted for variable
but still with the same
AMultivariatePolynomial.nVariables
(though the effective number of variables is nVariables - 1
, compare to
eliminate(int, Object)
)eliminate(int, Object)
public MultivariatePolynomial<E> evaluate(int[] variables, E[] values)
values
substituted for variables
.variables
- the variablesvalues
- the valuesvalue
substituted for variable
but still with the same
AMultivariatePolynomial.nVariables
(though the effective number of variables is nVariables - 1
, compare to
eliminate(int, Object)
)eliminate(int, Object)
public MultivariatePolynomial<E>[] evaluate(int variable, E... values)
public MultivariatePolynomial<E> evaluate(int variable, long value)
value
substituted for variable
.variable
- the variablevalue
- the valuevalue
substituted for variable
but still with the same
AMultivariatePolynomial.nVariables
(though the effective number of variables is nVariables - 1
, compare to
eliminate(int, long)
)eliminate(int, long)
public MultivariatePolynomial<E> eliminate(int variable, E value)
value
for variable
and eliminates variable
from the list of variables so that
the resulting polynomial has result.nVariables = this.nVariables - 1
.variable
- the variablevalue
- the valuevalue
substituted for variable
and nVariables
= nVariables - 1
)evaluate(int, Object)
public MultivariatePolynomial<E> eliminate(int variable, long value)
value
for variable
and eliminates variable
from the list of variables so that
the resulting polynomial has result.nVariables = this.nVariables - 1
.variable
- the variablevalue
- the valuevalue
substituted for variable
and nVariables
= nVariables - 1
)evaluate(int, long)
public MultivariatePolynomial<E> eliminate(int[] variables, E[] values)
values
substituted for variables
variables
- the variablesvalues
- the valuesvalue
substituted for variable
but still with the same
AMultivariatePolynomial.nVariables
(though the effective number of variables is nVariables - 1
, compare to
eliminate(int, long)
)public MultivariatePolynomial.PrecomputedPowersHolder<E> mkPrecomputedPowers(int variable, E value)
public MultivariatePolynomial.PrecomputedPowersHolder<E> mkPrecomputedPowers(int[] variables, E[] values)
public static <E> MultivariatePolynomial.PrecomputedPowersHolder<E> mkPrecomputedPowers(int nVariables, Ring<E> ring, int[] variables, E[] values)
public MultivariatePolynomial.PrecomputedPowersHolder<E> mkPrecomputedPowers(E[] values)
public MultivariatePolynomial<E> substitute(int variable, MultivariatePolynomial<E> poly)
poly
substituted for variable
.variable
- the variablepoly
- the replacement for the variablevariable -> poly
public MultivariatePolynomial<E> shift(int variable, long shift)
variable -> variable + shift
variable
- the variableshift
- shift amountvariable -> variable + shift
public MultivariatePolynomial<E> shift(int variable, E shift)
variable -> variable + shift
variable
- the variableshift
- shift amountvariable -> variable + shift
public MultivariatePolynomial<E> shift(int[] variables, E[] shifts)
variables -> variables + shifts
variables
- the variablesshifts
- the corresponding shiftsvariables -> variables + shifts
public MultivariatePolynomial<E> add(E oth)
oth
to this polynomialoth
- other polynomialthis + oth
public MultivariatePolynomial<E> subtract(E oth)
oth
from this polynomialoth
- other polynomialthis - oth
public MultivariatePolynomial<E> increment()
IPolynomial
this + 1
public MultivariatePolynomial<E> decrement()
IPolynomial
this - 1
public MultivariatePolynomial<E> multiply(E factor)
this
by the factor
factor
- the factorfactor
public MultivariatePolynomial<E> multiplyByLC(MultivariatePolynomial<E> other)
IPolynomial
other
other
- polynomialpublic MultivariatePolynomial<E> multiply(Monomial<E> monomial)
AMultivariatePolynomial
this
by the monomial
multiply
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
monomial
- the monomialmonomial
public MultivariatePolynomial<E> multiply(long factor)
IPolynomial
factor
factor
- the factorthis * factor
public MultivariatePolynomial<E> multiplyByBigInteger(BigInteger factor)
IPolynomial
factor
factor
- the factorthis * factor
public MultivariatePolynomial<E> multiply(MultivariatePolynomial<E> oth)
IPolynomial
oth
oth
- the polynomialthis * oth
public MultivariatePolynomial<E> square()
IPolynomial
this
this * this
public MultivariatePolynomial<E> evaluateAtRandom(int variable, org.apache.commons.math3.random.RandomGenerator rnd)
AMultivariatePolynomial
poly
at random pointevaluateAtRandom
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
public MultivariatePolynomial<E> evaluateAtRandomPreservingSkeleton(int variable, org.apache.commons.math3.random.RandomGenerator rnd)
AMultivariatePolynomial
poly
at random point chosen in such way that the skeleton of evaluated version is the same as
of the original poly
with respect to all except variable
variablesevaluateAtRandomPreservingSkeleton
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
public MultivariatePolynomial<E> derivative(int variable, int order)
AMultivariatePolynomial
order
with respect to specified variable (new instance created)derivative
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
variable
- the variableorder
- derivative orderorder
with respect to specified variablepublic MultivariatePolynomial<E> seriesCoefficient(int variable, int order)
AMultivariatePolynomial
derivative(poly,
variable, order) / order!
, where the derivative is formal derivative and calculated with arithmetic performed
in Z ring (to overcome possible zeros in Zp).seriesCoefficient
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
variable
- the variableorder
- derivative orderderivative(poly, variable, order) / order!
, where the derivative is formal derivative and
calculated with arithmetic performed in Z ring (to overcome possible zeros in Zp)public Stream<E> stream()
public <T> MultivariatePolynomial<T> mapTerms(Ring<T> newRing, Function<Monomial<E>,Monomial<T>> mapper)
T
- new element typenewRing
- the new ringmapper
- mappingpublic <T> MultivariatePolynomial<T> mapCoefficients(Ring<T> newRing, Function<E,T> mapper)
T
- new element typenewRing
- the new ringmapper
- mappingpublic MultivariatePolynomialZp64 mapCoefficients(IntegersZp64 newDomain, ToLongFunction<E> mapper)
newDomain
- the new ringmapper
- mappingpublic <T> MultivariatePolynomial<T> mapCoefficientsAsPolys(Ring<T> ring, Function<MultivariatePolynomial<E>,T> mapper)
mapCoefficientsAsPolys
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
public int compareTo(MultivariatePolynomial<E> oth)
public MultivariatePolynomial<E> clone()
IPolynomial
clone
in interface IPolynomial<MultivariatePolynomial<E>>
clone
in class AMultivariatePolynomial<Monomial<E>,MultivariatePolynomial<E>>
@Deprecated public MultivariatePolynomial<E> parsePoly(String string)
public String toString(IStringifier<MultivariatePolynomial<E>> stringifier)
Stringifiable
public String coefficientRingToString(IStringifier<MultivariatePolynomial<E>> stringifier)
IPolynomial
Copyright © 2018. All rights reserved.