我正在使用最优控制方法(轨迹生成和优化)研究无限维优化算法。我想要对此进行轨迹优化的系统是$ \ dot {x}(t)= f(x(t),u(t),t)$形式的非线性系统。换句话说,我有时变非线性输入。
是否可以使用boost :: odeint解决这样的ODE?我没有在文档中找到任何提示,但我可能还没有看到它。
答案 0 :(得分:2)
是的,你可以使用odeint来解决这类问题。显式步进器期望传递给odeint的系统函数(ODE)具有签名
ode( x , dxdt , t );
其中x
是当前状态的输入参数,dxdt
是r.h.s.的输出参数。在ODE中,t
是时间。例如,可以像
typedef std::array< double , 2 > state_type;
struct oscillator
{
double driving_strength;
double dribving_frequency;
void operator()( state_type const &x , state_type &dxdt , double t ) const
{
dxdt[0] = x[1];
dxdt[1] = -x[0] + driving_strength * sin( driving_frequency * t );
}
};
state_type x;
oscillator osc;
// initialize x and osc
runge_kutta4< state_type > stepper;
integrate_const( stepper , osc , x , t_start , t_end , dt );