/** @(#) functionnd/functionnd.h */
#ifndef FUNCTIONND_H
#define FUNCTIONND_H
//----------------------------------------------------------------------------
#include "../matrixdouble/vectordouble.h"
#include "../mathpos/mathpos.h"	//MACHEPS
#include <iostream>
#include <stdexcept>	// runtime_exception
using namespace std;

/**
* Interfaz de funciones de varias dimensiones.
* @author Omar Posada Villarreal
* @version 1.0, 02/03/2002
*/
class FunctionND {
public:
	// Constructor predeterminado
	// Destructor predeterminado
        /**
        * Interfaz para evaluar funcion en n dimensiones.
        * Algoritmo FVEC pagina 298.
	* Logica uno.
	* Uso:
* inicio de ejemplo
class Function1 : public FunctionND {
public:
	// No se checa las dimensiones de xc y Fc.
	void evaluate(VectorDouble &xc, VectorDouble &Fc) {
	        xc.setLogic(1);
	        Fc.setLogic(1);

                // Funcion del usuario
		Fc[1] = 2.0*pow(xc[1]+xc[2], 2.0) + pow(xc[1]-xc[2], 2.0)- 8.0;
		Fc[2] = 5.0*pow(xc[1], 2.0)       + pow(xc[2]-3.0, 2.0)  - 9.0;
        }
}; // No olvidar ";"
* fin de ejemplo
        * @param xc Punto donde se evaluara.
        * @param Fc Asignacion del valor del vector funcion
        * de las ecuaciones no lineales.
        */
        virtual void evaluate(VectorDouble &xc, VectorDouble &Fc) = 0;

private:
};
//----------------------------------------------------------------------------
#endif
// Fin------------------------------------------------------------------------