Resolucion de sistemas lineales
 All Classes Files Functions Variables Typedefs Macros Pages
Matriz.hpp
Go to the documentation of this file.
1 // Clase base para el trabajar con matrices 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 __Matriz__
32 #define __Matriz__
33 
34 #include "Matriz_Base.hpp"
35 #include "Vector.hpp"
36 
37 
39 
44 class Matriz: public Matriz_Base
45 {
46 
47 public:
48 
50  Matriz(void) : Matriz_Base()
51  {}
52 
54 
57  inline ldouble operator() (size_t ren, size_t col)
58  {
59  return retorna(ren,col);
60  }
61 
63 
66  virtual void asigna(const int ren, const int col, const ldouble val) = 0;
67 
69 
72  virtual ldouble retorna(const int ren, const int col) = 0;
73 
75 
78  inline void retornaRenglon(int r, ldouble *arr, int tam)
79  {
80  int i, t = Col < tam ? Col : tam;
81  for (i = 0; i < t; i++) arr[i] = retorna(r,i);
82  }
83 
85 
86  virtual void inicializa(const ldouble val) = 0;
87 
89 
90  void inicializaDiagonal(const ldouble val);
91 
93 
94  void visualiza(const int tp);
95 
97 
100  void convierte(ldouble *a, int ren, int tam);
101 
103 
106  void convierte(ldouble **a, int ren, int col);
107 
109 
111  void convierte(int ren, Vector *a);
112 
114 
117  void convierte(int ren, int col, ldouble *a);
118 
120 
121  void retornaVector(Vector *a);
122 
124 
125  virtual void copia(Matriz *a);
126 
128 
130  void suma(Matriz *a, Matriz *b);
131 
133 
134  void suma(Matriz *a);
135 
137 
139  void resta(Matriz *a, Matriz *b);
140 
142 
143  void resta(Matriz *a);
144 
146 
147  virtual void multiplica(ldouble esc) = 0;
148 
150 
152  virtual void multiplica(Vector *b, Vector *r) = 0;
153 
155 
156  void transpuesta(Matriz *a);
157 
159 
162  int iguales(Matriz *a, ldouble eps = 1e-14);
163 
165 
166  int maximoTamanoColumnaOcupado(void);
167 
169 
170  int entradasDistintasCero(void);
171 
173 
175  virtual int retornaNumeroColumnasBanda(int ren) = 0;
176 
178 
181  virtual int retornaNumeroColumna(int ren, int ind) = 0;
182 
183 
185 
188  virtual double retornaValorColumna(int ren, int ind) = 0;
189 
190 };
191 
192 #endif
virtual void inicializa(const ldouble val)=0
Inicializa la matriz con el valor indicado.
void convierte(ldouble *a, int ren, int tam)
Convierte el arreglo unidimensional en parte de la matriz en el renglon Ren y de tamaño Tam...
Definition: Matriz.cpp:88
virtual int retornaNumeroColumnasBanda(int ren)=0
Retorna el número de columnas de la banda para el renglon indicado.
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
double ldouble
Define ldouble como double.
Definition: Definiciones.hpp:50
virtual void copia(Matriz *a)
Copia el contenido de la matriz a la matriz pasada como parámetro.
Definition: Matriz.cpp:371
int entradasDistintasCero(void)
Retorna el número de entradas distintas de cero en la matriz.
Definition: Matriz.cpp:355
virtual void asigna(const int ren, const int col, const ldouble val)=0
Asigna el valor indicado en el renglon y columna solicitado.
int maximoTamanoColumnaOcupado(void)
Retorna el máximo tamaño en todas las columnas que sean distintos de cero.
Definition: Matriz.cpp:337
void resta(Matriz *a, Matriz *b)
Resta a la matriz A la matriz B.
Definition: Matriz.cpp:249
virtual void multiplica(ldouble esc)=0
Multiplica la matriz por el escalar pasado como parametro.
void suma(Matriz *a, Matriz *b)
Suma las matrices A y B.
Definition: Matriz.cpp:203
void visualiza(const int tp)
Visualiza la matriz.
Definition: Matriz.cpp:51
virtual int retornaNumeroColumna(int ren, int ind)=0
Retorna el número de columna cuando se para en el renglon e indice de la banda.
void inicializaDiagonal(const ldouble val)
Inicializa la matriz como una matriz diagonal con el valor indicado.
Definition: Matriz.cpp:38
int iguales(Matriz *a, ldouble eps=1e-14)
Regresa verdadero si las matrices son iguales, cero en caso contrario.
Definition: Matriz.cpp:315
void retornaRenglon(int r, ldouble *arr, int tam)
Retorna el contenido del renglon de la matriz en el arreglo.
Definition: Matriz.hpp:78
virtual ldouble retorna(const int ren, const int col)=0
Retorna el valor del renglon y columna solicitado.
int Col
Número de columnas.
Definition: Matriz_Base.hpp:62
Matriz(void)
Constructor de la clase.
Definition: Matriz.hpp:50
void retornaVector(Vector *a)
Retorna todo el contenido de la matriz como un vector.
Definition: Matriz.cpp:179
Clase base para el trabajar con matrices.
Definition: Matriz_Base.hpp:57
virtual double retornaValorColumna(int ren, int ind)=0
Retorna el valor de la columna cuando se para en el renglon e indice de la banda. ...
void transpuesta(Matriz *a)
Transpone la matriz pasada como parámetro.
Definition: Matriz.cpp:294
ldouble operator()(size_t ren, size_t col)
Retorna el valor del renglon y columna solicitado.
Definition: Matriz.hpp:57