2014-04-09 31 views
1

我正在研究使用最優控制方法(軌跡生成和優化)的無限維優化算法。我想做這個軌跡優化的系統是非線性的,形式爲$ \ dot {x}(t)= f(x(t),u(t),t)$。換句話說,我有時變非線性輸入。具有boost的非線性時變系統輸入:: odeint

是否有可能使用boost :: odeint來解決這樣一個ODE?我沒有在文檔中找到任何提示,但我可能只是沒有看到它。

回答

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);