00001
00002
00003
00004
00005
00006
00007 #ifndef AIDA_IFUNCTION_H
00008 #define AIDA_IFUNCTION_H 1
00009
00010
00011
00012
00013
00014
00015 #include <string>
00016 #include <vector>
00017
00018 namespace AIDA {
00019
00020 class IAnnotation;
00021
00035 class IFunction {
00036
00037 public:
00039 virtual ~IFunction() { ; }
00040
00044 virtual double value(const std::vector<double> & x) const = 0;
00045
00049 virtual int dimension() const = 0;
00050
00055 virtual bool isEqual(const IFunction * f) const = 0;
00056
00062 virtual const std::vector<double> & gradient(const std::vector<double> & x) const = 0;
00063
00067 virtual bool providesGradient() const = 0;
00068
00072 virtual std::string variableName(int i) const = 0;
00073
00077 virtual const std::vector<std::string> & variableNames() const = 0;
00078
00082 virtual void setParameters(const std::vector<double> & params) = 0;
00083
00087 virtual const std::vector<double> & parameters() const = 0;
00088
00092 virtual int numberOfParameters() const = 0;
00093
00101 virtual const std::vector<std::string> & parameterNames() const = 0;
00102
00110 virtual bool setParameter(std::string name, double x) = 0;
00111
00112 virtual double parameter(std::string name) const = 0;
00113
00118 virtual int indexOfParameter(std::string name) const = 0;
00119
00120 virtual IAnnotation & annotation() = 0;
00121
00122 virtual const IAnnotation & annotation() const = 0;
00123
00163 virtual std::string codeletString() const = 0;
00164
00166
00167 };
00168 };
00169 #endif