Resolucion de sistemas lineales
 All Classes Files Functions Variables Typedefs Macros Pages
MatrizDensa.hpp
Go to the documentation of this file.
1 // Clase para el trabajar con matrices densas de punto flotante //
3 // //
4 // Análisis y Diseño y Programación: //
5 // //
6 // Nombre: Antonio Carrillo Ledesma //
7 // E-mail: acl@www.mmc.igeofcu.unam.mx //
8 // Página: http://www.mmc.igeofcu.unam.mx/acl //
9 // //
10 // //
11 // Este programa es software libre. Puede redistribuirlo y/o modificarlo //
12 // bajo los términos de la Licencia Pública General de GNU según es //
13 // publicada por la Free Software Foundation, bien de la versión 2 de //
14 // dicha Licencia o bien (según su elección) de cualquier versión //
15 // posterior. //
16 // //
17 // Este programa se distribuye con la esperanza de que sea útil, pero SIN //
18 // NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL implícita o sin //
19 // garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. Véase la //
20 // Licencia Pública General de GNU para más detalles. //
21 // //
22 // Debería haber recibido una copia de la Licencia Pública General junto //
23 // con este programa. Si no ha sido así, escriba a la Free Software //
24 // Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU. //
25 // //
26 // //
28 
29 
30 
31 #ifndef __MatrizDensa__
32 #define __MatrizDensa__
33 
34 #include "Matriz.hpp"
35 
36 
37 
39 
44 class MatrizDensa: public Matriz
45 {
46 private:
47 
49  ldouble **M;
51  int Estado;
52 
53 
55 
57  void solicitaMemoria(const int ren, const int col);
58 
59 
60 
61 public:
62 
64  MatrizDensa(void) : Matriz()
65  {
66  Estado = 0;
67  solicitaMemoria(1, 1);
68  asignaNombre("SinNombre");
69  }
70 
72 
75  {
76  solicitaMemoria(mat.renglones(),mat.columnas());
77  asignaNombre(mat.nombre());
78  int i, j;
79  for (i = 0; i < Col; i++)
80  {
81  for (j = 0; j < Ren; j++) M[i][j] = mat.retorna(i,j);
82  }
83  }
84 
86 
88  MatrizDensa(const int ren, const int col) : Matriz()
89  {
90  Estado = 0;
91  solicitaMemoria(ren, col);
92  asignaNombre("SinNombre");
93  }
94 
96 
99  MatrizDensa(const int ren, const int col, const char *nmb) : Matriz()
100  {
101  Estado = 0;
102  solicitaMemoria(ren, col);
103  asignaNombre(nmb);
104  }
105 
108  {
109  liberaMemoria();
110  }
111 
113  void liberaMemoria(void);
114 
116 
118  void redimensiona(int nren, int ncol)
119  {
120  liberaMemoria();
121  solicitaMemoria(nren, ncol);
122  inicializa(0.0);
123  }
124 
126 
127  void inicializa(const ldouble val);
128 
129 
130 #ifdef DEPURAR
131 
135  void asigna(const int ren, const int col, const ldouble val);
136 
138 
141  ldouble retorna(const int ren, const int col);
142 #else
143 
147  inline void asigna(const int ren, const int col, const ldouble val)
148  {
149  M[ren][col] = val;
150  }
151 
153 
156  inline ldouble retorna(const int ren, const int col)
157  {
158  return M[ren][col];
159  }
160 #endif
161 
162 
164 
165  void multiplica(ldouble esc);
166 
168 
170  void multiplica(MatrizDensa *a, MatrizDensa *b);
171 
173 
175  void multiplica(Vector *b, Vector *r);
176 
178 
181  {
182  printf("\nFuncion no implementada en esta clase %d\n",ren);
183  return 0;
184  }
185 
187 
190  int retornaNumeroColumna(int ren, int ind)
191  {
192  printf("\nFuncion no implementada en esta clase: %d %d\n",ren, ind);
193  return 0;
194  }
195 
197 
200  inline double retornaValorColumna(int ren, int ind)
201  {
202  printf("\nFuncion no implementada en esta clase: %d %d\n",ren, ind);
203  return 0;
204  }
205 
206 };
207 
212 #endif
int renglones(void)
Retorna el número de renglones de la matriz.
Definition: Matriz_Base.hpp:103
MatrizDensa(const int ren, const int col, const char *nmb)
Constructor de la clase.
Definition: MatrizDensa.hpp:99
char * nombre(void)
Retorna el nombre de la matriz.
Definition: Matriz_Base.hpp:96
Clase para el trabajar con vectores de punto flotante.
Definition: Vector.hpp:47
Clase base para el trabajar con matrices de punto flotante.
Definition: Matriz.hpp:44
int Ren
Número de renglones.
Definition: Matriz_Base.hpp:64
double ldouble
Define ldouble como double.
Definition: Definiciones.hpp:50
Clase para el trabajar con matrices densas de punto flotante.
Definition: MatrizDensa.hpp:44
void liberaMemoria(void)
Libera la memoria solicitada para la matriz.
Definition: MatrizDensa.cpp:60
int columnas(void)
Retorna el número de columnas de la matriz.
Definition: Matriz_Base.hpp:110
int retornaNumeroColumnasBanda(int ren)
Retorna el número de columnas de la banda para el renglon indicado.
Definition: MatrizDensa.hpp:180
MatrizDensa(void)
Constructor de la clase.
Definition: MatrizDensa.hpp:64
double retornaValorColumna(int ren, int ind)
Retorna el valor de la columna cuando se para en el renglon e indice de la banda. ...
Definition: MatrizDensa.hpp:200
void redimensiona(int nren, int ncol)
Constructor de la clase.
Definition: MatrizDensa.hpp:118
~MatrizDensa()
Destructor de la clase.
Definition: MatrizDensa.hpp:107
void asigna(const int ren, const int col, const ldouble val)
Asigna el valor indicado en el renglo y columna solicitado.
Definition: MatrizDensa.cpp:95
ldouble retorna(const int ren, const int col)
Retorna el valor del renglon y columna solicitado.
Definition: MatrizDensa.cpp:111
int retornaNumeroColumna(int ren, int ind)
Retorna el número de columna cuando se para en el renglon e indice de la banda.
Definition: MatrizDensa.hpp:190
MatrizDensa(const int ren, const int col)
Constructor de la clase.
Definition: MatrizDensa.hpp:88
void asignaNombre(const char *nmb)
Asigna nombre a la matriz.
Definition: Matriz_Base.cpp:42
int Col
Número de columnas.
Definition: Matriz_Base.hpp:62
void inicializa(const ldouble val)
Inicializa la matriz al valor indicado.
Definition: MatrizDensa.cpp:78
MatrizDensa(MatrizDensa &mat)
Constructor de la clase.
Definition: MatrizDensa.hpp:74
void multiplica(ldouble esc)
Multiplica la matriz por el escalar pasado como parametro.
Definition: MatrizDensa.cpp:129