1

我在一个名为 C++ 的文件夹中下载了 odeint-v2。我创建了一个名为 HARMONIC.cpp 的新 cpp 文件。

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

using namespace boost::numeric::odeint;

std::vector<double> state_type;
double gam = 0.15;

void harmonic_oscillator( const state_type &x , state_type &dxdt , const double )
{
    dxdt[0] = x[1];
    dxdt[1] = -x[0] - gam*x[1];
}

int main(int, char**)
{
    using namespace std;
    using namespace boost::numeric::odeint;

    state_type x(2);
    x[0] = 1.0;
    x[1] = 0.0;


    size_t steps = integrate( harmonic_oscillator, x , 0.0 , 10.0 , 0.1 );
}

在 ubuntu g++ HARMONIC.cpp -o har.output 中编译时

错误如下`

HARMONIC.cpp:4:36:致命错误:boost/numeric/odeint.hpp:没有此类文件或目录编译终止。

但是我在同一个文件夹中下载了所有 odeint-v2。

请帮我

4

1 回答 1

1

这里有许多不同的问题。

  1. 您似乎对图书馆的功能以及从何处获取它感到困惑。到目前为止,最简单的方法是通过sudo apt-get install libboost-all-dev.

  2. 您复制的示例缺少关键的typedef; elsestate_type没有定义。这已得到修复。

  3. 我在最后添加了一个简单的“完成”声明。

  4. 有了这个,一切都正常了。

演示:

/tmp$ g++ -o boost_ode boost_ode.cpp 
/tmp$ ./boost_ode 
Done.
/tmp$ 

修复后的代码如下。

/tmp$ cat boost_ode.cpp 
#include <iostream>
#include <vector>
#include <boost/numeric/odeint.hpp>

using namespace boost::numeric::odeint;

typedef std::vector<double> state_type;
double gam = 0.15;

void harmonic_oscillator( const state_type &x , state_type &dxdt , const double )
{
    dxdt[0] = x[1];
    dxdt[1] = -x[0] - gam*x[1];
}

int main(int, char**)
{
    using namespace std;
    using namespace boost::numeric::odeint;

    state_type x(2);
    x[0] = 1.0;
    x[1] = 0.0;


    size_t steps = integrate( harmonic_oscillator, x , 0.0 , 10.0 , 0.1 );

    std::cout << "Done." << std::endl;
}
/tmp$ 
于 2014-08-25T17:52:43.833 回答