#include #include #include #include #include #include #include #include using namespace opt_utilities; //declear a class derived from func_obj class lin1d :public opt_utilities::model,std::string> { private: model >* do_clone()const { return new lin1d(*this); } public: lin1d() { this->push_param_info(param_info >("k",1,-10,10)); this->push_param_info(param_info >("b",0,-10,10)); } public: double do_eval(const double& x,const std::vector& param) { return x*get_element(param,0)+get_element(param,1); } private: std::string do_to_string()const { return "linear model\n" "y=k*x+b\n"; } }; int main() { fitter,double,std::string> f; f.set_model(lin1d()); //f.set_method(powell_method >()); f.set_opt_method(aga_method >()); default_data_set ds; for(int i=0;i<100;++i) { ds.add_data(data(i,i*3+5,.1,.1,0,0)); } f.load_data(ds); f.set_statistic(chisq,double,std::string>()); f.fit(); cout<