1 #ifndef _SMZPALTARRAY_H_ 2 #define _SMZPALTARRAY_H_ 4 #include "../Ring/Integer.hpp" 5 #include "../polynomial.h" 6 #include "uzpolynomial.h" 7 #include "../RingPolynomial/upolynomial.h" 8 #include "../RationalNumberPolynomial/mrpolynomial.h" 9 #include "SMZP_CppSupport.hpp" 10 #include "SMZP_Support.h" 11 #include "SMZP_Support_Test.h" 12 #include "SMZP_Support_Recursive.h" 14 #include "../ExpressionTree/ExpressionTree.hpp" 15 #include "../DataStructures/Factors.hpp" 17 #if defined(WITH_BLAD) && WITH_BLAD 18 #include "../BLADInterface/bladinterface.h" 21 #if defined(WITH_MAPLE) && WITH_MAPLE 22 #include "../MapleInterface/MapleInterfaceStream.hpp" 57 if (type == 0 || type == 1 || type == 4) {
65 if (type == 0 || type == 1) {
78 mutable AltArrZ_t* poly;
85 friend class MapleInterface;
107 void reorderVarsInPlace(
int varmap[]);
112 void expandVarsInPlace(
int vars,
Symbol* newvars,
int varmap[]);
129 std::vector<SLPZRepresentation> slp;
212 static mpz_class characteristic;
213 static RingProperties properties;
244 bool isNegativeOne()
const;
255 int isConstant()
const;
267 if (mpz_cmp_si(this->poly->elems->coef, 0l) < 0) {
401 void print(std::ostream& os)
const;
411 void fromString(
const std::string& str);
506 return leadingVariable();
514 int mainDegree()
const;
546 int numberOfVariables()
const;
552 return ringVariables().size();
573 Integer leadingCoefficient()
const;
578 void setLeadingCoefficient(
const Integer& it);
583 Integer trailingCoefficient()
const;
588 Integer coefficient(
int,
const int*)
const;
590 inline Integer coefficient(
const std::vector<int>& v)
const {
591 return coefficient(v.size(), v.data());
597 void setCoefficient(
int,
const int*,
const Integer&);
599 inline void setCoefficient(
const std::vector<int>& v,
const Integer& r) {
600 setCoefficient(v.size(), v.data(), r);
631 void setRingVariables (
const std::vector<Symbol>&);
637 std::vector<Symbol> ringVariables()
const;
642 std::vector<Symbol> variables()
const;
662 *
this = this->derivative(s, k);
671 this->differentiate(s,1);
688 return this->derivative(s,1);
698 *
this = this->integral(s, k);
707 this->integrate(s,1);
742 return this->integral(s,1);
760 std::vector<Symbol> vecSyms;
761 std::vector<Integer> vecRats;
764 for (
int i = 0; i < n; ++i) {
765 vecSyms.push_back(syms[i]);
766 vecRats.push_back(xs[i]);
768 return evaluate(vecSyms, vecRats);
844 return (*
this + mpz_class(r));
853 return (*
this + r.get_mpz());
867 return (*
this += mpz_class(r));
887 *
this += r.get_mpz();
895 return (*
this - mpz_class(r));
907 return (*
this - r.get_mpz());
921 return (*
this -= mpz_class(r));
941 *
this -= r.get_mpz();
949 return (*
this * mpz_class(r));
961 return (*
this * r.get_mpz());
975 return (*
this *= mpz_class(r));
994 *
this *= r.get_mpz();
1002 return (*
this / mpz_class(r));
1014 return (*
this / r.get_mpz());
1026 return (*
this /= mpz_class(r));
1034 mpz_set(t, r.get_mpz_t());
1048 *
this /= r.get_mpz();
1063 Symbol leadingVariable()
const;
1068 Integer leadingVariableDegree()
const;
1073 bool isConstantTermZero()
const;
1114 void straightLineProgram();
1119 void printSLP(std::ostream& out = std::cout)
const;
1129 void randomPolynomial(
int numvar,
int nterms,
unsigned long int coefBound, degree_t sparsity,
bool includeNeg);
1143 void randomPolynomial(std::vector<int> maxDegs,
unsigned long int coefBound,
float sparsity,
bool includeNeg);
1157 #endif //_SMQPLINKEDLIST_H_ A multivariate polynomial with Integer coefficients using a sparse representation.
Definition: mzpolynomial.hpp:75
A univariate polynomial over an arbitrary BPASRing represented sparsely.
Definition: BigPrimeField.hpp:21
A multivariate polynomial with RationalNumber coefficients represented sparely.
Definition: mrpolynomial.h:70
int numberOfRingVariables() const
Get the number of variables in this polynomial ring.
Definition: mzpolynomial.hpp:551
Definition: mzpolynomial.hpp:33
SparseMultivariateIntegerPolynomial evaluate(int n, const Symbol *syms, const Integer *xs) const
Evaluate f(x)
Definition: mzpolynomial.hpp:759
An ExpressionTree encompasses various forms of data that can be expressed generically as a binary tre...
Definition: ExpressionTree.hpp:17
Data Structure for interval [a, b].
Definition: interval.h:9
SparseMultivariateIntegerPolynomial unitCanonical(SparseMultivariateIntegerPolynomial *u, SparseMultivariateIntegerPolynomial *v) const
Obtain the unit normal (a.k.a canonical associate) of an element.
Definition: mzpolynomial.hpp:262
A univariate polynomial with Integer coefficients using a dense representation.
Definition: uzpolynomial.h:13
Symbol mainVariable() const
Get the main variable.
Definition: mzpolynomial.hpp:505
SparseMultivariateIntegerPolynomial integral(const Symbol &s) const
Compute integral.
Definition: mzpolynomial.hpp:741
void differentiate(const Symbol &s, int k)
Convert current object to its k-th derivative.
Definition: mzpolynomial.hpp:661
A simple data structure for encapsulating a collection of Factor elements.
Definition: Factors.hpp:95
An arbitrary-precision Integer.
Definition: Integer.hpp:22
An encapsulation of a mathematical symbol.
Definition: Symbol.hpp:23
An arbitrary-precision rational number.
Definition: RationalNumber.hpp:24
An element of the SLP of an integer polynomial.
Definition: mzpolynomial.hpp:30
void one()
Sets this polynomial to one.
void integrate(const Symbol &s)
Convert current object to its derivative.
Definition: mzpolynomial.hpp:706
SparseMultivariateIntegerPolynomial derivative(const Symbol &s) const
Compute derivative.
Definition: mzpolynomial.hpp:687
void integrate(const Symbol &s, int k)
Convert current object to its k-th integral.
Definition: mzpolynomial.hpp:697
void differentiate(const Symbol &s)
Convert current object to its derivative.
Definition: mzpolynomial.hpp:670
An abstract class defining the interface of a multivariate polynomial that can be viewed recursively...
Definition: polynomial.h:166