X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fmatrix.cpp;h=eddc62052c1a4c7d2c5dc235147d5fcb1f098bf7;hp=43288df46ab90ecd6c6ad6fc13c12dd7915839af;hb=955cb185a85535ab328ffedbfccdc508ce80fa91;hpb=afdd7fa8c6c0a587f7c80789198551383e8beb7b diff --git a/ginac/matrix.cpp b/ginac/matrix.cpp index 43288df4..eddc6205 100644 --- a/ginac/matrix.cpp +++ b/ginac/matrix.cpp @@ -25,6 +25,7 @@ #include "matrix.h" #include "debugmsg.h" +#include "utils.h" #ifndef NO_GINAC_NAMESPACE namespace GiNaC { @@ -42,7 +43,7 @@ matrix::matrix() : basic(TINFO_matrix), row(1), col(1) { debugmsg("matrix default constructor",LOGLEVEL_CONSTRUCT); - m.push_back(exZERO()); + m.push_back(_ex0()); } matrix::~matrix() @@ -95,16 +96,16 @@ matrix::matrix(int r, int c) : basic(TINFO_matrix), row(r), col(c) { debugmsg("matrix constructor from int,int",LOGLEVEL_CONSTRUCT); - m.resize(r*c, exZERO()); + m.resize(r*c, _ex0()); } // protected /** Ctor from representation, for internal use only. */ -matrix::matrix(int r, int c, vector const & m2) +matrix::matrix(int r, int c, exvector const & m2) : basic(TINFO_matrix), row(r), col(c), m(m2) { - debugmsg("matrix constructor from int,int,vector",LOGLEVEL_CONSTRUCT); + debugmsg("matrix constructor from int,int,exvector",LOGLEVEL_CONSTRUCT); } ////////// @@ -119,6 +120,42 @@ basic * matrix::duplicate() const return new matrix(*this); } +void matrix::print(ostream & os, unsigned upper_precedence) const +{ + debugmsg("matrix print",LOGLEVEL_PRINT); + os << "[[ "; + for (int r=0; r tmp(row*col); + exvector tmp(row*col); for (int i=0; i::const_iterator r=m.begin(); r!=m.end(); ++r) { + for (exvector::const_iterator r=m.begin(); r!=m.end(); ++r) { if ((*r).has(other)) return true; } return false; @@ -173,7 +210,7 @@ ex matrix::eval(int level) const } // eval() entry by entry - vector m2(row*col); + exvector m2(row*col); --level; for (int r=0; r m2(row*col); + exvector m2(row*col); --level; for (int r=0; r sum(this->m); - vector::iterator i; - vector::const_iterator ci; + exvector sum(this->m); + exvector::iterator i; + exvector::const_iterator ci; for (i=sum.begin(), ci=other.m.begin(); i!=sum.end(); ++i, ++ci) { @@ -275,9 +312,9 @@ matrix matrix::sub(matrix const & other) const throw (std::logic_error("matrix::sub(): incompatible matrices")); } - vector dif(this->m); - vector::iterator i; - vector::const_iterator ci; + exvector dif(this->m); + exvector::iterator i; + exvector::const_iterator ci; for (i=dif.begin(), ci=other.m.begin(); i!=dif.end(); ++i, ++ci) { @@ -295,7 +332,7 @@ matrix matrix::mul(matrix const & other) const throw (std::logic_error("matrix::mul(): incompatible matrices")); } - vector prod(row*other.col); + exvector prod(row*other.col); for (int i=0; i trans(col*row); + exvector trans(col*row); for (int r=0; r::const_iterator r=m.begin(); r!=m.end(); ++r) { + for (exvector::const_iterator r=m.begin(); r!=m.end(); ++r) { if (!(*r).info(info_flags::numeric)) { if (normalized) { return determinant_symbolic_minor(*this).normal(); @@ -573,7 +610,7 @@ matrix matrix::inverse(void) const matrix tmp(row,col); // set tmp to the unit matrix for (int i=0; i sol(v.row*v.col); + exvector sol(v.row*v.col); for (int c=0; c=0; --r) { sol[r*v.col+c] = tmp[r*tmp.col+c];