我正在研究使用最优控制方法(轨迹生成和优化)的无限维优化算法。我想对其进行轨迹优化的系统是非线性的,形式为 $\dot{x}(t) = f(x(t), u(t), t)$。换句话说,我有随时间变化的非线性输入。
是否可以使用 boost::odeint 解决这样的 ODE?我在文档中没有找到任何提示,但我可能只是没有看到它。
是的,您可以使用 odeint 来解决此类问题。显式步进器期望您传递给 odeint 的系统函数(ODE)具有签名
ode( x , dxdt , t );
其中x
是当前状态的输入参数,dxdt
是 ODE 的 rhs 的输出参数,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 );