#ifndef DBETA #define DBETA #include "projector.hpp" /** dbeta: double beta model for density dbeta2: double beta model for density with only one beta */ namespace opt_utilities { template class dbeta :public model,std::vector,std::vector > { public: dbeta() { this->push_param_info(param_info,std::string>("n01",1)); this->push_param_info(param_info,std::string>("beta1",.66)); this->push_param_info(param_info,std::string>("rc1",100)); this->push_param_info(param_info,std::string>("n02",1)); this->push_param_info(param_info,std::string>("beta2",.67)); this->push_param_info(param_info,std::string>("rc2",110)); } public: dbeta* do_clone()const { return new dbeta(*this); } std::vector do_eval(const std::vector & x, const std::vector& p) { T n01=std::abs(p[0]); T beta1=p[1]; T rc1=p[2]; T n02=std::abs(p[3]); T beta2=p[4]; T rc2=p[5]; std::vector result(x.size()-1); for(size_t i=1;i class dbeta2 :public model,std::vector,std::vector > { public: dbeta2() { this->push_param_info(param_info,std::string>("n01",1)); this->push_param_info(param_info,std::string>("rc1",100)); this->push_param_info(param_info,std::string>("n02",1)); this->push_param_info(param_info,std::string>("rc2",110)); this->push_param_info(param_info,std::string>("beta",.67)); } public: dbeta2* do_clone()const { return new dbeta2(*this); } std::vector do_eval(const std::vector & x, const std::vector& p) { T n01=std::abs(p[0]); T rc1=p[1]; T n02=std::abs(p[2]); T rc2=p[3]; T beta=p[4]; T beta1=beta; T beta2=beta; std::vector result(x.size()-1); for(size_t i=1;i