gpt4 book ai didi

c++ - odeint 在迭代时重置对象

转载 作者:搜寻专家 更新时间:2023-10-31 02:24:28 27 4
gpt4 key购买 nike

运行以下代码:

#include <iostream>
#include <boost/numeric/odeint.hpp>

using namespace std;
using namespace boost::numeric::odeint;

class CSystem
{
private:
int counter=0;
public:

void operator() ( const double &x , double &dxdt , const double t)
{
double mat_A=-1;
double mat_B=1;

dxdt=mat_A*x+mat_B*1;

cout<<"counter: "<<counter<<endl;
counter++; // seems it does not apply to the rest of the iterations appropriately
}

void solve()
{
double x;
x = 0.0;
typedef runge_kutta_dopri5<double> stepper_type;
std::function<void(const double &,const double)> my_observer = [&](const double &x,const double t){/* do nothing*/};
integrate_adaptive(make_controlled(1E-10,1E-10,stepper_type()),
*this,x,0.0,3.0,0.1,my_observer);
}

};

int main()
{
CSystem sys;
sys.solve();
return 0;
}

我希望 counter 从 0 开始计数并且 cout 生成以下输出:

0
1
2
3
4
5
6
7
8
9
10
11
...

当我得到其他东西时:

counter: 0
counter: 0
counter: 1
counter: 2
counter: 3
counter: 4
counter: 5
counter: 0
counter: 1
counter: 2
counter: 3
counter: 4
counter: 5
counter: 0
counter: 1
counter: 2
counter: 3
...

什么会重置计数器?看起来很不错!

修复该问题的正确方法是什么?我宁愿避免使用外部对象。

最佳答案

您对 *this 的使用创建了您的 CSystem 对象的拷贝,该拷贝可能会被进一步复制。

我认为您应该将该参数更改为 std::ref(*this)

关于c++ - odeint 在迭代时重置对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28004411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com