30#include <gsl/gsl_sf_pow_int.h>
44 polynomialSum_m(polynomialSum.polynomialSum_m) {
63 for (std::size_t i = 0; i < pSize; i++) {
65 for (std::size_t j = 0; j < N; j++) {
66 std::vector<std::size_t> tempdS =
71 tempdS[j] = tempdS[j] - 1;
72 if ((j + 1) == N) tempdS.push_back(0);
73 tempdS[j + 1] = tempdS[j + 1] + 1;
112 std::vector<TwoPolynomial> newPoly;
114 newPoly.insert(newPoly.end(),
117 newPoly.insert(newPoly.end(),
124 const std::size_t &p)
const {
126 std::vector<std::size_t> dummy;
160 const std::vector<double> &dSvalues,
161 std::vector<std::vector<double>> &finalPolynomial)
const {
162 finalPolynomial.resize(1);
163 finalPolynomial[0].resize(1, 0.0);
164 std::size_t nx = 0, ns = 0;
169 double dSfactoreval = 1.0;
170 for (std::size_t q = 0;
173 dSfactoreval *= gsl_sf_pow_int(dSvalues[q + 1],
178 for (std::size_t k = nx + 1;
181 finalPolynomial[nx].resize(ns + 1, 0.0);
187 for (std::size_t k = 0; k <= nx; k++) {
188 finalPolynomial[k].resize(ns + 1, 0.0);
191 for (std::size_t i = 0;
194 for (std::size_t j = 0;
198 .coefficients_m[i][j]
208 const std::vector<double> &dSvalues)
const {
209 std::vector<std::vector<double>> coefficients;
212 std::size_t i = coefficients.size();
215 std::size_t j = coefficients[0].size();
219 temp = temp * s + coefficients[i][j];
221 result = result * x + temp;
T::PETE_Expr_t::PETE_Return_t sum(const PETE_Expr< T > &expr)
bool isPolynomialZero(const std::size_t &p) const
Check if term p is a zero polynomial Returns true if p is negative or outside the range of list rang...
void printPolynomial() const
Print polynomial, for internal debugging.
void addPolynomial(const PolynomialSum &poly)
Add poly to the sum by concatenating the lists.
void putSumTogether(const std::vector< double > &dSvalues, std::vector< std::vector< double > > &finalPolynomial) const
Put together all terms in the PolynomialSum by evaluating the S(s)-derivatives and multiply them wit...
void truncate(const std::size_t &truncateOrder)
Truncate series in x at truncateOrder.
void sortTerms()
Sort polynomialSum_m such that the TwoPolynomial objects with fewest S(s)-derivatives come first,...
PolynomialSum & operator=(const PolynomialSum &sum)
Assigment operator.
void multiplyPolynomial(const TwoPolynomial &poly)
Multiply term with input polynomial.
PolynomialSum()
Default constructor, initialises empty sum.
std::vector< TwoPolynomial > polynomialSum_m
void differentiateX()
Differentiate each term wrt x.
~PolynomialSum()
Desctructor, does nothing.
std::vector< std::size_t > getdSfactors(const std::size_t &p) const
Returns lists of S(s)-derivatives in term p Returns empty list if p is negative or outside list rang...
void differentiateS()
Differentiate each term wrt s.
double evaluatePolynomial2(const double &x, const double &s, const std::vector< double > &dSvalues) const
Evaluate polynomial after putting the sum together into one polynomial.