Uso de Mx::Matrix:
 Todo Clases Namespaces Archivos Funciones Variables 'typedefs' Amigas 'defines'
test_Matrix.cpp
Ir a la documentación de este archivo.
1 // test_Matrix.cpp (C) 2004 adolfo@di-mare.com
2 
3 /** \file test_Matrix.cpp
4  \brief Este programita sirve para ver cómo funciona la matriz...
5 
6  \author Adolfo Di Mare <adolfo@di-mare.com>
7  \date 2004
8 
9  - Why English names??? ==> http://www.di-mare.com/adolfo/binder/c01.htm#sc04
10 */
11 
12 #include <iostream> // cout
13 #include <iomanip> // setw(4)
14 
15 #include <iostream>
16 
17  #undef USE_Matrix
18  #undef USE_Sparse_Matrix
19  #undef USE_Matrix_List
20  #undef USE_Matrix_Map
21 
22 /* *** ESCOJA AQUI CUAL IMPLEMENTACION DE LA MATRIZ QUIERE USAR *** */
23 
24 // #define USE_Matrix ///< Use la implmentación \c Matrix.h
25  #define USE_Sparse_Matrix ///< Use la implmentación \c Sparse_Matrix.h
26 // #define USE_Matrix_List ///< Use la implmentación \c Matrix_List.h
27 // #define USE_Matrix_Map ///< Use la implmentación \c Matrix_Map.h
28 
29 #if defined(USE_Matrix)
30  #include "Matrix.h"
31 #elif defined(USE_Sparse_Matrix)
32  #include "Sparse_Matrix.h"
33  #define Matrix Sparse_Matrix
34 #elif defined(USE_Matrix_List)
35  #include "Matrix_List.h"
36  #define Matrix Matrix_List
37 #elif defined(USE_Matrix_Map)
38  #include "Matrix_Map.h"
39  #define Matrix Matrix_Map
40 #endif
41 
42 using namespace Mx;
43 using namespace std;
44 
45 /// Imprime por filas el valor de \c "M"
46 template <class E>
47 void print( const char* name, Matrix<E> & V ) {
48  cout << endl << name << '[' << V.rows() << ',' << V.cols() << ']' << endl;
49  for (unsigned i=0; i < V.rows(); ++i) {
50  for (unsigned j=0; j < V.cols(); ++j) {
51  cout << " " << setw(6) << V(i,j);
52  }
53  cout << endl;
54  }
55 }
56 
57 #include "uUnit.h"
58 #include "str2list.h"
59 
60 /// Programa que ejercita las principales funciones de las matrices
61 int main() {
62 {{ // test::constructor()
63  int M[4][5]; // [0][1][2][3][4]
64  intmatrix<4,5>( M , " | 1 2 3 4 5 | " // [0]
65  " | 6 7 8 9 10 | " // [1]
66  " | 11 12 13 14 15 | " // [2]
67  " | 16 17 18 19 20 | " );// [3]
68 
69  assertTrue( M[0][0] == 1 ); assertTrue( M[2][1] == 12 );
70 
71  Matrix<int> Mchirri(4,5); // la chirrisquitica
72  int k=1;
73  for ( size_t i=0; i<4; ++i ) {
74  for ( size_t j=0; j<5; ++j ) {
75  Mchirri(i,j) = M[i][j];
76  assertTrue( Mchirri(i,j)==k ); k++;
77  }
78  }
79 }}
80 {{ // test::rows_cols()
81  int M[4][5]; // [0][1][2][3][4]
82  intmatrix<4,5>( M , " | 1 2 3 4 5 | " // [0]
83  " | 6 7 8 9 10 | " // [1]
84  " | 11 12 13 14 15 | " // [2]
85  " | 16 17 18 19 20 | " );// [3]
86 
87  Matrix<int> Mchirri(4,5); // la chirrisquitica
88  int k=1;
89  for ( size_t i=0; i<4; ++i ) {
90  for ( size_t j=0; j<5; ++j ) {
91  Mchirri(i,j) = M[i][j];
92  assertTrue( Mchirri(i,j)==k ); k++;
93  }
94  }
95  assertTrue( Mchirri.rows() == 4 );
96  assertTrue( Mchirri.cols() == 5 );
97 }}
98 {{ // test::isUpperTriangular()
99  int M[4][4]; // [0][1][2][3][4]
100  intmatrix<4,4>( M , " | 1 2 3 4 | " // [0]
101  " | 0 5 6 7 | " // [1]
102  " | 0 0 8 9 | " // [2]
103  " | 0 0 0 10 | " );// [3]
104 
105  Matrix<int> Mchirri(4,4); // la chirrisquitica
106  int k=1;
107  for ( size_t i=0; i<4; ++i ) {
108  for ( size_t j=0; j<4; ++j ) {
109  Mchirri(i,j) = M[i][j];
110  }
111  }
112  assertTrue( isUpperTriangular(Mchirri) );
113  Mchirri(3,0) = 12;
114  assertTrue( !isUpperTriangular(Mchirri) );
115 }}
116 {{ // test::isLowerTriangular()
117  int M[4][4]; // [0][1][2][3][4]
118  intmatrix<4,4>( M , " | 1 0 0 0 | " // [0]
119  " | 2 3 0 0 | " // [1]
120  " | 4 5 6 0 | " // [2]
121  " | 7 8 9 10 | " );// [3]
122 
123  Matrix<int> Mchirri(4,4); // la chirrisquitica
124  int k=1;
125  for ( size_t i=0; i<4; ++i ) {
126  for ( size_t j=0; j<4; ++j ) {
127  Mchirri(i,j) = M[i][j];
128  }
129  }
130  assertTrue( isLowerTriangular(Mchirri) );
131  Mchirri(0,3) = 12;
132  assertTrue( !isLowerTriangular(Mchirri) );
133 }}
134 
135  std::cout << "==============\n";
136 
137  const unsigned M = 5;
138  const unsigned N = 8;
139  unsigned i,j,k;
140  char * above = new char [10];
141  typedef Matrix<unsigned> Matrix_unsigned;
142  Matrix<unsigned> V(M,N);
143  char * below = new char [10];
144 
145  k = 0;
146  for (i=0; i < V.rows(); ++i) {
147  for (j=0; j < V.cols(); ++j) {
148  V(i,j) = k++; // V.operator() (i,j) = k++;
149  }
150  }
151 
152  Matrix<unsigned> A = V;
153  assertTrue( A == V );
154  assertTrue( A.same(A) );
155  print("A", A);
156 
157  V.reSize(N,M);
158  print("V", V);
159 
160  // k = 0;
161  assertTrue( k == A.rows()*A.cols() );
162  for (i=0; i < V.rows(); ++i) {
163  for (j=0; j < V.cols(); ++j) {
164  V(i,j) = k++;
165  }
166  }
167 
169  B = V;
170  assertTrue( B == V );
171  print("B", B);
172 
173  Matrix_unsigned C = V;
174  C = C + C;
175  print("C", C);
176 
177  C = A - A;
178  print("C", C);
179  assertTrue( isNull( C ) && ! isScalar( C ) );
180  assertTrue( ! isLowerTriangular( C ) && ! isUpperTriangular( C ) );
181  assertTrue( ! isSquare( C ) && ! isUnit( C ) );
182  assertTrue( ! isSymmetric( C ) );
183 
184  print("A", A);
185 // B.transpose();
186  print("B", B);
187  C = B * A;
188  print("C", C);
189  assertTrue( ! isNull( C ) && isSquare( C ) );
190  assertTrue( ! isLowerTriangular( C ) && ! isUpperTriangular( C ) );
191  assertTrue( ! isUnit( C ) && ! isScalar( C ) );
192  assertTrue( ! isSymmetric( C ) );
193 
194  print("A", A);
195  print("B", B);
196  C = A * B;
197  print("C", C);
198  assertTrue( ! isNull( C ) && isSquare( C ) );
199  assertTrue( ! isLowerTriangular( C ) && ! isUpperTriangular( C ) );
200  assertTrue( ! isUnit( C ) && ! isScalar( C ) );
201  assertTrue( ! isSymmetric( C ) );
202 
203  return 0;
204 }
205 
206 // EOF: test_Matrix.cpp
bool isUpperTriangular(const MAT &M)
Retorna &quot;true&quot; si la matriz M[][] es triangular superior.
Definition: Matrix_Lib.h:165
Declaraciones y definiciones para la clase Matrix_Map.
Funciones para crear listas y matrices a partir de hileras.
Declaraciones y definiciones para la clase Sparse_Matrix.
#define assertTrue(cond)
(cond ? () : cout &lt;&lt; &quot;cond&quot; )
Definition: uUnit.h:79
Declaraciones y definiciones para la clase Matrix_List.
int main()
Programa que ejercita las principales funciones de las matrices.
Definition: test_Matrix.cpp:61
bool same(const Matrix &o) const
Retorna true si &quot;o&quot; comparte sus valores con &quot;*this&quot;.
Definition: Matrix.h:98
unsigned rows() const
Cantidad de filas de la matriz.
Definition: Matrix.h:80
Declaraciones y definiciones para la clase Matrix.
bool isNull(const MAT &M)
Retorna &quot;true&quot; si la matriz M[][] es nula.
Definition: Matrix_Lib.h:123
bool isLowerTriangular(const MAT &M)
Retorna &quot;true&quot; si la matriz M[][] es triangular inferior.
Definition: Matrix_Lib.h:189
void print(const char *name, Matrix< E > &V)
Imprime por filas el valor de &quot;M&quot;.
Definition: test_Matrix.cpp:47
bool isSquare(const MAT &M)
Retorna &quot;true&quot; si la matriz M[][] es una matriz cuadrada.
Definition: Matrix_Lib.h:34
bool isUnit(const MAT &M)
Retorna &quot;true&quot; si la matriz M[][] es unitaria.
Definition: Matrix_Lib.h:91
bool isSymmetric(const MAT &M)
Retorna &quot;true&quot; si la matriz M[][] es simétrica.
Definition: Matrix_Lib.h:143
bool isScalar(const MAT &M)
Retorna &quot;true&quot; si la matriz M[][] es escalar.
Definition: Matrix_Lib.h:70
Esta es una clase matriz muy chirrisquitica que puede cambiar dinámicamente de tamaño.
Definition: Matrix.h:63
unsigned cols() const
Cantidad de columnas de la Matriz.
Definition: Matrix.h:81
[u]Micro module for [Unit] program testing.
void reSize(unsigned, unsigned)
Le cambia las dimensiones a la matriz.
Definition: Matrix.h:406