Uso de Mx::Matrix:
 Todo Clases Namespaces Archivos Funciones Variables 'typedefs' Amigas 'defines'
Clases | Funciones
Referencia del Namespace Mx

Matriz chirrisquitica de adolf.nosp@m.o@di.nosp@m.-mare.nosp@m..com. Más...

Clases

class  Matrix
 Esta es una clase matriz muy chirrisquitica que puede cambiar dinámicamente de tamaño. Más...
 
class  Sparse_Matrix
 Esta es una clase matriz muy chirrisquitica almacenada como una matriz rala. Más...
 
class  Matrix_List_ColVal
 Clase privada para implementar la lista de valores de cada fila. Más...
 
class  Matrix_List
 Esta es una clase matriz muy chirrisquitica almacenada como una matriz rala implementada con listas. Más...
 
class  Matrix_Map
 Esta es una clase matriz muy chirrisquitica almacenada como una matriz rala implementada con Map. Más...
 
class  Matrix_Sparse
 Esta es una clase matriz muy chirrisquitica almacenada como una matriz rala. Más...
 

Funciones

template<class T >
bool check_ok (const Matrix< T > &M)
 Verifica la invariante de la clase. Más...
 
template<class E >
std::ostream & operator<< (std::ostream &COUT, const Matrix< E > &M)
 Graba en el flujo COUT el valor de M[][]. Más...
 
template<class E >
std::istream & operator>> (std::istream &CIN, Matrix< E > &M)
 Obtiene del flujo CIN el valor para M[][]. Más...
 
template<class MAT >
bool isSquare (const MAT &M)
 Retorna "true" si la matriz M[][] es una matriz cuadrada. Más...
 
template<class MAT >
bool isDiagonal (const MAT &M)
 Retorna "true" si la matriz M[][] es una matriz diagonal. Más...
 
template<class MAT >
bool isScalar (const MAT &M)
 Retorna "true" si la matriz M[][] es escalar. Más...
 
template<class MAT >
bool isUnit (const MAT &M)
 Retorna "true" si la matriz M[][] es unitaria. Más...
 
template<class MAT >
void setUnit (MAT &M, unsigned n)
 Convierte a M[][] en una matriz identidad de tamaño n x n. Más...
 
template<class MAT >
bool isNull (const MAT &M)
 Retorna "true" si la matriz M[][] es nula. Más...
 
template<class MAT >
bool isSymmetric (const MAT &M)
 Retorna "true" si la matriz M[][] es simétrica. Más...
 
template<class MAT >
bool isUpperTriangular (const MAT &M)
 Retorna "true" si la matriz M[][] es triangular superior. Más...
 
template<class MAT >
bool isLowerTriangular (const MAT &M)
 Retorna "true" si la matriz M[][] es triangular inferior. Más...
 
template<class T >
bool check_ok (const Sparse_Matrix< T > &M)
 Verifica la invariante de la clase. Más...
 
template<class E >
std::ostream & operator<< (std::ostream &COUT, const Sparse_Matrix< E > &M)
 Graba en el flujo COUT el valor de M[][]. Más...
 
template<class E >
std::istream & operator>> (std::istream &CIN, Sparse_Matrix< E > &M)
 Obtiene del flujo CIN el valor para M[][]. Más...
 
template<class T >
bool check_ok (const Matrix_List< T > &M)
 Verifica la invariante de la clase. Más...
 
template<class E >
std::ostream & operator<< (std::ostream &COUT, const Matrix_List< E > &M)
 Graba en el flujo COUT el valor de M[][]. Más...
 
template<class E >
std::istream & operator>> (std::istream &CIN, Matrix_List< E > &M)
 Obtiene del flujo CIN el valor para M[][]. Más...
 
template<class T >
bool check_ok (const Matrix_Map< T > &M)
 Verifica la invariante de la clase. Más...
 
template<class E >
std::ostream & operator<< (std::ostream &COUT, const Matrix_Map< E > &M)
 Graba en el flujo COUT el valor de M[][]. Más...
 
template<class E >
std::istream & operator>> (std::istream &CIN, Matrix_Map< E > &M)
 Obtiene del flujo CIN el valor para M[][]. Más...
 
template<class T >
bool check_ok (const Matrix_Sparse< T > &M)
 Verifica la invariante de la clase. Más...
 
template<class E >
std::ostream & operator<< (std::ostream &COUT, const Matrix_Sparse< E > &M)
 Graba en el flujo COUT el valor de M[][]. Más...
 
template<class E >
std::istream & operator>> (std::istream &CIN, Matrix_Sparse< E > &M)
 Obtiene del flujo CIN el valor para M[][]. Más...
 

Descripción detallada

Matriz chirrisquitica de adolf.nosp@m.o@di.nosp@m.-mare.nosp@m..com.

Documentación de las funciones

template<class T >
bool Mx::check_ok ( const Matrix< T > &  M)

Verifica la invariante de la clase.

- Es posible que la matriz tenga dimensiones nulas, lo que implica que todos los
  punteros a los vectors paralelos deben ser nulos. Este hecho se marca dándolo
  el valor \c 0 (cero) al campo \c m_val.
- Las matrices quedan almacenadas en un vector de tamaño [M x N].
- En todos los algoritmos, "m" o "m_rows" es la cantidad de filas == \c rows()
- En todos los algoritmos, "n" o "m_cols" es la cantidad de columnas == \c cols()

\par <em>Rep</em> Modelo de la clase
+---+ / \
| 2 | M(i,j) ==> m_val[ (i * m_cols) + j ] | 0 1 2 3 | m_rows == 2
+---+ (almacenamiento por filas) | 4 5 6 7 | m_cols == 4
| 4 | \ /
+---+ +---+---+---+---+---+---+---+---+
| *-|-->| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+---+ +---+---+---+---+---+---+---+---+
\par <em>Rep</em> Modelo de la clase
+---+
| 4 | M(i,j) ==> m_val[ i + (j * m_rows) ] / a e \
+---+ (almacenamiento por columnas) | b f | m_rows == 4
| 2 | | c g | m_cols == 2
+---+ +---+---+---+---+---+---+---+---+ \ d h /
| *-|-->| a | b | c | d | e | f | g | h |
+---+ +---+---+---+---+---+---+---+---+
  • Invariante: (M.m_rows == 0) <==> (M.m_cols == 0)
  • Invariante: (M.m_rows == 0) <==> (M.m_val == 0)
  • Invariante: check_ok( m_val[k] )

Definición en la línea 170 del archivo Matrix.h.

template<class E >
std::ostream& Mx::operator<< ( std::ostream &  COUT,
const Matrix< E > &  M 
)

Graba en el flujo COUT el valor de M[][].

Definición en la línea 602 del archivo Matrix.h.

template<class E >
std::istream& Mx::operator>> ( std::istream &  CIN,
Matrix< E > &  M 
)

Obtiene del flujo CIN el valor para M[][].

Definición en la línea 615 del archivo Matrix.h.

template<class MAT >
bool Mx::isSquare ( const MAT &  M)

Retorna "true" si la matriz M[][] es una matriz cuadrada.

Definición en la línea 34 del archivo Matrix_Lib.h.

template<class MAT >
bool Mx::isDiagonal ( const MAT &  M)

Retorna "true" si la matriz M[][] es una matriz diagonal.

Definición en la línea 45 del archivo Matrix_Lib.h.

template<class MAT >
bool Mx::isScalar ( const MAT &  M)

Retorna "true" si la matriz M[][] es escalar.

Definición en la línea 70 del archivo Matrix_Lib.h.

template<class MAT >
bool Mx::isUnit ( const MAT &  M)
inline

Retorna "true" si la matriz M[][] es unitaria.

Definición en la línea 91 del archivo Matrix_Lib.h.

template<class MAT >
void Mx::setUnit ( MAT &  M,
unsigned  n 
)

Convierte a M[][] en una matriz identidad de tamaño n x n.

Definición en la línea 104 del archivo Matrix_Lib.h.

template<class MAT >
bool Mx::isNull ( const MAT &  M)

Retorna "true" si la matriz M[][] es nula.

Definición en la línea 123 del archivo Matrix_Lib.h.

template<class MAT >
bool Mx::isSymmetric ( const MAT &  M)

Retorna "true" si la matriz M[][] es simétrica.

Definición en la línea 143 del archivo Matrix_Lib.h.

template<class MAT >
bool Mx::isUpperTriangular ( const MAT &  M)

Retorna "true" si la matriz M[][] es triangular superior.

Definición en la línea 165 del archivo Matrix_Lib.h.

template<class MAT >
bool Mx::isLowerTriangular ( const MAT &  M)

Retorna "true" si la matriz M[][] es triangular inferior.

Definición en la línea 189 del archivo Matrix_Lib.h.

template<class T >
bool Mx::check_ok ( const Sparse_Matrix< T > &  M)

Verifica la invariante de la clase.

- El campo \c m_same indica cuál es el valor que se repite más en toda la matriz.
- Usualmente \c same es el neutro aditivo \c value_type().
- No existe un constructor explícito para darle a \c m_same su valor inicial, que
  es siempre inicializado en \c value_type(). Para cambiarlo es necesario invocar
  el método \c setgetDefault().
- Los vectores \c m_I[], \c m_J[] y \c m_val[] son vectores paralelos, todos de
  longitud \c Sparse_Matrix::m_capacity.
- La cantidad máxima de valores diferente que pueden ser almacenados en la matriz
  es \c Sparse_Matrix::m_capacity.
- El largo de estos vectores aumenta cuando se hace referencia a un valor M(i,j)
  mediante la versión que no es \c const del \c operator()(i,j). O sea, que es
  ese método el encargado de agregar valores en \c m_val[], pues el operador
  homónimo \c const operator()(i,j) nunca agrega nada y, como es \c const, en
  general retorna una referencia constante a \c m_same.
- Es posible que la matriz tenga dimensiones nulas, lo que implica que todos los
  punteros a los vectors paralelos deben ser nulos. Este hecho se marca dándolo
  el valor \c 0 (cero) al campo \c m_capacity.
- En todos los algoritmos, "m" o "m_rows" es la cantidad de filas == \c rows()
- En todos los algoritmos, "n" o "m_cols" es la cantidad de columnas == \c cols()

\par <em>Rep</em> Modelo de la clase
____________________________________
/ m_capacity \
+---+---+---+---+---+---+-..-+---+---+ 0 1 2 3 4 5 6
m_I--->| 1 | 3 | 3 |'-'| ... ... |'-'| 0 / - - - - - - - \
+---+---+---+---+ ... ... +---+ 1 | - a - - - - - |
m_J--->| 1 | 2 | 1 |'-'| ... ... |'-'| 2 | - - - - - - - |
+---+---+---+---+ ... ... +---+ 3 | - c b - - - - |
m_val-->|'a'|'b'|'c'|'-'| ... ... |'-'| 4 \ - - - - - - - /
+---+---+---+---+---+---+-..-+---+---+
0 1 2 |
m_size--------+ == 3 m_same == '-' m_rows == 5 m_cols == 7
  • Invariante: (m_capacity == 0) <==> (m_I == 0)
  • Invariante: (m_capacity == 0) <==> (m_J == 0)
  • Invariante: (m_capacity == 0) <==> (m_val == 0)
  • Invariante: (m_rows == 0) ==> (m_capacity == 0)
  • Invariante: (m_cols == 0) ==> (m_capacity == 0)
  • Invariante: (m_capacity != 0) <==> (m_I != 0)
  • Invariante: (m_capacity != 0) <==> (m_J != 0)
  • Invariante: (m_capacity != 0) <==> (m_val != 0)
  • Invariante: (m_rows == 0) <==> (m_cols == 0)
  • Invariante: ( m_size <= m_capacity )
  • Invariante: check_ok (m_same)
  • Invariante: ( (0<=m_I[k]) && (m_I[k] < m_rows) ) k = [0..m_size-1]
  • Invariante: ( (0<=m_J[k]) && (m_J[k] < m_cols) ) k = [0..m_size-1]
  • Invariante: check_ok( m_val[k] )

Definición en la línea 149 del archivo Sparse_Matrix.h.

template<class E >
std::ostream& Mx::operator<< ( std::ostream &  COUT,
const Sparse_Matrix< E > &  M 
)

Graba en el flujo COUT el valor de M[][].

Definición en la línea 797 del archivo Sparse_Matrix.h.

template<class E >
std::istream& Mx::operator>> ( std::istream &  CIN,
Sparse_Matrix< E > &  M 
)

Obtiene del flujo CIN el valor para M[][].

Definición en la línea 810 del archivo Sparse_Matrix.h.

template<class T >
bool Mx::check_ok ( const Matrix_List< T > &  M)

Verifica la invariante de la clase.

- El campo \c m_same indica cuál es el valor que se repite más en toda la matriz.
- Usualmente \c m_same es el neutro aditivo \c value_type().
- No existe un constructor explícito para darle a \c m_same su valor inicial, que
  es siempre inicializado en \c value_type(). Para cambiarlo es necesario invocar
  el método \c setgetDefault().
- El vector \c m_VL[] contiene las listas de valores almacenados en la matriz.
  Cualquiera de estas listas puede estar vacía; aún todas pueden ser listas vacías.
- La cantidad de columnas de la matriz es el valor fijo es \c m_cols.
- El largo de las listas de valores cambia cuando se hace referencia a un valor M(i,j)
  mediante la versión que no es \c const del \c operator()(i,j). O sea, que es
  ese método el encargado de agregar valores en \c m_VL[], pues el operador
  homónimo \c const operator()(i,j) nunca agrega nada y, como es \c const, en
  general retorna una referencia constante a \c m_same.
- Es posible que la matriz tenga dimensiones nulas, lo que implica que el vector
  \c m_VL[] está vacío.
- No hace falta alacenar la cantidad de valores de la matriz porque se siempre es
  \c m_VL.size().
  el valor \c 0 (cero) al campo \c m_capacity.

\par <em>Rep</em> Modelo de la clase
m_VL<list<>> _______
+---+ / \
0 | *-|---| 1 , 'a' |
+---+ \_______/ 0 1 2 3 4 5 6
1 | ? | M(0,1)=='a' 0 / - a - - - - - \
+---+ 1 | - - - - - - - |
2 | ? | _______ _______ 2 | - - - - - - - |
+---+ / \ / \ 3 | - c - - - b - |
3 | *-|---| 5 , 'b' |---| 1 , 'c' | 4 \ - - - - - - - /
+---+ \_______/ \_______/
4 | ? | M(3,5)=='b' M(3,1)=='c'
+---+
m_same == '-' rows() == m_VL.size() m_cols == 7
  • Invariante: ningún objeto puede estar almacenado en la posición nula.
  • Invariante: (m_cols == 0) <==> (m_VL.empty())
  • Invariante: check_ok( M.m_same )
  • Invariante: check_ok( M(i,j) )

Definición en la línea 162 del archivo Matrix_List.h.

template<class E >
std::ostream& Mx::operator<< ( std::ostream &  COUT,
const Matrix_List< E > &  M 
)

Graba en el flujo COUT el valor de M[][].

Definición en la línea 613 del archivo Matrix_List.h.

template<class E >
std::istream& Mx::operator>> ( std::istream &  CIN,
Matrix_List< E > &  M 
)

Obtiene del flujo CIN el valor para M[][].

Definición en la línea 626 del archivo Matrix_List.h.

template<class T >
bool Mx::check_ok ( const Matrix_Map< T > &  M)

Verifica la invariante de la clase.

- El campo \c m_same indica cuál es el valor que se repite más en toda la matriz.
- Usualmente \c m_same es el neutro aditivo \c value_type().
- No existe un constructor explícito para darle a \c m_same su valor inicial, que
  es siempre inicializado en \c value_type(). Para cambiarlo es necesario invocar
  el método \c setgetDefault().
- El vector \c m_dicc contiene las listas de valores almacenados en la matriz.
  Cualquiera de estas listas puede estar vacía; aún todas pueden ser listas vacías.
- La cantidad de columnas de la matriz es el valor fijo es \c m_cols.
- El largo de las listas de valores cambia cuando se hace referencia a un valor M(i,j)
  mediante la versión que no es \c const del \c operator()(i,j). O sea, que es
  ese método el encargado de agregar valores en \c m_dicc, pues el operador
  homónimo \c const operator()(i,j) nunca agrega nada y, como es \c const, en
  general retorna una referencia constante a \c m_same.
- Es posible que la matriz tenga dimensiones nulas, lo que implica que el vector
  \c m_dicc está vacío.
- No hace falta alacenar la cantidad de valores de la matriz porque se siempre es
  \c m_VL.size().
  el valor \c 0 (cero) al campo \c m_capacity.

\par <em>Rep</em> Modelo de la clase
std::map<std::pair<unsigned,unsigned>, E , std::less<std::pair<unsigned,unsigned> > >
m_dicc IT
/\
/ \
/ \
First second
_____________________
/ \
| std::pair <0,1>, 'a' |
\_____________________/ 0 1 2 3 4 5 6
M(0,1)=='a' 0 / - a - - - - - \
1 | - - - - - - - |
_____________________ 2 | - - - - - - - |
/ \ 3 | - - - - - b - |
| std::pair <3,5>, 'b' | 4 \ - - - - - - - /
\_____________________/
M(3,5)=='b'
m_same == '-' m_rows == 5 m_cols == 7
- http://www.di-mare.com/adolfo/binder/c03.htm#k1-Rep
\remark
Libera al programador de implementar el método \c Ok()
- http://www.di-mare.com/adolfo/binder/c04.htm#sc11
  • Invariante: ningún objeto puede estar almacenado en la posición nula.
  • Invariante: (m_cols == 0) <==> (m_dicc.empty())
  • Invariante: check_ok( M.m_same )
  • Invariante: check_ok( M(i,j) )

Definición en la línea 164 del archivo Matrix_Map.h.

template<class E >
std::ostream& Mx::operator<< ( std::ostream &  COUT,
const Matrix_Map< E > &  M 
)

Graba en el flujo COUT el valor de M[][].

Definición en la línea 593 del archivo Matrix_Map.h.

template<class E >
std::istream& Mx::operator>> ( std::istream &  CIN,
Matrix_Map< E > &  M 
)

Obtiene del flujo CIN el valor para M[][].

Definición en la línea 606 del archivo Matrix_Map.h.

template<class T >
bool Mx::check_ok ( const Matrix_Sparse< T > &  M)

Verifica la invariante de la clase.

- El campo \c m_same indica cuál es el valor que se repite más en toda la matriz.
- Usualmente \c same es el neutro aditivo \c value_type().
- No existe un constructor explícito para darle a \c m_same su valor inicial, que
  es siempre inicializado en \c value_type(). Para cambiarlo es necesario invocar
  el método \c setgetDefault().
- Los vectores \c m_I[], \c m_J[] y \c m_val[] son vectores paralelos, todos de
  longitud \c Matrix_Sparse::m_capacity.
- La cantidad máxima de valores diferente que pueden ser almacenados en la matriz
  es \c Matrix_Sparse::m_capacity.
- El largo de estos vectores aumenta cuando se hace referencia a un valor M(i,j)
  mediante la versión que no es \c const del \c operator()(i,j). O sea, que es
  ese método el encargado de agregar valores en \c m_val[], pues el operador
  homónimo \c const operator()(i,j) nunca agrega nada y, como es \c const, en
  general retorna una referencia constante a \c m_same.
- Es posible que la matriz tenga dimensiones nulas, lo que implica que todos los
  punteros a los vectors paralelos deben ser nulos. Este hecho se marca dándolo
  el valor \c 0 (cero) al campo \c m_capacity.
- En todos los algoritmos, "m" o "m_rows" es la cantidad de filas == \c rows()
- En todos los algoritmos, "n" o "m_cols" es la cantidad de columnas == \c cols()

\par <em>Rep</em> Modelo de la clase
____________________________________
/ m_capacity \
+---+---+---+---+---+---+-..-+---+---+ 0 1 2 3 4 5 6
m_I--->| 1 | 3 | 3 |'-'| ... ... |'-'| 0 / - - - - - - - \
+---+---+---+---+ ... ... +---+ 1 | - a - - - - - |
m_J--->| 1 | 2 | 1 |'-'| ... ... |'-'| 2 | - - - - - - - |
+---+---+---+---+ ... ... +---+ 3 | - c b - - - - |
m_val-->|'a'|'b'|'c'|'-'| ... ... |'-'| 4 \ - - - - - - - /
+---+---+---+---+---+---+-..-+---+---+
0 1 2 |
m_size--------+ == 3 m_same == '-' m_rows == 5 m_cols == 7
  • Invariante: (m_capacity == 0) <==> (m_I == 0)
  • Invariante: (m_capacity == 0) <==> (m_J == 0)
  • Invariante: (m_capacity == 0) <==> (m_val == 0)
  • Invariante: (m_rows == 0) ==> (m_capacity == 0)
  • Invariante: (m_cols == 0) ==> (m_capacity == 0)
  • Invariante: (m_capacity != 0) <==> (m_I != 0)
  • Invariante: (m_capacity != 0) <==> (m_J != 0)
  • Invariante: (m_capacity != 0) <==> (m_val != 0)
  • Invariante: (m_rows == 0) <==> (m_cols == 0)
  • Invariante: ( m_size <= m_capacity )
  • Invariante: check_ok (m_same)
  • Invariante: ( (0<=m_I[k]) && (m_I[k] < m_rows) ) k = [0..m_size-1]
  • Invariante: ( (0<=m_J[k]) && (m_J[k] < m_cols) ) k = [0..m_size-1]
  • Invariante: check_ok( m_val[k] )

Definición en la línea 149 del archivo Matrix_Sparse.h.

template<class E >
std::ostream& Mx::operator<< ( std::ostream &  COUT,
const Matrix_Sparse< E > &  M 
)

Graba en el flujo COUT el valor de M[][].

Definición en la línea 797 del archivo Matrix_Sparse.h.

template<class E >
std::istream& Mx::operator>> ( std::istream &  CIN,
Matrix_Sparse< E > &  M 
)

Obtiene del flujo CIN el valor para M[][].

Definición en la línea 810 del archivo Matrix_Sparse.h.