2016-05-31 92 views
0

我在懷疑如何使用ode45,因爲我知道它使用內部變量步長。例如,在我的特定情況下,我有一個ODE模型,我使用5分鐘的採樣時間。因此,在我的主要模擬迴路我有以下行通過使用ode45解決它,以獲得我的模型的輸出:Matlab ode45內部步驟

[T,X] = ode45(@(t,x) model(t,x,u,data),[t t+scenario.Ts],x0); 

u是模型的輸入,data是帶有參數的結構,x0是當前時間步的初始條件和[t t+scenario.Ts]是初始和最終時間。我的疑問是tt+scenario.Tsode45 -solver使用可變時間步驟,因此我介紹我的輸入操作u的方式可能會受到影響。因此,我瞭解到,特定輸入u的值在[t t+scenario.Ts]之間的內部時間步長內保持不變。然後,如果我有例如助焊劑,即水進入罐中,則時間步驟對此具有直接影響u

讓我再舉一個例子來解釋一下。如果超過[t t+scenario.Ts]我知道u(1) = 10。那麼我應該使用的實際輸入是u(1)=10/(# of time steps between [t0 tend])。但是,由於內部步驟是可變的,我必須使用哪個輸入?

我希望你明白我的問題,可以幫助我。

+0

@ykaragol如果在[建議編輯](http://stackoverflow.com/review/suggested-edits/12534423)中格式化代碼,請在下次格式化所有代碼。否則,你的編輯可能會被拒絕,因爲沒有任何改進... – Matt

+0

很難說沒有看到'模型'(或一個代表性的可運行示例)的代碼。它看起來像你可能是你試圖改變參數的時間。您可能正在創建一個僵硬的系統,這可能會導致效率低下甚至不正確的結果。你的'model'函數不應該是時間步數的函數。 'u'應該是't'或者你的狀態向量'x'的函數。 – horchler

回答

0

您應該制定輸入,使其獨立於時間離散。如果你的方程是連續時間的,那麼這應該不成問題。如果控制變量不是常量,那麼應該使其明確依賴於t並編寫函數u(t)

如果我的回答不足以幫助您解決問題,請添加更多關於您的應用程序的詳細信息,尤其是您正在模擬的動態模型。然後我們可以進一步幫助你。