c++ - 难以从 c++ boost 库中获取 barycentric_rational 以按照我的需要工作
问题描述
我正在使用 C++ Boost 库中的 barycentric_rational 对存储在向量中的数据进行插值。向量填充在一个类中,我需要在填充向量后执行插值,所以我可以编写一个访问函数来获取特定点的插值。像这样的东西:
class V{
public:
V(/* some arguments */){
//populate x and y
b=barycentric_rational<double>(x.data(),y.data(),x.size());
}
double psi(double r){
return b(r);
}
private:
std::vector<double> x,y;
barycentric_rational<double> b;
};
我收到错误消息:
error: no matching function for call to ‘boost::math::barycentric_rational<double>::barycentric_rational()
我想我收到这条消息是因为 b 需要在初始化列表中初始化,但是在我的应用程序中填充 x 和 y 的代码很复杂。出于同样的原因,在单独的公共方法中设置 x 和 y 不起作用。
我尝试了以下解决方案:
class V{
public:
V(/* some arguments */):b(nullptr){
//populate x and y
b=new barycentric_rational<double>(x.data(),y.data(),x.size());
}
~V(){
delete b;
}
double psi(double r){
return b->operator()(r);
}
private:
std::vector<double> x,y;
barycentric_rational<double> *b;
};
这似乎有效。但是,我不喜欢它有两个原因:a)我使用的是原始指针,最终我需要能够使用复制和赋值运算符,这会给我带来麻烦,b)我确信必须有一个这样做的更整洁的方式。
请问有人可以建议一种做我需要的方法吗?
解决方案
您可以在初始化列表中对其进行初始化。如果您需要使用一些特殊的逻辑来填充 x 和 y,您可以在单独的方法中完成。
class V{
public:
V(/* some arguments */)
: x(populateX()), y(populateY()), b(x.data(),y.data(),x.size())
{
}
std::vector<double> populateX() {
}
std::vector<double> populateY() {
}
double psi(double r){
return b(r);
}
private:
std::vector<double> x,y;
barycentric_rational<double> b;
};
如果填充 x 和 y 的代码过于复杂,并且 x 和 y 的初始化不能单独完成,那么您可以将其移至单独的类:
struct XY {
XY(/* some args */) {
//init x and y
}
std::vector<double> x;
std::vector<double> y;
};
class V{
public:
V(/* some arguments */)
: xy(/*some args */), b(xy.x.data(),xy.y.data(),xy.x.size())
{
}
double psi(double r){
return b(r);
}
private:
XY xy;
barycentric_rational<double> b;
};
推荐阅读
- sql - 选择所有订单中价格最高的客户
- c - $1 在 yacc 中是什么意思,我怎样才能得到它的价值
- c++ - 在 CLI 中抛出 std::exception 会引发访问冲突
- php - PHP 提供 Roudcube 的 index.php 作为下载
- reactjs - React 高阶组件警告
- python - 更新 ipykernel 或其他任何东西都会导致链接错误和回滚
- mysql - 使用 sequelize 和 docker-compose 从节点应用程序连接到 MySQL DB
- rust - 在 Substrate 运行时中跨不同模块调用“on_initialize”的顺序是什么?
- python - Scrapy - 提取使用 JS 函数生成的页面链接
- json - Bootstrap Tokenfield 显示空标签列表。Laravel 应用程序