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

◆ operator-() [2/2]

Matrix * Matrix::operator- ( const Matrix & m) const

Definition at line 428 of file matrix.cpp.

429{
430 auto R = get_ring();
431 if (R != m.get_ring())
432 {
433 ERROR("matrices have different base rings");
434 return nullptr;
435 }
436 if (rows()->rank() != m.rows()->rank() || cols()->rank() != m.cols()->rank())
437 {
438 ERROR("matrices have different shapes");
439 return nullptr;
440 }
441
442 const FreeModule *F = rows();
443 const FreeModule *G = cols();
444 const_monomial deg;
445
446 if (!rows()->is_equal(m.rows())) F = R->make_FreeModule(n_rows());
447
448 if (!cols()->is_equal(m.cols())) G = R->make_FreeModule(n_cols());
449
450 auto D = R->degree_monoid();
451 if (EQ == D->compare(degree_shift(), m.degree_shift()))
452 deg = degree_shift();
453 else
454 deg = D->make_one();
455
456 MatrixConstructor mat(F, G, deg);
457 for (int i = 0; i < n_cols(); i++)
458 mat.set_column(i, R->subtract_vec(elem(i), m[i]));
459 return mat.to_matrix();
460}
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
int n_rows() const
Definition matrix.hpp:146
const FreeModule * rows() const
Definition matrix.hpp:144
const FreeModule * cols() const
Definition matrix.hpp:145
bool is_equal(const Matrix &m) const
Definition matrix.cpp:312
const int * const_monomial
Definition imonorder.hpp:45
const int ERROR
Definition m2-mem.cpp:55
size_t rank(const DMatZZpFFPACK &A)
Definition dmat.cpp:80
tbb::flow::graph G
const int EQ
Definition style.hpp:40

References cols(), degree_shift(), elem(), EQ, ERROR, FreeModule, G, get_ring(), is_equal(), Matrix(), MatrixConstructor, n_cols(), n_rows(), operator-(), FreeModule::rank(), rows(), MatrixConstructor::set_column(), and MatrixConstructor::to_matrix().