37 inline void PutDim(
size_t nRows,
size_t nCols)
42 inline void inic(
size_t n_rows,
size_t n_columns)
43 { PutDim(n_rows,n_columns); }
44 inline virtual bool check_range(
const size_t &iRow,
const size_t &col)
const 45 {
return ((iRow<=n_rows) && (col<=n_columns)); }
46 inline void check_put_box(
size_t f,
size_t c,
const ProtoMatrix &box)
const 48 if(((f+box.getNumberOfRows())>(n_rows+1)) || ((c+box.getNumberOfColumns())>(n_columns+1)))
49 std::cerr << __FUNCTION__
50 <<
"; indices out of range." << std::endl;
52 inline void check_get_box(
size_t f1,
size_t c1,
size_t f2,
size_t c2)
const 54 if ( (f2 < f1) || (c2 < c1) )
55 std::cerr <<
"Erroneous indexes in " 56 << __FUNCTION__ <<
" function." << std::endl;
58 inline void check_sto_sum(
const ProtoMatrix &m)
const 60 if (!CompDim(*
this,m))
61 std::cerr <<
"Matrices de dimensiones distintas en operador += " << std::endl
62 <<
" this: " <<
" (" << n_rows <<
'x' << n_columns <<
')' << std::endl
63 <<
" m= " <<
" (" << m.n_rows <<
'x' << m.n_columns <<
')' << std::endl;
65 inline void check_sto_dif(
const ProtoMatrix &m)
const 67 if (!CompDim(*
this,m))
68 std::cerr <<
"Matrices de dimensiones distintas en operador -=" << std::endl
69 <<
" this: " <<
" (" << n_rows <<
'x' << n_columns <<
')' << std::endl
70 <<
" m= " <<
" (" << m.n_rows <<
'x' << m.n_columns <<
')' << std::endl;
72 inline void check_traza(
void)
const 75 std::cerr <<
"Not a square matrix." << std::endl;
80 std::cerr <<
"First matrix of scalar product is not a row matrix." 83 std::cerr <<
"Second matrix of scalar product is not a column matrix." 85 if (v1.n_columns != v2.n_rows)
86 std::cerr <<
"Matrices de dimensiones incompatibles en producto escalar." 87 <<
" m1= " << v1 <<
" (" << v1.n_rows <<
'x' << v1.n_columns <<
')' << std::endl
88 <<
" m2= " << v2 <<
" (" << v2.n_rows <<
'x' << v2.n_columns <<
')' 96 std::cerr <<
"Matrices de dimensiones distintas en operador +" 106 std::cerr <<
"Matrices de dimensiones distintas en operador -" 114 if (m1.n_columns != m2.n_rows)
116 std::cerr <<
"Matrices de dimensiones incompatibles en producto." << std::endl;
117 std::cerr <<
" m1= " << m1 << std::endl;
118 std::cerr <<
" m2= " << m2 << std::endl;
125 { inic(n_rows,n_columns); }
127 { inic(other.n_rows,other.n_columns); }
130 inic(m.n_rows,m.n_columns);
133 virtual bool operator==(
const ProtoMatrix &other)
const 140 retval= (this->n_rows==other.n_rows) && (this->n_columns==other.n_columns);
145 inline virtual void resize(
size_t n_rows,
size_t n_columns)
146 { inic(n_rows,n_columns); }
147 inline virtual size_t Tam(
void)
148 {
return (n_rows*n_columns); }
149 inline size_t getNumberOfRows(
void)
const 151 inline size_t getNumberOfColumns(
void)
const 152 {
return n_columns; }
153 inline bool CheckIndices(
const size_t &f,
const size_t &c)
const 154 {
return check_range(f,c);; }
157 inline bool interior(
const size_t &i,
const size_t &j)
const 158 {
return ( (i>1) && (j>1) && (i<n_rows) && (j<n_columns) ); }
159 inline int Cuadrada(
void)
const 160 {
return (n_rows == n_columns); }
161 inline bool isRow(
void)
const 162 {
return (n_rows == 1); }
163 inline bool isColumn(
void)
const 164 {
return (n_columns == 1); }
165 virtual void Print(std::ostream &os)
const=0;
167 {
return (m1.n_rows == m2.n_rows); }
169 {
return (m1.n_columns == m2.n_columns); }
171 {
return (compareRowNumber(m1,m2) && compareColumnNumber(m1,m2)); }
172 friend inline std::ostream &operator<<(std::ostream &os,
const ProtoMatrix &m)
Definition: ProtoMatrix.h:32
bool interior(const size_t &i, const size_t &j) const
Return true if the indices correspond to a component.
Definition: ProtoMatrix.h:157