Poly integral(Poly const & p) { Poly result; result.reserve(p.size()+1); result.push_back(0); // arbitrary const for(unsigned i = 0; i < p.size(); i++) { result.push_back(p[i]/(i+1)); } return result; }
Poly derivative(Poly const & p) { Poly result; if(p.size() <= 1) return Poly(0); result.reserve(p.size()-1); for(unsigned i = 1; i < p.size(); i++) { result.push_back(i*p[i]); } return result; }
void SparseMatrix::rowToPolynomial( const RowIndex row, const std::vector<PolyRing::Monoid::ConstMonoPtr>& colMonomials, Poly& poly ) { poly.setToZero(); poly.reserve(entryCountInRow(row)); const auto end = rowEnd(row); for (auto it = rowBegin(row); it != end; ++it) { MATHICGB_ASSERT(it.index() < colMonomials.size()); if (it.scalar() != 0) poly.append(it.scalar(), *colMonomials[it.index()]); } MATHICGB_ASSERT(poly.termsAreInDescendingOrder()); }