Página principal | Lista de namespace | Lista de componentes | Lista de archivos | Miembros del Namespace  | Miembros de las clases | Archivos de los miembros

Referencia de la Clase Mx::Matrix< E >

Esta es una clase matriz muy chirrisquitica que puede cambiar dinámicamente de tamaño. Más...

#include <Matrix.h>

Lista de todos los miembros.

Tipos públicos

typedef E value_type
 Tipo del objeto almacenado, similar al nombre usado en STL.
typedef value_typereference
 Tipo del objeto almacenado, similar al nombre usado en STL.
typedef const value_typeconst_reference
 Tipo del objeto almacenado, similar al nombre usado en STL.
typedef unsigned size_type
 Tipo del tamaño de un objeto, similar al nombre usado en STL.

Métodos públicos

 Matrix (unsigned m=1, unsigned n=1)
 Constructor de vector.
 Matrix (const Matrix &o)
 Constructor de copia.
 Matrix (const value_type V)
 Constructor a partir de Matrix<E>::value_type(V).
 ~Matrix ()
 Destructor.
unsigned count () const
 Cantidad de valores almacenados en la matriz.
unsigned size () const
 Cantidad de valores almacenados en la matriz.
unsigned rows () const
 Cantidad de filas de la matriz.
unsigned cols () const
 Cantidad de columnas de la Matriz.
size_type capacity () const
 Cantidad máxima posible de valores diferentes que pueden ser almacenados en la matriz.
Matrixoperator= (const Matrix &o)
 Sinónimo de this->copy(o).
Matrixcopy (const Matrix &o)
 Copia desde "o".
Matrixmove (Matrix &o)
 Traslada el valor de "o" a "*this".
Matrixswap (Matrix &o)
 Intercambia los valores de "*this" y "o".
bool equals (const Matrix &o) const
 ¿¿¿ (*this==o) ???
bool same (const Matrix &o) const
 Retorna true si "o" comparte sus valores con "*this".
reference operator() (unsigned, unsigned)
 Retorna una referencia al elemento [i,j] de la matriz.
const_reference operator() (unsigned, unsigned) const
 Retorna una referencia al elemento [i,j] de la matriz ( const ).
reference at (unsigned m, unsigned n)
 Retorna operator()(m,n).
const_reference at (unsigned m, unsigned n) const
 Retorna operator()(m,n) "const".
void reSize (unsigned, unsigned)
 Le cambia las dimensiones a la matriz.
void reShape (unsigned, unsigned)
 Le ajusta las dimensiones a la matriz.
void transpose ()
 Transpone la matriz.

Métodos protegidos

void add (const Matrix &)
 Le suma a "*this" la matriz "O".
void substract (const Matrix &)
 Le resta a "*this" la matriz "O".
void multiply (const Matrix &, const Matrix &)
 Calcula la multiplicación A * B y la almacena en "*this".

Atributos privados

value_typem_val
 Vector de valores de la matriz.
unsigned m_rows
 Cantidad de filas de la matriz.
unsigned m_cols
 Cantidad de columnas de la matris.

Amigas

class test_Matrix
 Datos de prueba para la clase.
bool operator== (const Matrix &p, const Matrix &q)
 ¿¿¿ (p == q) ???
bool operator!= (const Matrix &p, const Matrix &q)
 ¿¿¿ (p != q) ???
Matrix operator+ (const Matrix &A, const Matrix &B)
 Retorna A+B.
Matrix operator- (const Matrix &A, const Matrix &B)
 Retorna A-B.
Matrix operator * (const Matrix &A, const Matrix &B)
 Retorna A*B.
template<class T>
bool check_ok (const Matrix< T > &M)
 Verifica la invariante de la clase.


Descripción detallada

template<class E>
class Mx::Matrix< E >

Esta es una clase matriz muy chirrisquitica que puede cambiar dinámicamente de tamaño.

Ver también:
http://www.oonumerics.org/oon/

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


Documentación de los 'Tipos Definidos' miembros de la clase

template<class E>
typedef E Mx::Matrix< E >::value_type
 

Tipo del objeto almacenado, similar al nombre usado en STL.

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

template<class E>
typedef value_type& Mx::Matrix< E >::reference
 

Tipo del objeto almacenado, similar al nombre usado en STL.

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

template<class E>
typedef const value_type& Mx::Matrix< E >::const_reference
 

Tipo del objeto almacenado, similar al nombre usado en STL.

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

template<class E>
typedef unsigned Mx::Matrix< E >::size_type
 

Tipo del tamaño de un objeto, similar al nombre usado en STL.

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


Documentación del constructor y destructor

template<class E>
Mx::Matrix< E >::Matrix unsigned  m = 1,
unsigned  n = 1
[inline]
 

Constructor de vector.

  • Obtiene suficiente memoria dinámica para almacenas los n * m valores de la matriz
  • Si "value_type" tiene un constructor de vector, lo usar para inicializar cada uno de los valores de la matriz; de lo contrario, los deja tal cual están en la memoria
  • Si "value_type" es uno de los tipos escalares básicos, como lo son int o float, los valores almacenados en la matriz quedan tal cual están y no son inicializados.

Precondición:
  • m * n > 0
  • (m > 0) && (n > 0)

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

template<class E>
Mx::Matrix< E >::Matrix const Matrix< E > &  o  ) 
 

Constructor de copia.

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

template<class E>
template< class E > inline Mx::Matrix< E >::Matrix const value_type  V  )  [inline]
 

Constructor a partir de Matrix<E>::value_type(V).

  • La matriz resultante es una matriz escalar, de dimensiones 1x1, y su valor es "V".

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

template<class E>
Mx::Matrix< E >::~Matrix  )  [inline]
 

Destructor.

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


Documentación de las funciones miembro

template<class E>
unsigned Mx::Matrix< E >::count  )  const [inline]
 

Cantidad de valores almacenados en la matriz.

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

template<class E>
unsigned Mx::Matrix< E >::size  )  const [inline]
 

Cantidad de valores almacenados en la matriz.

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

template<class E>
unsigned Mx::Matrix< E >::rows  )  const [inline]
 

Cantidad de filas de la matriz.

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

template<class E>
unsigned Mx::Matrix< E >::cols  )  const [inline]
 

Cantidad de columnas de la Matriz.

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

template<class E>
size_type Mx::Matrix< E >::capacity  )  const [inline]
 

Cantidad máxima posible de valores diferentes que pueden ser almacenados en la matriz.

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

template<class E>
Matrix& Mx::Matrix< E >::operator= const Matrix< E > &  o  )  [inline]
 

Sinónimo de this->copy(o).

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

template<class E>
Matrix< E > & Mx::Matrix< E >::copy const Matrix< E > &  o  ) 
 

Copia desde "o".

  • Copia todo el valor de "o" sobre "*this", de forma que el nuevo valor de "*this" sea un duplicado exacto del valor de "o"
  • El valor anterior de "*this" se pierde
  • El objeto "o" mantiene su valor anterior
  • Luego de la copia, cuando el valor de "o" cambia, el de "*this" no cambiará, y viceversa, pues la copia es una copia profunda; no es superficial
  • Si "*this" es "o" entonces su valor no cambia
  • Después de esta operación siempre ocurre que *this == o

Complejidad:
O( rows() * cols() )
Devuelve:
*this
Ver también:
http://www.di-mare.com/adolfo/binder/c04.htm#sc05

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

template<class E>
Matrix< E > & Mx::Matrix< E >::move Matrix< E > &  o  ) 
 

Traslada el valor de "o" a "*this".

  • El valor anterior de "*this" se pierde
  • El nuevo valor de "*this" es el que "o" tuvo
  • "o" queda en el estado en que lo dejaría Erase()
  • Si "*this" es "o" entonces su valor no cambia
  • En general, después de esta operación casi nunca ocurre que (*this == o)

Complejidad:
O( rows() * cols() )
Devuelve:
*this
Ver también:
http://www.di-mare.com/adolfo/binder/c04.htm#sc07

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

template<class E>
Matrix< E > & Mx::Matrix< E >::swap Matrix< E > &  o  )  [inline]
 

Intercambia los valores de "*this" y "o".

  • Debido a que algunos métodos retornan copias del valor de "*this" en lugar de una referencia, como ocurre con Matrix::Child(), a veces swap() no tiene el resultado esperado por el programador.
  • Por ejemplo, si se invoca T.Child(i). swap( T.Child(j) ) el resultado no es intercambiar los hijos, sino más bien intercambiar los valores de los sub-árboles temporales T.Child(i) y T.Child(j). La forma correcta de intercambiar hijos es usar Graft().

Complejidad:
O( 1 )
Devuelve:
*this
Ver también:
http://www.di-mare.com/adolfo/binder/c04.htm#sc08

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

template<class E>
bool Mx::Matrix< E >::equals const Matrix< E > &  o  )  const
 

¿¿¿ (*this==o) ???

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

template<class E>
bool Mx::Matrix< E >::same const Matrix< E > &  o  )  const [inline]
 

Retorna true si "o" comparte sus valores con "*this".

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

template<class E>
void Mx::Matrix< E >::add const Matrix< E > &  O  )  [protected]
 

Le suma a "*this" la matriz "O".

Precondición:
  • "*this" y "O" deben tener las mismas dimensiones
  • rows() == O.rows() && cols() == O.cols()
Complejidad:
O( rows() * cols() )
Comentarios:
  • Esta es la implementación de Matrix<E> operator+( Matrix<E>&, Matrix<E> )
  • El compilador tiene problemas en compilar un función amiga ("friend") definida con plantillas si esa función amiga no está definida (implementada) dentro de la declaración de la clase. Para solventar esta deficiencia existe este método que realiza el trabajo, aunque es poco cómodo de usar.

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

template<class E>
void Mx::Matrix< E >::substract const Matrix< E > &  O  )  [protected]
 

Le resta a "*this" la matriz "O".

Precondición:
  • "*this" y "O" deben tener las mismas dimensiones
  • rows() == O.rows() && cols() == O.cols()
Complejidad:
O( rows() * cols() )
Comentarios:
  • Esta es la implementación de Matrix<E> operator-( Matrix<E>&, Matrix<E> )
  • El compilador tiene problemas en compilar un función amiga ("friend") definida con plantillas si esa función amiga no está definida (implementada) dentro de la declaración de la clase. Para solventar esta deficiencia existe este método que realiza el trabajo, aunque es poco cómodo de usar.

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

template<class E>
void Mx::Matrix< E >::multiply const Matrix< E > &  A,
const Matrix< E > &  B
[protected]
 

Calcula la multiplicación A * B y la almacena en "*this".

  • Las dimensiones de "*this" se ajustan de manera que:

Precondición:
  • "A" y "B" deben tener dimensiones compatibles
  • A.cols() == B.rows()
  • La multiplicación se hace [Fila x Columna], lo que implica que la cantidad de valores en la filas de "A" debe ser igual a la cantidad de columnas de "B"
Complejidad:
O( A.cols() * B.cols() * A.cols() )
Comentarios:
  • Esta es la implementación de Matrix<E> operator*( Matrix<E>&, Matrix<E> )
  • El compilador tiene problemas en compilar un función amiga ("friend") definida con plantillas si esa función amiga no está definida (implementada) dentro de la declaración de la clase. Para solventar esta deficiencia existe este método que realiza el trabajo, aunque es poco cómodo de usar.

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

template<class E>
E & Mx::Matrix< E >::operator() unsigned  i,
unsigned  j
[inline]
 

Retorna una referencia al elemento [i,j] de la matriz.

  • M(i,j) significa lo que en arreglos se denota con M[i][j].
  • M(i,j) = val; // M(i,j) es un "lvalue" (modificable)

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

template<class E>
const E & Mx::Matrix< E >::operator() unsigned  i,
unsigned  j
const [inline]
 

Retorna una referencia al elemento [i,j] de la matriz ( const ).

  • M(i,j) significa lo que en arreglos se denota con M[i][j].
  • val = M(i,j); // M(i,j) es un "rvalue" (const)

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

template<class E>
reference Mx::Matrix< E >::at unsigned  m,
unsigned  n
[inline]
 

Retorna operator()(m,n).

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

template<class E>
const_reference Mx::Matrix< E >::at unsigned  m,
unsigned  n
const [inline]
 

Retorna operator()(m,n) "const".

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

template<class E>
void Mx::Matrix< E >::reSize unsigned  m,
unsigned  n
 

Le cambia las dimensiones a la matriz.

  • En algunos casos los valores almacenados en la matriz no quedan todos iguales a Matrix<E>::value_type(0).
  • Si (m * n == 0) deja la matriz vacía.

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

template<class E>
void Mx::Matrix< E >::reShape unsigned  m,
unsigned  n
[inline]
 

Le ajusta las dimensiones a la matriz.

  • Si ocurre que (m*n) == rows()*cols() hace lo mismo que haría reSize(m,n).
  • En caso contrario, no hace nada.

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

template<class E>
void Mx::Matrix< E >::transpose  )  [inline]
 

Transpone la matriz.

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


Documentación de las funciones relacionadas y clases amigas

template<class E>
friend class test_Matrix [friend]
 

Datos de prueba para la clase.

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

template<class E>
bool operator== const Matrix< E > &  p,
const Matrix< E > &  q
[friend]
 

¿¿¿ (p == q) ???

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

template<class E>
bool operator!= const Matrix< E > &  p,
const Matrix< E > &  q
[friend]
 

¿¿¿ (p != q) ???

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

template<class E>
Matrix operator+ const Matrix< E > &  A,
const Matrix< E > &  B
[friend]
 

Retorna A+B.

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

template<class E>
Matrix operator- const Matrix< E > &  A,
const Matrix< E > &  B
[friend]
 

Retorna A-B.

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

template<class E>
Matrix operator * const Matrix< E > &  A,
const Matrix< E > &  B
[friend]
 

Retorna A*B.

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

template<class E>
template<class T>
bool check_ok const Matrix< T > &  M  )  [friend]
 

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 0 (cero) al campo 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 == rows()
  • En todos los algoritmos, "n" o "m_cols" es la cantidad de columnas == cols()

Rep 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 |
+---+   +---+---+---+---+---+---+---+---+
Rep 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 |
+---+   +---+---+---+---+---+---+---+---+
Comentarios:
Libera al programador de implementar el método Ok()

- 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 144 del archivo Matrix.h.


Documentación de los datos miembro

template<class E>
value_type* Mx::Matrix< E >::m_val [private]
 

Vector de valores de la matriz.

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

template<class E>
unsigned Mx::Matrix< E >::m_rows [private]
 

Cantidad de filas de la matriz.

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

template<class E>
unsigned Mx::Matrix< E >::m_cols [private]
 

Cantidad de columnas de la matris.

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


La documentación para esta clase fué generada a partir del siguiente archivo:
Generado el Wed Nov 14 13:47:10 2007 para Uso de Mx::Matrix: por  doxygen 1.3.9.1