漂亮的noob问题所以请耐心等待。
我按照这里给出的例子 - > http://www.codeproject.com/Articles/268589/odeint-v2-Solving-ordinary-differential-equations
特别是,我正在研究这个功能:
void lorenz( state_type &x , state_type &dxdt , double t )
{
dxdt[0] = sigma * ( x[1] - x[0] );
dxdt[1] = R * x[0] - x[1] - x[0] * x[2];
dxdt[2] = x[0]*x[1] - b * x[2];
}
在我的情况下,R接受一系列值(带有100个双打的矢量)。
odeint被称为:
integrate_const( runge_kutta4< state_type >() , lorenz , x , 0.0 , 10.0 , dt );
我想为R的每个值做这个。我怎么能做到这一点?我对C ++ / OOP的了解有限,但我愿意学习。
谢谢。
答案 0 :(得分:4)
您可以使用“类”版本,但修改它以便使用您感兴趣的R
值进行初始化。
class lorenz_class {
double R_;
public:
lorenz_class (double r) : R_(r) {}
void operator()( state_type &x , state_type &dxdt , double t ) {
dxdt[0] = sigma * ( x[1] - x[0] );
dxdt[1] = R_ * x[0] - x[1] - x[0] * x[2];
dxdt[2] = x[0]*x[1] - b * x[2];
}
};
然后,迭代向量R
并将值传递给传递给lorenz_class
模板函数的integrate_const
实例。
for (unsigned i = 0; i < myR.size(); ++i) {
lorenz_class lorenz(myR[i]);
integrate_const( runge_kutta4< state_type >() , lorenz , x , 0.0 , 10.0 , dt );
}
答案 1 :(得分:3)
只是一点注意事项:本教程展示了一个非常类似的Lorenz系统参数研究示例:http://headmyshoulder.github.com/odeint-v2/doc/boost_numeric_odeint/tutorial.html。它位于Thrust和VexCL部分,它显示了如何将此问题并行化以在多个CPU或GPU上工作。