1

我正在研究使用最优控制方法(轨迹生成和优化)的无限维优化算法。我想对其进行轨迹优化的系统是非线性的,形式为 $\dot{x}(t) = f(x(t), u(t), t)$。换句话说,我有随时间变化的非线性输入。

是否可以使用 boost::odeint 解决这样的 ODE?我在文档中没有找到任何提示,但我可能只是没有看到它。

4

1 回答 1

2

是的,您可以使用 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 );
于 2014-04-09T21:32:49.817 回答