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

◆ mult()

Matrix * Matrix::mult ( const Matrix * m,
bool opposite_mult ) const

Definition at line 659 of file matrix.cpp.

660{
661 const Ring *R = get_ring();
662 if (R != m->get_ring())
663 {
664 ERROR("matrix mult: different base rings");
665 return nullptr;
666 }
667 if (n_cols() != m->n_rows())
668 {
669 ERROR("matrix mult: matrix sizes don't match");
670 return nullptr;
671 }
672
673 auto D = R->degree_monoid();
674 monomial deg = D->make_new(degree_shift());
675 D->mult(deg, m->degree_shift(), deg);
676
677 MatrixConstructor mat(rows(), m->cols(), deg);
678
679 D->remove(deg);
680
681 for (int i = 0; i < m->n_cols(); i++)
682 mat.set_column(i, R->mult_vec_matrix(this, m->elem(i), opposite_mult));
683 return mat.to_matrix();
684}
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
int n_rows() const
Definition matrix.hpp:146
const FreeModule * rows() const
Definition matrix.hpp:144
const FreeModule * cols() const
Definition matrix.hpp:145
monomial make_new(const_monomial d) const
Definition monoid.cpp:448
vec mult_vec_matrix(const Matrix *m, vec v, bool opposite_mult) const
const Monoid * degree_monoid() const
Definition ring.cpp:13
#define monomial
Definition gb-toric.cpp:11
const int ERROR
Definition m2-mem.cpp:55

References cols(), Ring::degree_monoid(), degree_shift(), elem(), ERROR, get_ring(), Matrix(), MatrixConstructor, monomial, mult(), Ring::mult_vec_matrix(), n_cols(), n_rows(), rows(), MatrixConstructor::set_column(), and MatrixConstructor::to_matrix().

Referenced by mult().