00001 //=========================================================================== 00002 //= solver.h Mayo de 1999 = 00003 //=-------------------------------------------------------------------------= 00004 //= Definiciones para los SOLVERs numericos! = 00005 //=-------------------------------------------------------------------------= 00006 //= ADVERTENCIA: ESTE SOFTWARE NO ESTA CONCEBIDO NI DISENNADO PARA EL USO = 00007 //= EN EQUIPO DE CONTROL EN LINEA EN ENTORNOS PELIGROSOS QUE REQUIERAN UN = 00008 //= DESEMPENNO LIBRE DE FALLAS, COMO LA OPERACION DE PLANTAS NUCLEARES, = 00009 //= SISTEMAS DE NAVEGACION O COMUNICACION EN AVIONES, TRAFICO AEREO, = 00010 //= EQUIPO MEDICO DEL CUAL DEPENDAN VIDAS HUMANAS O SISTEMAS DE ARMAMENTO, = 00011 //= EN LOS CUALES UNA FALLA EN EL SOFTWARE PUEDA IMPLICAR DIRECTAMENTE LA = 00012 //= MUERTE, DANNOS PERSONALES O DANNOS FISICOS Y/O AMBIENTALES GRAVES = 00013 //= ("ACTIVIDADES DE ALGO RIESGO"). = 00014 //=-------------------------------------------------------------------------= 00015 //= Autor original: Oscar J. Chavarro G. A.K.A. JEDILINK. Copyright (c), = 00016 //= 1997 - 2003, oscarchavarro@hotmail.com = 00017 //= AQUYNZA es software libre, y se rige bajo los terminos de la licencia = 00018 //= LGPL de GNU (http://www.gnu.org). Para mayor informacion respecto a la = 00019 //= licencia de uso, consulte el archivo ./doc/LICENCIA en la distribucion. = 00020 //=========================================================================== 00021 00022 #ifndef __SOLVER__ 00023 #define __SOLVER__ 00024 00025 #include "jed_defs.h" 00026 00027 class ECUACION_DIFERENCIAL 00041 { 00042 public: 00043 virtual int ODE_numero_de_variables_de_estado(void) = 0; 00044 virtual void ODE_reportar_variables_de_estado(double *Datos) = 0; 00045 virtual void ODE_actualizar_variables_de_estado(double *Datos) = 0; 00046 virtual void ODE_calcular_la_primera_derivada(double *Datos) = 0; 00047 }; 00048 00049 class SOLVER 00066 { 00067 protected: 00068 double *temp1; 00069 double *temp2; 00070 long int num_variables_de_estado; 00071 ECUACION_DIFERENCIAL *Ecuacion; 00072 00073 void escalar_vector(double factor, double *vector); 00074 void sumar_vectores(void); 00075 public: 00076 SOLVER(ECUACION_DIFERENCIAL *Mi_ecuacion); 00077 virtual ~SOLVER(); 00078 00079 virtual void ejecutar_solucion(double delta_t) = 0; 00080 }; 00081 00082 class SOLVER_EULER :public SOLVER 00089 { 00090 public: 00091 SOLVER_EULER(ECUACION_DIFERENCIAL *Mi_ecuacion); 00092 virtual ~SOLVER_EULER(); 00093 00094 void ejecutar_solucion(double delta_t); 00095 }; 00096 00097 class SOLVER_RUNGE_KUTTA : public SOLVER 00103 { 00104 public: 00105 SOLVER_RUNGE_KUTTA(ECUACION_DIFERENCIAL *Mi_ecuacion); 00106 virtual ~SOLVER_RUNGE_KUTTA(); 00107 00108 void ejecutar_solucion(double delta_t); 00109 }; 00110 00111 #endif // __SOLVER__ 00112 00113 //=========================================================================== 00114 //= EOF = 00115 //=========================================================================== 00116