Eigen Vector3d作为状态向量与odeint的symplectic_rkn_sb3a_mclachlan

时间:2015-06-23 16:24:48

标签: c++ boost eigen odeint

我通过定义个体"粒子来实现n体模拟"具有影响动态的可变(粒子到粒子,时间无关)属性,然后定义一个"系统"这些粒子作为一个矢量,定义了对它们的各种操作,包括迭代矢量的系统的时间演化:

symplectic_rkn_sb3a_mclachlan <Vector3d> rkn;

class Particle
{
    public: 
        // state.first - position, state.second - velocity
        std::pair <Vector3d, Vector3d> state;
        // other stuff
};

class System
{
        vector <Particle> Particles;
        void x_(const Vector3d &v, Vector3d &dxdt) const 
        { 
                dxdt = v; 
        }

        void v_(const Vector3d &x, Vector3d &dvdt) const 
        { 
                dvdt =  -GradientofPotential(x); }
        }
    public:
        double Integrate(double dt)
        {
                for (Particle it : System::Particles)
                rkn.do_step(std::make_pair(boost::bind(&System::x_, *this, _1, _2),
                                           boost::bind(&System::v_, *this, _1, _2)),
                            it.state, 0, dt);
                // more stuff               
        }
        // other stuff
};

头文件编译得很好但是当我尝试集成系统时,我遇到了this

我看了this并改了:

symplectic_rkn_sb3a_mclachlan <Vector3d> rkn;

为:

symplectic_rkn_sb3a_mclachlan <Vector3d, double, Vector3d, double, vector_space_algebra> rkn;

我遇到this错误。 我做错了什么?

其次,我需要将影响动态的其他参数(如粒子质量,电荷等)输入到函数v_中。我怎么能这样做?

0 个答案:

没有答案