#include "strmodel1d.hpp" using namespace mu; using namespace std; using namespace opt_utilities; strmodel1d* strmodel1d::do_clone()const { return new strmodel1d(*this); } strmodel1d::strmodel1d() { set_buildin_fun(); } strmodel1d::strmodel1d(const strmodel1d& rhs) :expr(rhs.expr), par_names(rhs.par_names), var_name(rhs.var_name), par_vec(rhs.par_vec) { set_buildin_fun(); set_expr(expr,par_names,var_name); } strmodel1d& strmodel1d::operator=(const strmodel1d& rhs) { set_buildin_fun(); expr=rhs.expr; par_names=rhs.par_names; var_name=rhs.var_name; par_vec=rhs.par_vec; set_expr(expr,par_names,var_name); return *this; } void strmodel1d::set_buildin_fun() { mp.DefineFun("sin",sin); mp.DefineFun("cos",cos); mp.DefineFun("exp",exp); mp.DefineFun("tan",tan); mp.DefineFun("log",log); } void strmodel1d::set_expr(const string& _expr, const std::vector& _par_names, const std::string& _var_name) { expr=_expr; par_names=_par_names; var_name=_var_name; this->clear_param_info(); par_vec.resize(par_names.size()); mp.ClearVar(); // mp.ClearFun(); for(int i=0;ipush_param_info(param_info >(par_names[i],0)); } mp.DefineVar(var_name.c_str(),&x); mp.SetExpr(expr.c_str()); } double strmodel1d::do_eval(const double& _x,const vector& p) { for(int i=0;i