C++ Can';我不能让BOOST odeint和Adams Bashforth Moulton一起工作

C++ Can';我不能让BOOST odeint和Adams Bashforth Moulton一起工作,c++,boost,C++,Boost,我在从BOOST odeint库获取Adams Bashforth Moulton方法时遇到了一些问题。我已经成功地使用了Bulirsch Stoer,但出于某种原因,亚当斯·巴什福思·莫尔顿(Adams Bashforth Moulton)只要我尝试使用大于2的订单,就会返回nan。如果我使用顺序1或2,我会得到双倍的正确答案。我已将代码缩减为: #include <iostream> #include <boost/array.hpp> #include <bo

我在从BOOST odeint库获取Adams Bashforth Moulton方法时遇到了一些问题。我已经成功地使用了Bulirsch Stoer,但出于某种原因,亚当斯·巴什福思·莫尔顿(Adams Bashforth Moulton)只要我尝试使用大于2的订单,就会返回nan。如果我使用顺序1或2,我会得到双倍的正确答案。我已将代码缩减为:

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


typedef boost::array<long double, 2> state_type;
using namespace boost::numeric::odeint;

class Boost_odeint_rhs{
    public:
        Boost_odeint_rhs(){
        }

        void operator() (const state_type &x, state_type &dxdt, const double t)
        {
            dxdt[0] = 1;
            dxdt[1] = 2;
        }
};


int main() {

    std::cout << "using boost "
              << BOOST_VERSION / 100000 << "."
              << BOOST_VERSION / 100 % 1000 << "."
              << BOOST_VERSION % 100 << std::endl;

    std::cout << "integrating vector [1,2] over (0,1)" << std::endl;

    Boost_odeint_rhs rhs;
    state_type Bint;
    Bint[0] = 0.0;
    Bint[1] = 0.0;

    adams_bashforth_moulton< 2 , state_type > stepper;
    //bulirsch_stoer< state_type > stepper( 1e-5 , 0.0 , 0.0 , 1.0 );

    integrate_adaptive( stepper , rhs , Bint , 0.0 , 1.0 , 1e-3 );

    std::cout << "returned integral = " << Bint[0] << " "<< Bint[1] << std::endl;
}
#包括
#包括
#包括
#包括
typedef boost::数组状态_类型;
使用名称空间boost::numeric::odeint;
等级提升\u odeint\u rhs{
公众:
Boost_odeint_rhs(){
}
void运算符()
{
dxdt[0]=1;
dxdt[1]=2;
}
};
int main(){

std::cout看起来像一个奇怪的错误。当我改变

typedef boost::array< long double , 2 > state_type
typedef boost::数组状态类型

typedef boost::数组状态类型
这是可行的。但这当然不是一个真正的解决方案,但也许这是你的一个解决办法。尽管如此,我正在努力找到问题并提供解决方案


更新:这是odeint中的一个bug。但是它已经被修复,并且将在下一个版本的boost中提供修复(应该很快出现)。您也可以使用odeint中的当前版本。

这样做了,它起了作用,谢谢!当您说下一个版本的boost时,您是指1.56(目前处于beta测试阶段)或者之后的那一个是的,我的意思是1.56。它应该很快就会出来。Boost 1.56现在出来了。
typedef boost::array< double , 2 > state_type