/** @(#) functionnd/functionnd_1d.h */
#ifndef FUNCTIONND_1D_H
#define FUNCTIONND_1D_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 a una dimension. R^n -> R.
* @author Omar Posada Villarreal
* @version 1.0, 12/03/2002
*/
class FunctionND_1D {
public:
	// Constructor predeterminado
	// Destructor predeterminado

	/** Interfaz para evaluar funcion en n dimensiones.
	* Logica uno.
	* Uso:
* inicio de ejemplo
/** Evalua una funcion R^n -> R.
class Function1 : public FunctionND_1D {
public:
	// No se checa las dimensiones de xc y Fc.
	double evaluate(VectorDouble &xc) {
	        xc.setLogic(1);

                // Funcion del usuario
		return 2.0*pow(xc[1]+xc[2], 2.0) + pow(xc[1]-xc[2], 2.0)- 8.0;
        }
}; // No olvidar ";"
* fin de ejemplo
        * @param xc Punto donde se evaluara.
        * @return Evaluacion de la funcion. f(x1, x2, ..., xn).
	* @see Algoritmo FN pagina 296. */
        virtual double evaluate(VectorDouble &xc) = 0;

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