【发布时间】:2018-08-30 11:40:06
【问题描述】:
我正在寻找使用 dlib 库优化近似误差... 所以假设我有 Point (x,y) 和一个值向量,它们用于查找最小值并在本地拟合错误,所以我实现了这个类:
#include <iostream>
#include <vector>
#include <cmath>
#include <dlib/optimization.h>
class Point
{
int _x, _y;
public:
Point(int x, int y): _x(x), _y(y){}
double findError(const double& psi)
{
auto err = std::erf(_x - psi) - std::erf(_y-psi);
return std::pow(err,2);
}
double optimize(const Point& p, dlib::matrix<double,0,1> &psiValues)
{
auto err = p->*findError ;
dlib::find_min_box_constrained(bfgs_search_strategy(),
objective_delta_stop_strategy(1e-9),
findError, derivative(findError), psiValues, {0.1,0.5,0.9},{0.1,0.4,0.8 });
return psiValues(0);
}
};
并且这段代码无法编译,所以我尝试在静态类中提取优化器,如下所示:
#include <iostream>
#include <vector>
#include <cmath>
//#include <dlib/optimization.h>
class Point
{
int _x, _y;
public:
Point(int x, int y): _x(x), _y(y){}
double findError(const double& psi)
{
auto err = std::erf(_x - psi) - std::erf(_y-psi);
return std::pow(err,2);
}
};
class Errorcalculator
{
public:
static double optimize(const Point& p, std::vector<double> &psiValues)
{
auto err = p->*findError ;
// dlib::find_min_box_constrained(bfgs_search_strategy(),
// objective_delta_stop_strategy(1e-9),
// p->*findError, derivative(p->*findError), psiValue, {0.1,0.9 },{0.1 0.8});
return 0.0;
}
};
现在我得到了(使用带或不带 static 关键字的 dlib 函数出现相同的编译错误)
错误:'findError' 未在此范围内声明
如果点p被声明为参数怎么可能?如何使用类中封装的 dlib 函数?
【问题讨论】:
标签: c++ optimization dlib member-function-pointers