Для моделирования я использую boost::numeric::odeint, но у меня возникла проблема. Я использую функцию интеграции внутри метода одного из моих классов, и у меня возникает ошибка «нет соответствующей функции для вызова интеграции». Чтобы было понятнее, вот сжатая версия моего кода:
#include "MotionGeneration.h"
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
typedef boost::array< double , 10 > state_type;
MotionGeneration::MotionGeneration(some_data) {
//My constructor.
//some_data assignment.
}
MotionGeneration::~MotionGeneration() {
}
double MotionGeneration::getError(double time) {
//error calculation.
}
void MotionGeneration::execute(){
state_type init_conf = { 0, -1.5708, 0, 0, 0, -1.5708, 0, -1.5708, 0, 0.5};
boost::numeric::odeint::integrate(motionScheme, init_conf, 0.0, 1.0, 0.05, plot);
}
void MotionGeneration::motionScheme(const state_type &q, state_type &q_dot, double t){
//Some long code goes here. Also I have some calls to some methods of this class. for example:
double err = getError(t);
}
void MotionGeneration::plot(const state_type &q , const double t){
//some data pfintf here.
}
Обратите внимание, что ни один из моих методов не является статическим, и на самом деле я не могу использовать статический метод. Когда я создаю проект, у меня есть следующая ошибка:
error: no matching function for call to `integrate(<unknown type>, state_type&, double, double, double, <unknown type>)'
Я думаю, что проблема заключается в том, что системная функция работает как метод класса, но я не знаю, как справиться с этой ситуацией.