MPSolve  3.2.1
formal-polynomial.h
Go to the documentation of this file.
1 /*
2  * This file is part of MPSolve 3.2.1
3  *
4  * Copyright (C) 2001-2020, Dipartimento di Matematica "L. Tonelli", Pisa.
5  * License: http://www.gnu.org/licenses/gpl.html GPL version 3 or higher
6  *
7  * Authors:
8  * Leonardo Robol <robol@mail.dm.unipi.it>
9  */
10 
20 #ifndef MPS_FORMAL_POLYNOMIAL_H_
21 #define MPS_FORMAL_POLYNOMIAL_H_
22 
23 MPS_BEGIN_DECLS
24 
25 struct mps_formal_polynomial;
26 
27 typedef struct mps_formal_polynomial mps_formal_polynomial;
28 
29 mps_formal_polynomial * mps_formal_polynomial_new_with_monomial (mps_formal_monomial *);
30 
31 mps_formal_polynomial * mps_formal_polynomial_sum_eq (mps_formal_polynomial * p,
32  mps_formal_monomial * m);
33 
34 mps_formal_polynomial * mps_formal_polynomial_sub_eq (mps_formal_polynomial * p,
35  mps_formal_monomial * m);
36 
37 mps_formal_polynomial * mps_formal_polynomial_sum_eq_p (mps_formal_polynomial * p,
38  mps_formal_polynomial * m);
39 
40 mps_formal_polynomial * mps_formal_polynomial_sub_eq_p (mps_formal_polynomial * p,
41  mps_formal_polynomial * m);
42 
43 mps_monomial_poly * mps_formal_polynomial_create_monomial_poly (mps_formal_polynomial * p,
44  mps_context * ctx);
45 
46 mps_formal_polynomial * mps_formal_polynomial_mul (mps_formal_polynomial * p,
47  mps_formal_polynomial * q);
48 
49 mps_formal_polynomial * mps_formal_polynomial_mul_eq (mps_formal_polynomial * p,
50  mps_formal_polynomial * q);
51 
52 void mps_formal_polynomial_print (mps_formal_polynomial * p);
53 
54 void mps_formal_polynomial_free (mps_formal_polynomial * p);
55 
56 MPS_END_DECLS
57 
58 #ifdef __cplusplus
59 
60 #include <vector>
61 #include <stdexcept>
62 #include <iostream>
63 
64 namespace mps {
65  namespace formal {
66 
67  class Polynomial {
68  public:
69 
73  Polynomial();
74 
79 
83  Polynomial(const Polynomial& rhs);
84 
88  const Monomial operator[] (const int degree) const;
89 
93  Polynomial& operator+=(const Monomial& m);
94 
98  Polynomial operator+(const Monomial& m) const;
99 
103  Polynomial& operator+=(const Polynomial& p);
104 
108  Polynomial operator+(const Polynomial& p) const;
109 
113  Polynomial& operator-=(const Polynomial& p);
114 
118  Polynomial operator-(const Polynomial& p) const;
119 
123  Polynomial& operator-=(const Monomial& m);
124 
128  Polynomial operator-(const Monomial& m) const;
129 
133  Polynomial& operator*=(const Polynomial& other);
134 
138  Polynomial operator*(const Polynomial& other) const;
139 
140  ~Polynomial();
141 
146  long degree() const;
147 
152 
153  private:
154  std::vector<Monomial> mMonomials;
155  };
156 
157  Polynomial operator+(Monomial a, Monomial b);
158 
159  std::ostream& operator<<(std::ostream& os, const Polynomial& p);
160 
161  }
162 }
163 
164 #endif /* ifdef __cplusplus */
165 
166 #endif /* MPS_FORMAL_POLYNOMIAL_H_ */
167 
mps::formal::Polynomial::operator-
Polynomial operator-(const Polynomial &p) const
Subtract two Polynomials.
Definition: formal-polynomial.cpp:206
mps_monomial_poly
Data regarding a polynomial represented in the monomial base.
Definition: monomial-poly.h:44
mps::formal::Monomial
Definition: formal-monomial.h:60
mps::formal::Polynomial::operator+=
Polynomial & operator+=(const Monomial &m)
Add a new Monomial in an existing Polynomial.
Definition: formal-polynomial.cpp:141
mps_context
this struct holds the state of the mps computation
Definition: context.h:55
mps::formal::Polynomial::Polynomial
Polynomial()
Create a default empty Polynomial.
Definition: formal-polynomial.cpp:92
mps::formal::Polynomial
Definition: formal-polynomial.h:67
mps::formal::Polynomial::operator-=
Polynomial & operator-=(const Polynomial &p)
Subtract a new Polynomial from an existing Polynomial.
Definition: formal-polynomial.cpp:198
mps::formal::Polynomial::createMonomialPoly
mps_monomial_poly * createMonomialPoly(mps_context *ctx) const
Create a representation of this polynomial as a mps_monomial_poly.
Definition: formal-polynomial.cpp:302
mps::formal::Polynomial::operator+
Polynomial operator+(const Monomial &m) const
Sum two Monomials.
Definition: formal-polynomial.cpp:174
mps::formal::Polynomial::degree
long degree() const
Returns the degree of this polynomial. Empty polynomials have -1 degree.
Definition: formal-polynomial.cpp:250
mps::formal::Polynomial::operator[]
const Monomial operator[](const int degree) const
Access a Monomial inside the Polynomial.
Definition: formal-polynomial.cpp:114
mps::formal::Polynomial::operator*=
Polynomial & operator*=(const Polynomial &other)
Multiply two polynomials together.
Definition: formal-polynomial.cpp:214
mps::formal::Polynomial::operator*
Polynomial operator*(const Polynomial &other) const
Multiply two polynomials together.
Definition: formal-polynomial.cpp:228