我在 Mint 12 上运行 g++ 4.7,boost 1.55。我正在尝试使用 odeint 解决一个简单的 ode 二维系统 - 遵循此处的 1d 示例:1d。1d 示例在答案的原始版本和修改版本中都可以正常编译。现在,如果我想要一个 2d 系统并且我使用 double[2] 东西不起作用:
#include <iostream>
#include <boost/numeric/odeint.hpp>
using namespace std;
using namespace boost::numeric::odeint;
void rhs( const double *x, double *dxdt, const double t )
{
dxdt[0] = 3.0/(2.0*t*t) + x[0]/(2.0*t);
dxdt[1] = 3.0/(2.0*t*t) + x[1]/(2.0*t);
}
void write_cout( double *x, const double t )
{
cout << t << '\t' << x[0] << '\t' << 2*x[1] << endl;
}
typedef runge_kutta_cash_karp54< double[2] > stepper_type;
int main()
{
double x[2] = {0.0,0.0};
integrate_adaptive( make_controlled( 1E-12, 1E-12, stepper_type() ), rhs, x, 1.0, 10.0, 0.1, write_cout );
}
错误消息是一团糟,但以:
/usr/include/boost/numeric/odeint/algebra/range_algebra.hpp:129:47:错误:函数返回一个数组
数组 double[2] 有问题吗?我应该如何解决它?也许使用向量?顺便说一句,我尝试同时使用
typedef runge_kutta_cash_karp54< double > stepper_type;
typedef runge_kutta_cash_karp54< double , double , double , double , vector_space_algebra > stepper_type;
正如 1d 答案中所建议的那样,但无济于事。我还应该提到,在具有较旧 boost(不记得哪个版本)的旧机器上,所有编译都没有问题。感谢您的任何建议!