Resolucion de sistemas lineales
 All Classes Files Functions Variables Typedefs Macros Pages
ResuelveCGM.hpp
Go to the documentation of this file.
1 // Clase para resolver un sistema lineal mediante CGM //
3 // //
4 // Análisis y Diseño y Programación: //
5 // //
6 // Nombre: Antonio Carrillo Ledesma //
7 // E-mail: acl@www.mmc.geofisica.unam.mx //
8 // Página: http://www.mmc.geofisica.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 #ifndef __ResuelveCGM__
31 #define __ResuelveCGM__
32 
33 #include "BCGM.hpp"
34 
35 
37 
42 class ResuelveCGM: public BCGM, public MultOp, public ProductoPunto
43 {
44 
45 protected:
46 
48  inline double productoPunto(Vector *u, Vector *v)
49  {
50  return u->productoPunto(v);
51  }
52 
54  inline void multiplica(Vector *u, Vector *v)
55  {
56  M->multiplica(u,v);
57  }
58 
60  inline int tamano(void)
61  {
62  return M->renglones();
63  }
64 
65 
68 
69 
70 public:
71 
73  ResuelveCGM(void) : BCGM(*(MultOp*) this, *(ProductoPunto*) this, 1000, 1e-5)
74  {
75  X = NULL;
76  B = NULL;
77  MetodoModificaMatriz = false;
80  }
81 
83 
85  ResuelveCGM(Vector *x, Vector *b) : BCGM(*(MultOp*) this, *(ProductoPunto*) this, 1000, 1e-5)
86  {
87  X = x;
88  B = b;
89  MetodoModificaMatriz = false;
92  }
93 
95 
99  ResuelveCGM(Vector *x, Vector *b, ldouble ep, int it) : BCGM(*(MultOp*) this, *(ProductoPunto*) this, 1000, 1e-5)
100  {
101  X = x;
102  B = b;
103  MetodoModificaMatriz = false;
106  }
107 
109 
111  inline void configuraMetodo(ldouble ep, int it)
112  {
113  Ep = ep;
114  Iter = it;
115  }
116 };
117 
118 #endif
119 
120 
121 
Clase para implementar la multiplicación de la matriz por el vector.
Definition: MultOp.hpp:42
int renglones(void)
Retorna el número de renglones de la matriz.
Definition: Matriz_Base.hpp:103
#define CGM
Definition: ResuelveSistemaLineal.hpp:42
int Iter
Número máximo de iteraciones.
Definition: BCGM.hpp:58
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
void configuraMetodo(ldouble ep, int it)
Configura al método numérico.
Definition: ResuelveCGM.hpp:111
Matriz * C
Precondicionador.
Definition: ResuelveCGM.hpp:67
double ldouble
Define ldouble como double.
Definition: Definiciones.hpp:50
Clase para implementar el producto punto.
Definition: ProductoPunto.hpp:43
Vector * B
Vactor lado derecho.
Definition: ResuelveSistemaLineal.hpp:82
#define REQUIERE_MAT_BAND
Definition: ResuelveSistemaLineal.hpp:55
int MetodoNumerico
Método Numerico.
Definition: ResuelveSistemaLineal.hpp:75
virtual void multiplica(ldouble esc)=0
Multiplica la matriz por el escalar pasado como parametro.
ldouble Ep
Tolerancia.
Definition: BCGM.hpp:61
int RequiereMatriz
Requiere matriz del tipo Bandada, Dispersa, Densa.
Definition: ResuelveSistemaLineal.hpp:77
ResuelveCGM(void)
Constructor de la clase.
Definition: ResuelveCGM.hpp:73
Matriz * M
Matriz.
Definition: ResuelveSistemaLineal.hpp:84
ResuelveCGM(Vector *x, Vector *b, ldouble ep, int it)
Constructor de la clase.
Definition: ResuelveCGM.hpp:99
ResuelveCGM(Vector *x, Vector *b)
Constructor de la clase.
Definition: ResuelveCGM.hpp:85
ldouble productoPunto(void)
Calcula el producto punto.
Definition: Vector.cpp:237
void multiplica(Vector *u, Vector *v)
Multiplica Au=v.
Definition: ResuelveCGM.hpp:54
bool MetodoModificaMatriz
Indica si el método numérico modifica la matriz.
Definition: ResuelveSistemaLineal.hpp:71
Clase para resolución del sistema lineal mediante CGM standard.
Definition: ResuelveCGM.hpp:42
Clase para resolución del sistema lineal mediante CGM.
Definition: BCGM.hpp:45
int tamano(void)
Tamaño
Definition: ResuelveCGM.hpp:60
Vector * X
Vector solución
Definition: ResuelveSistemaLineal.hpp:80
double productoPunto(Vector *u, Vector *v)
Producto punto.
Definition: ResuelveCGM.hpp:48