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

◆ diff()

Matrix * Matrix::diff ( const Matrix * m,
int use_coef ) const

Definition at line 805 of file matrix.cpp.

806{
807 const PolynomialRing *P = get_ring()->cast_to_PolynomialRing();
808 if (P == nullptr)
809 {
810 ERROR("expected a polynomial ring");
811 return nullptr;
812 }
813 if (P != m->get_ring())
814 {
815 ERROR("matrix diff: different base rings");
816 return nullptr;
817 }
818 FreeModule *F1 = rows()->transpose();
819 const FreeModule *F = F1->tensor(m->rows());
820 FreeModule *G1 = cols()->transpose();
821 const FreeModule *G = G1->tensor(m->cols());
822
823 auto D = P->degree_monoid();
824 monomial deg = D->make_one();
825 D->divide(m->degree_shift(), degree_shift(), deg);
826 freemem(F1);
827 freemem(G1);
828
829 MatrixConstructor mat(F, G, deg);
830 D->remove(deg);
831 int i, j, next = 0;
832 for (i = 0; i < n_cols(); i++)
833 for (j = 0; j < m->n_cols(); j++)
834 mat.set_column(
835 next++,
836 P->vec_diff(elem(i), m->rows()->rank(), m->elem(j), use_coef));
837 return mat.to_matrix();
838}
FreeModule * transpose() const
Definition freemod.cpp:227
FreeModule * tensor(const FreeModule *G) const
Definition freemod.cpp:271
int rank() const
Definition freemod.hpp:105
friend class FreeModule
Definition matrix.hpp:73
const_monomial degree_shift() const
Definition matrix.hpp:149
const Ring * get_ring() const
Definition matrix.hpp:134
ring_elem elem(int i, int j) const
Definition matrix.cpp:307
friend class MatrixConstructor
Definition matrix.hpp:76
int n_cols() const
Definition matrix.hpp:147
const FreeModule * rows() const
Definition matrix.hpp:144
const FreeModule * cols() const
Definition matrix.hpp:145
monomial make_one() const
Definition monoid.cpp:455
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
vec vec_diff(vec v, int rankFw, vec w, int use_coeff) const
const Monoid * degree_monoid() const
Definition ring.cpp:13
#define monomial
Definition gb-toric.cpp:11
void freemem(void *s)
Definition m2-mem.cpp:103
const int ERROR
Definition m2-mem.cpp:55
tbb::flow::graph G

References cols(), Ring::degree_monoid(), degree_shift(), diff(), elem(), ERROR, freemem(), FreeModule, G, get_ring(), Matrix(), MatrixConstructor, monomial, n_cols(), FreeModule::rank(), rows(), MatrixConstructor::set_column(), FreeModule::tensor(), MatrixConstructor::to_matrix(), and Ring::vec_diff().

Referenced by diff(), IM2_Matrix_contract(), and IM2_Matrix_diff().