00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _plExternalFunctionAtKernel_h_
00019 #define _plExternalFunctionAtKernel_h_
00020
00021 #include <plValues.h>
00022
00023 class kplDerivativeFunction
00024 {
00025 protected:
00027 list <kplVariable*> derived_variable;
00028
00030 list <kplVariable*> under_variables_list;
00031
00034
00035 plValues *input_values;
00036
00038 plValues *output_values;
00039
00040
00041 public:
00042 kplDerivativeFunction(list <kplVariable*> der_variable,
00043 list <kplVariable*> under_variables);
00044
00045 virtual ~kplDerivativeFunction();
00046
00047 plDataValues operator()(const plValues& values) const;
00048
00049 virtual void evaluate(plDataValues& o_values,
00050 plDataValues* i_values) const = 0;
00051
00052 const list <kplVariable*>& get_under_variables() {return under_variables_list;}
00053
00054
00055 };
00056
00057 class kplFormalFunction
00058 {
00059 protected:
00061 string name;
00062
00064 list <kplVariable*> all_variables;
00065
00067 list <kplVariable*> search_variables;
00068
00070 list <kplVariable*> known_variables;
00071
00073 list <kplDerivativeFunction *> derivatives_list;
00074
00075
00077 plValues *input_values;
00078
00080 plValues *output_values;
00081
00082
00083 public:
00084 kplFormalFunction(){};
00085
00086 kplFormalFunction(const list <kplVariable*>& known_params,
00087 const string& func_name);
00088
00089 kplFormalFunction(const list <kplVariable*>& search_params,
00090 const list <kplVariable*>& known_params,
00091 const string& func_name);
00092
00093
00094 const list <kplDerivativeFunction*> &get_derivatives_list() const {return derivatives_list;};
00095
00096 virtual ~kplFormalFunction();
00097
00098 const list <kplVariable*>& get_all_variables() const;
00099
00100 const list <kplVariable*>& get_search_variables() const;
00101
00102 const list <kplVariable*>& get_known_variables() const;
00103
00104 plDataValues operator()(const plValues& values) const;
00105
00106 virtual void evaluate(plDataValues &output_values,
00107 plDataValues *values) const = 0;
00108
00109
00111 void set_variables(const list <kplVariable*> search_vars,
00112 const list <kplVariable*> known_vars);
00113
00114 void write(ostream &out) const;
00115
00116 const string& get_name()const {return name;};
00117
00118 friend class kplFunctionalDirac;
00119 friend class kplConditionalHistogramA;
00120 friend class kplConditional1dGaussD;
00121 friend class kplConditional1dGaussE;
00122 friend class kplConditional1dGaussF;
00123 friend class kplConditional1dGaussG;
00124 friend class kplConditionalGaussD;
00125 friend class kplConditionalGaussE;
00126 friend class kplConditionalGaussF;
00127 friend class kplConditionalGaussG;
00128 friend class kplConditionalBellShapeD;
00129 friend class kplConditionalBellShapeE;
00130 friend class kplConditionalBellShapeF;
00131 friend class kplConditionalBellShapeG;
00132 friend class kplIneqConstraint;
00133
00134 friend ostream& operator<<( ostream &out, const kplFormalFunction &function);
00135 };
00136
00137
00138 class kplFormalFunction_can_be_evaluated_predicate
00139 {
00140 private :
00141 list <kplVariable*> *fixed;
00142 public :
00143 kplFormalFunction_can_be_evaluated_predicate(list <kplVariable*> *fix)
00144 : fixed(fix){};
00145 public :
00146 bool operator() (const kplFormalFunction *tested_function);
00147 };
00148
00149
00150
00151
00152 #endif