我正在嘗試使用 SciPy 模擬一些動態(tài)模型。我有模型定義:def model(y, t, control_signal): dy/dt = some_function_of_time_and_y return dy我定義了要模擬模型的時間戳列表:。我想使用為每個時間戳定義的值來模擬模型。我試圖通過使用:t_list=np.linspace(0, 5, 100)control_signalcontrols = [list_of_values]scipy.integrate.odeint(model, 0, t_list, args=(controls))但是我得到的似乎是我的被解釋為模型的狀態(tài),而不是每個時間戳中的輸入。如何為每個時間戳傳遞值?The size of the array returned by func (5) does not match the size of y0 (1).controlscontrols謝謝!
1 回答

一只名叫tom的貓
TA貢獻1906條經(jīng)驗 獲得超3個贊
在中,您可以將插值模式定義為“零保持”或階數(shù)為0樣條曲線,即分段常數(shù),帶有'kind=“zero”。使用它來定義控件的時間依賴性。scipy.interpolate.interp1d
contfunc = interp1d(t_list,control, kind="zero");
def model(y, t, control_signal):
u = contfunc(t);
dydt = some_function_of_time_and_y_and_u
return dydt
維度錯誤可能是另一個問題。若要對此進行調(diào)試,請使用調(diào)試器(如果可用),或者為輸入和輸出的大小/形狀添加 print 語句。狀態(tài)和導數(shù)應(yīng)該是相同大小的平面數(shù)組。
不要忘記將最大時間步長設(shè)置為小于控件的步長,這應(yīng)該無關(guān)緊要,但可能是奇怪錯誤的來源。
添加回答
舉報
0/150
提交
取消