37 xDerivatives_m(0), sDerivatives_m(0){
38 std::vector<int> dummy1;
40 std::vector<std::vector<int>> dummy2;
41 dummy2.push_back(dummy1);
47 const std::size_t &xDerivatives,
48 const std::size_t &sDerivatives):
49 xDerivatives_m(xDerivatives), sDerivatives_m(sDerivatives) {
58 polynomials_m(doperator.polynomials_m),
59 xDerivatives_m(doperator.xDerivatives_m),
60 sDerivatives_m(doperator.sDerivatives_m) {
79 for (std::size_t i = oldxDerivatives + 1; i <=
xDerivatives_m; i++) {
125 const std::size_t &x,
126 const std::size_t &s) {
139 std::size_t zeros = 0;
141 for (std::size_t k = 0;
147 std::cout <<
"(d/dx)^" << i <<
"(d/ds)^" << j <<
")";
170 const std::size_t &s,
171 const std::size_t &term)
const {
179 const std::size_t &truncateOrder) {
190 const std::size_t &xDerivative,
191 const std::size_t &sDerivative,
192 const std::vector<double> &dSvalues)
const {
197 .evaluatePolynomial2(x, s, dSvalues);
201 const std::size_t &xDerivatives,
202 const std::size_t &sDerivatives)
const {
206 return polynomials_m[xDerivatives][sDerivatives].numberOfTerms();
210 const std::size_t &xDerivatives,
211 const std::size_t &sDerivatives,
212 const std::size_t &p)
const{
214 std::vector<std::size_t> dummy;
217 return polynomials_m[xDerivatives][sDerivatives].getdSfactors(p);
Inform & endl(Inform &inf)
void differentiateS()
Differentiate wrt s using product rule.
void printOperator() const
Print operator, for internal debugging.
void setPolynomial(const TwoPolynomial &poly, const std::size_t &x, const std::size_t &s)
Assign the polynomial poly to the operator.
std::size_t sDerivatives_m
DifferentialOperatorTwo & operator=(const DifferentialOperatorTwo &doperator)
Assigment operator.
bool isPolynomialZero(const std::size_t &x, const std::size_t &s, const std::size_t &term) const
Check if polynomial with x x-derivaties and s s-derivatives is a zero polynomial If x or s are out o...
DifferentialOperatorTwo()
Default constructor, initialises identity operator.
void differentiateX()
Differentiate wrt x using product rule.
void sortTerms()
Sort the terms in each sum, with fewest S(s)-derivatives first, then in increasing powers.
void multiplyPolynomial(const TwoPolynomial &poly)
Multiplies each term with given polynomial.
double evaluatePolynomial(const double &x, const double &s, const std::size_t &xDerivative, const std::size_t &sDerivative, const std::vector< double > &dSvalues) const
Evaluate polynomial specified.
void resizeX(const std::size_t &xDerivatives)
Set highest derivative in x to xDerivatives111.
void truncate(const std::size_t &truncateOrder)
Truncate all polynomials to truncateOrder.
std::size_t numberOfTerms(const std::size_t &xDerivatives, const std::size_t &sDerivatives) const
Returns number of terms in the sum with xDerivatives x-derivatives and sDerivatives s-derivatives If...
std::vector< std::vector< PolynomialSum > > polynomials_m
std::vector< std::size_t > getdSFactors(const std::size_t &xDerivatives, const std::size_t &sDerivatives, const std::size_t &p) const
Returns list of S(s)-derivatives from term p in polynomial with xDerivatives x-derivatives and sDeriv...
~DifferentialOperatorTwo()
Destructor.
std::size_t xDerivatives_m
void addOperator(const DifferentialOperatorTwo &doperator)
Add the doperator to operator, term by term.
void resizeS(const std::size_t &sDerivatives)
Set highest derivative in s to xDerivatives.