#ifndef OPTIMIZE_FUNC_HPP #define OPTIMIZE_FUNC_HPP #if __cplusplus<201103L #error This header must be used with C++ 11(0x) or newer #endif #include #include #include #include #include "../core/optimizer.hpp" #include "../methods/powell/powell_method.hpp" namespace opt_utilities { template Tx optimize(const std::function& func,const Tx& start_point,const opt_utilities::opt_method& opm=opt_utilities::powell_method >()) { class func_wrapper :public opt_utilities::func_obj { std::function f; public: func_wrapper(const std::function& f1) :f(f1) {}; func_wrapper* do_clone()const { return const_cast(this); } void do_destroy() { //do nothing } Ty do_eval(const Tx& x) { return f(x); } }foo(func); opt_utilities::optimizer opt; opt.set_opt_method(opm); opt.set_func_obj(foo); opt.set_start_point(start_point); return opt.optimize(); } } #endif //EOF