28 #ifndef TWO_POLYNOMIAL_H
29 #define TWO_POLYNOMIAL_H
68 struct vectorLengths {
87 explicit TwoPolynomial(
const std::vector<std::vector<int>> &coefficients);
89 TwoPolynomial(
const TwoPolynomial &poly);
91 TwoPolynomial& operator= (
const TwoPolynomial &poly);
95 void differentiateX();
97 void differentiateS();
101 void multiplyConstant (
const int &constant);
105 void multiplydSfactors(
const TwoPolynomial &poly);
112 void convert2Dto1Darray(
double *vec1,
double *vec2,
113 const vectorLengths &nn,
114 const TwoPolynomial &poly)
const;
124 void convolution(
double *vec1,
double *vec2,
125 const std::size_t &nx,
const std::size_t &ny)
const;
130 void convert1Dto2Darray(
double *vec1,
const vectorLengths &nn);
134 void multiplyPolynomial(
const TwoPolynomial &poly);
136 void printPolynomial()
const;
141 int getCoefficient(
const std::size_t &Xorder,
142 const std::size_t &Sorder)
const;
148 void setCoefficient(
const int &coefficient,
149 const std::size_t &Xorder,
150 const std::size_t &Sorder);
152 std::size_t getMaxXorder()
const;
154 std::size_t getMaxSorder()
const;
158 void setMaxXorder(
const std::size_t &maxXorder);
162 void setMaxSorder(
const std::size_t &maxSorder);
164 std::size_t getNdSfactors()
const;
166 std::vector<std::size_t> getdSfactors()
const;
170 void setdSfactors(
const std::vector<std::size_t> &dSfactors);
179 double evaluatePolynomial(
const double &x,
const double &s)
const;
183 void truncate(
const std::size_t &truncateOrder);
189 void addPolynomial(
const TwoPolynomial &poly);
196 friend bool operator < (
const TwoPolynomial &left,
197 const TwoPolynomial &right);
203 friend bool operator == (
const TwoPolynomial &left,
204 const TwoPolynomial &right);
206 friend class PolynomialSum;
208 std::size_t maxXorder_m;
209 std::size_t maxSorder_m;
210 std::vector<std::vector<int>> coefficients_m;
211 std::vector<std::size_t> dSfactors_m;
215 std::size_t TwoPolynomial::getMaxXorder()
const {
219 std::size_t TwoPolynomial::getMaxSorder()
const {
223 std::size_t TwoPolynomial::getNdSfactors()
const {
224 return dSfactors_m.size();
227 std::vector<std::size_t> TwoPolynomial::getdSfactors()
const {
231 void TwoPolynomial::setdSfactors(
232 const std::vector<std::size_t> &dSfactors) {
233 dSfactors_m = dSfactors;
236 bool TwoPolynomial::isZero()
const {
237 return (maxXorder_m == 0 && maxSorder_m == 0 &&
238 coefficients_m[0][0] == 0);
241 void TwoPolynomial::truncate(
const std::size_t &truncateOrder) {
242 if (truncateOrder < maxXorder_m) {
243 coefficients_m.resize(truncateOrder + 1);
244 maxXorder_m = truncateOrder;
bool operator<(const TwoPolynomial &left, const TwoPolynomial &right)
bool operator==(const TwoPolynomial &left, const TwoPolynomial &right)