Macaulay2 Engine
Loading...
Searching...
No Matches

◆ convolve()

void convolve ( const PolyRing * R,
const VECTOR(ring_elem) & input_relems,
VECTOR(ring_elem) & output_relems,
int convolve_type )

Definition at line 726 of file ringelement.cpp.

730{
731 const Ring *K = R->getCoefficientRing();
732 ring_elem invn;
733 size_t n =
734 input_relems.size() - 1; // array is 0..n, with the 0 part being ignored.
735 // first set [1, e1] := [1, h1].
736 output_relems[0] = input_relems[0];
737 for (int i = 1; i <= n; i++)
738 {
739 // ASSUMPTION: input_relems[i] is either a variable or - of a variable
740 ring_elem result = R->copy(input_relems[i]);
741 if (convolve_type == 2) R->mult_coeff_to(K->from_long(-i), result);
742 for (int j = i - 1; j >= 1; --j)
743 {
744 ring_elem hr;
745 Nterm *g = input_relems[j];
746 if (g != nullptr)
747 {
748 hr.poly_val =
749 R->mult_by_term(output_relems[i - j], g->coeff, g->monom);
750 R->internal_add_to(result, hr);
751 }
752 }
753 if (convolve_type == 1)
754 {
755 invn = K->invert(K->from_long(i));
756 R->mult_coeff_to(invn, result);
757 }
758 output_relems[i] = result;
759 }
760}
void internal_add_to(ring_elem &f, ring_elem &g) const
Definition poly.cpp:675
virtual void mult_coeff_to(ring_elem a, ring_elem &f) const
Definition poly.cpp:799
virtual ring_elem mult_by_term(const ring_elem f, const ring_elem c, const_monomial m) const
Definition poly.cpp:781
virtual ring_elem copy(const ring_elem f) const
Definition poly.cpp:653
const Ring * getCoefficientRing() const
Definition polyring.hpp:200
virtual ring_elem invert(const ring_elem f) const =0
virtual ring_elem from_long(long n) const =0
xxx xxx xxx
Definition ring.hpp:102
VALGRIND_MAKE_MEM_DEFINED & result(result)
ring_elem coeff
Definition ringelem.hpp:158
int monom[1]
Definition ringelem.hpp:160
Singly linked-list node carrying one term of a polynomial-ring element.
Definition ringelem.hpp:156
Nterm * poly_val
Definition ringelem.hpp:86

References Nterm::coeff, PolyRing::copy(), Ring::from_long(), PolynomialRing::getCoefficientRing(), PolyRing::internal_add_to(), Ring::invert(), Nterm::monom, PolyRing::mult_by_term(), PolyRing::mult_coeff_to(), ring_elem::poly_val, and result().

Referenced by rawConvolve().