1
我正在研究使用最優控制方法(軌跡生成和優化)的無限維優化算法。我想做這個軌跡優化的系統是非線性的,形式爲$ \ dot {x}(t)= f(x(t),u(t),t)$。換句話說,我有時變非線性輸入。具有boost的非線性時變系統輸入:: odeint
是否有可能使用boost :: odeint來解決這樣一個ODE?我沒有在文檔中找到任何提示,但我可能只是沒有看到它。
我正在研究使用最優控制方法(軌跡生成和優化)的無限維優化算法。我想做這個軌跡優化的系統是非線性的,形式爲$ \ dot {x}(t)= f(x(t),u(t),t)$。換句話說,我有時變非線性輸入。具有boost的非線性時變系統輸入:: odeint
是否有可能使用boost :: odeint來解決這樣一個ODE?我沒有在文檔中找到任何提示,但我可能只是沒有看到它。
是的,你可以使用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);