具有boost::odeint的非线性时变系统输入

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

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


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

是的,您可以使用odeint解决此类问题。显式步进器期望传递给odeint的系统函数(ODE)具有签名

ode( x , dxdt , t );
其中,
x
是当前状态的输入参数,
dxdt
是ODE r.h.s.的输出参数,
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 );
typedef std::arraystate\u type;
结构振荡器
{
双驱动力;
双驱动频率;
void运算符()(state\u type常量&x,state\u type&dxdt,双t)常量
{
dxdt[0]=x[1];
dxdt[1]=-x[0]+驱动强度*sin(驱动频率*t);
}
};
状态_型x;
振荡器振荡器;
//初始化x和osc
runge_kutta4<状态类型>步进机;
积分常数(步进器、osc、x、t_开始、t_结束、dt);