Использование определения функции odeint


Довольно нуб вопрос, так что, пожалуйста, потерпите меня.

Я следую приведенному здесь примеру--> 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 ограничен, но я готов учиться.

Спасибо.

2 3

2 ответа:

Вы можете использовать версию "class", но изменить ее так, чтобы она была инициализирована значением 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 );
}