在类中使用 boost::numeric::odeint

2023-12-02

对于模拟,我使用 boost::numeric::odeint 但遇到问题。我在我的一个类的方法中使用集成函数,但出现“没有匹配的函数可用于调用集成”的错误。为了更清楚,这是我的代码的压缩版本:

#include "MotionGeneration.h"
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>

typedef boost::array< double , 10 > state_type;

MotionGeneration::MotionGeneration(some_data) {
     //My constructor.
     //some_data assignment.
}

MotionGeneration::~MotionGeneration() {

}

double MotionGeneration::getError(double time) {
   //error calculation.
}

void MotionGeneration::execute(){
    state_type init_conf = { 0, -1.5708, 0, 0, 0, -1.5708, 0, -1.5708, 0, 0.5};
    boost::numeric::odeint::integrate(motionScheme, init_conf, 0.0, 1.0, 0.05, plot);
}

void MotionGeneration::motionScheme(const state_type &q, state_type &q_dot, double t){
     //Some long code goes here. Also I have some calls to some methods of this class. for example:
     double err = getError(t);          
}

void MotionGeneration::plot(const state_type &q , const double t){
    //some data pfintf here.
}

请注意,我的方法都不是静态的,事实上,我不能使用静态方法。当我构建项目时,出现以下错误:

error: no matching function for call to `integrate(<unknown type>, state_type&, double, double, double, <unknown type>)'

我认为这是将系统函数作为类方法的问题,但我不知道如何处理这种情况。


odeint 需要一个 operator()( const state_type &x , state_type &dxdt , double dt )

在您的情况下,MotionGenerator没有此运算符,但您可以绑定方法motionScheme

#include <functional>
namespace pl = std::placeholders;

// ...

// not tested
void MotionGeneration::execute()
{
    state_type init_conf = { 0, -1.5708, 0, 0, 0, -1.5708, 0, -1.5708, 0, 0.5};
    boost::numeric::odeint::integrate(
        std::bind(&MotionGenerator::motionScheme, *this , pl::_1 , pl::_2 , pl::_3 ) , init_conf, 0.0, 1.0, 0.05, plot);
}

```

但是,重命名你的方法很容易motionScheme to operator(),然后简单地通过*this集成。

编辑:您还可以使用std::ref避免复制 MotionGenerator 实例:

void MotionGeneration::execute()
{
    state_type init_conf = { 0, -1.5708, 0, 0, 0, -1.5708, 0, -1.5708, 0, 0.5};
    boost::numeric::odeint::integrate(
        std::bind(&MotionGenerator::motionScheme, std::ref(*this) , pl::_1 , pl::_2 , pl::_3 ) , init_conf, 0.0, 1.0, 0.05, plot);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在类中使用 boost::numeric::odeint 的相关文章

随机推荐

  • 从我的 Android 应用程序调用 Google Pay Intent 时出现错误“您已超出银行设置的最大交易金额”

    我在 Android 应用程序中遇到 Google Pay 集成 应用内支付 问题 当我提出交易请求时 我收到错误 您已超出银行设置的最大交易金额 即使这是我的第一笔交易 当我尝试直接从 Google Pay 发送金额时 它起作用了 Thi
  • 监控和维护应用程序在光盘上的大小的解决方案

    我正在构建一个广泛使用 CoreData 的应用程序 并且我的许多模型都具有 UIImage 和 NSData 属性 用于图像和视频 由于将数据直接存储到 CoreData 中并不是一个好主意 因此我构建了一个文件管理器类 该类根据创建的上
  • RapidXML 给出空的 CDATA 节点

    我编写了下面的代码来获取 CDATA 节点值 我得到了节点的名称 但值是空白的 我将解析标志更改为 parse full 但它也不起作用 如果我从 XML 中手动删除 它会给出预期的值 但在解析之前删除它不是一个选项 代码 include
  • Promises - 在 Promise.all 中捕获所有拒绝[重复]

    这个问题在这里已经有答案了 我有这个虚拟代码 var Promise require bluebird function rej1 return new Promise reject new Error rej1 function rej2
  • Bootstrap 导航栏在滚动时折叠

    我在我的项目中使用引导灰度主题 它有一个在滚动时折叠的导航栏 或者如果我转到同一页面上的链接 download 等 问题是当我从其他页面转到锚链接时 导航栏在滚动之前不会折叠 我想解决方案是在java脚本中添加该行 但我真的不知道要添加什么
  • 如何解决OSError:[WinError 2]不可能找到指定文件:'c:\\ python39 \\ Scripts \\ chardetect.exe'

    正如标题中所述 每次我尝试通过 pip 安装某些内容时 在安装结束时都会出现错误 WARNING Failed to write executable trying to use deleteme logic Rolling back un
  • 如何获取JRadioButton的文本值

    我正在用java创建一个项目 我的程序有 80 个 JRadioButtons 我需要获取它们的文本值 现在这些单选按钮已添加到 ButtonGroup 每个单选按钮有 4 个单选按钮 我知道如何通过以下代码从单选按钮获取文本值 radio
  • 如何不屏蔽 GitHub Actions 中的输出?

    作为 GitHub Actions 中 PowerShell 脚本的一部分 我尝试输出一个 json 对象列表 以便稍后作为另一个作业的矩阵重新使用 使用以下命令我将编写输出 Write Host set output name value
  • XSLT 更改元素中的名称空间

    我正在尝试使用以下 xsl 代码更改元素属性的命名空间
  • ZendGdata框架路径设置错误

    你好 我正在使用 ZendGdata 1 12 5 框架在 youtube 上上传视频 我在我的 php 代码中使用了以下内容 path ZendGdata 1 12 5 library set include path get inclu
  • 如何使用 WS-UsernameToken 获取结果摘要?

    我有来自以下文档ONVIF 程序员指南 我目前正在尝试重现结果摘要使用指南中给出的相同条目 这是我的代码 private string GenerateHashedPassword string nonce string created s
  • Cassandra 无法在 Java 10 上启动

    我有一个全新的 Windows 10 家庭版安装 并全新安装了 JDK 10 0 1 这是我访问 JDK 下载站点时 Oracle 推荐的安装版本 我刚刚下载了 Cassandra 3 11 2 解压缩 d 它 并将 bin 目录放在我的类
  • firebase 云函数 API Google Cloud Storage 错误

    随着 Firebase Cloud Functions 的推出 我们正在考虑将当前的一些 Node js 服务器端代码迁移到云函数 我遇到的一个问题是从 GCS 存储桶下载文件到磁盘上的临时文件 然后将其作为附件通过电子邮件发送 使用 ma
  • 在初始 init“firebase”后添加/编辑 pod 文件

    因此 当我将 pod 文件安装到我的项目中时 我忘记添加到 FirebaseDatabase 中 现在我想将其添加到我该如何做 再次执行 pod init 过程会不会把事情弄乱 我的 Pod 文件照片 您应该只添加所需的新 Pod 然后运行
  • Vanilla JS 中具有 Momentum 的水平滚动

    我目前正在开发一个项目 我想要一个水平滑块 我使这个滑块可拖动 并找到了一些代码使其能够随动量滑动 我设法用鼠标滚轮进行水平滚动 但我不知道如何使其与动量效果一起工作 我能怎么做 Lorem ipsum dolor sat amet con
  • 带 Ifelse 条件的 Cbind/Rbind

    这是我正在使用的代码 x lt c Yes No No Yes Maybe y lt t 1 10 z lt t 11 20 rbind data frame ifelse x Yes y z 这会产生 X1L X12L X13L X4L
  • 提升.Interprocess notification() 性能

    我有两个进程 A 和 B 它们应该在 Windows 10 上使用 Boost Interprocess 通过共享内存快速交换数据 我的问题 之间的时间notify all 和wait 似乎很慢 通常为 15 毫秒 我最终编写了一个简单的应
  • 文字分隔符( \Q \E 块内的分隔符)

    我一直在尝试制作一些基于的功能RegEx他们中的大多数人都使用 Q and E作为一些RegEx pattern是用户输入 所以 假设我们正在使用delimiter 并想将其与 该函数将在以下行中构造一些东西 Q E 我不知道为什么 Q E
  • 阻止对 docker 容器的外部访问[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想阻止从外部直接访问 docker 容器 我使用 haproxy 希望只允许访问端口 80 443 我在 iptables 中添加了以下规则 但我仍然可以通过不同的端口访问 doc
  • 在类中使用 boost::numeric::odeint

    对于模拟 我使用 boost numeric odeint 但遇到问题 我在我的一个类的方法中使用集成函数 但出现 没有匹配的函数可用于调用集成 的错误 为了更清楚 这是我的代码的压缩版本 include MotionGeneration