Resolucion de sistemas lineales
 All Classes Files Functions Variables Typedefs Macros Pages
ResuelveSistemaLineal.hpp
Go to the documentation of this file.
1 // Clase para resolver un sistema lineal //
3 // Revisión: 1 de Junio del 2006 //
4 // //
5 // //
6 // Análisis y Diseño y Programación: //
7 // //
8 // Nombre: Antonio Carrillo Ledesma //
9 // E-mail: acl@www.mmc.igeofcu.unam.mx //
10 // Página: http://www.mmc.igeofcu.unam.mx/acl //
11 // //
12 // //
13 // Este programa es software libre. Puede redistribuirlo y/o modificarlo //
14 // bajo los términos de la Licencia Pública General de GNU según es //
15 // publicada por la Free Software Foundation, bien de la versión 2 de //
16 // dicha Licencia o bien (según su elección) de cualquier versión //
17 // posterior. //
18 // //
19 // Este programa se distribuye con la esperanza de que sea útil, pero SIN //
20 // NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL implícita o sin //
21 // garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. Véase la //
22 // Licencia Pública General de GNU para más detalles. //
23 // //
24 // Debería haber recibido una copia de la Licencia Pública General junto //
25 // con este programa. Si no ha sido así, escriba a la Free Software //
26 // Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU. //
27 // //
28 // //
30 
31 
32 
33 #ifndef __ResuelveSistemaLineal__
34 #define __ResuelveSistemaLineal__
35 
36 
37 #include <stdlib.h>
38 #include <stdio.h>
39 #include "Matriz.hpp"
40 
41 // Método numérico
42 #define CGM 0
43 #define FACT_LU 1
44 #define GAUSSSEIDEL 2
45 #define INVERSA 3
46 #define JACOBI 4
47 #define TRIDIAGONAL 5
48 #define FACT_CHOLESKI 6
49 
50 
51 // Nombre del método
52 static const char Nmb[][50]= {"CGM","Factorización LU","Gauss-Seidel","Inversa","Jacobi","Tridiagonal","Choleski"};
53 
54 // Requiere matriz del tipo Bandada, Dispersa, Densa
55 #define REQUIERE_MAT_BAND 0
56 #define REQUIERE_MAT_DISP 1
57 #define REQUIERE_MAT_DENS 2
58 
59 
61 
67 {
68 protected:
69 
78 
85 
87 
88  void error(const char *txt)
89  {
90  printf("\nError resolver el sistema Lineal: %s\n\n",txt);
91  exit(1);
92  }
93 
94 
95 public:
96 
98 
101  void inicializa(Matriz *m, Vector *b, Vector *x)
102  {
103  M = m;
104  X = x;
105  B = b;
106  }
107 
110  {
111  NumIteraciones = 0;
112  }
113 
115  virtual void resuelve(void) = 0;
116 
118 
120  virtual void resuelve(Vector *b, Vector *x) = 0;
121 
122 
124 
126  {
127  return NumIteraciones;
128  }
129 
131 
133  {
134  return MetodoModificaMatriz;
135  }
136 
138 
140  {
141  return MetodoNumerico;
142  }
143 
145 
147  {
148  return RequiereMatriz;
149  }
150 
152  void informacionMetodo(void)
153  {
154  if (MetodoModificaMatriz) printf("\nMétodo %s para resolver el sistema lineal\n",Nmb[MetodoNumerico]);
155  else printf("\nMétodo %s, iteraciones para resolver el sistema lineal %d\n",Nmb[MetodoNumerico],NumIteraciones);
156  }
157 
158 
159 };
160 
161 #endif
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
virtual void resuelve(void)=0
Resuelve el sistema lineal.
Clase para resolución del sistema lineal.
Definition: ResuelveSistemaLineal.hpp:66
void error(const char *txt)
Visualiza el error indicado y termina el programa.
Definition: ResuelveSistemaLineal.hpp:88
int retornaNumeroIteraciones(void)
Retorna el número de iteraciones en la resolución del sistema lineal.
Definition: ResuelveSistemaLineal.hpp:125
Vector * B
Vactor lado derecho.
Definition: ResuelveSistemaLineal.hpp:82
int MetodoNumerico
Método Numerico.
Definition: ResuelveSistemaLineal.hpp:75
int retornaMetodoNumerico(void)
Retorna el método numérico.
Definition: ResuelveSistemaLineal.hpp:139
int RequiereMatriz
Requiere matriz del tipo Bandada, Dispersa, Densa.
Definition: ResuelveSistemaLineal.hpp:77
void inicializa(Matriz *m, Vector *b, Vector *x)
Resuelve el sistema lineal.
Definition: ResuelveSistemaLineal.hpp:101
int retornaRequiereMatriz(void)
Retorna el tipo de matriz que requiere el método.
Definition: ResuelveSistemaLineal.hpp:146
Matriz * M
Matriz.
Definition: ResuelveSistemaLineal.hpp:84
bool MetodoModificaMatriz
Indica si el método numérico modifica la matriz.
Definition: ResuelveSistemaLineal.hpp:71
ResuelveSistemaLineal(void)
Constructor de la clase.
Definition: ResuelveSistemaLineal.hpp:109
void informacionMetodo(void)
Visualiza la información del método.
Definition: ResuelveSistemaLineal.hpp:152
bool elMetodoModificaMatriz(void)
Indica si el método numérico modifica la matriz.
Definition: ResuelveSistemaLineal.hpp:132
int NumIteraciones
Numero de iteraciones en la resolución del sistema lineal.
Definition: ResuelveSistemaLineal.hpp:73
Vector * X
Vector solución
Definition: ResuelveSistemaLineal.hpp:80