我通过定义个体"粒子来实现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_中。我怎么能这样做?