我寫了一個代碼來解決在matlab中使用ode45和ode15s的系統。我想知道是否可以在腳本中使用多個核心(或並行代碼)來提高代碼的速度。是否有可能通過matlab提高ODE解算器的速度? (ode45 ode15s等)
任何人都試過這??
謝謝
我寫了一個代碼來解決在matlab中使用ode45和ode15s的系統。我想知道是否可以在腳本中使用多個核心(或並行代碼)來提高代碼的速度。是否有可能通過matlab提高ODE解算器的速度? (ode45 ode15s等)
任何人都試過這??
謝謝
不,你不能。
所有的數值積分器,ode45
和朋友包括在內,都使用某種形式的迭代方案來解決用戶實現的(耦合的)非線性(偏微分方程)。
迭代方案ode45/15s/..
(計算系統的新狀態)中的每個新步驟都取決於上一步(系統的舊狀態),因此,這些數值積分器無法有效並行化。
你可以做的唯一的加速可能會產生很大的影響是優化你的微分方程的實現。
根據我的經驗,在MATLAB中使用ODE套件解算器的多核心的唯一方法是使用「parfor loop」同時啓動多個計算,單個計算不會更快,但可以啓動許多具有不同的參數,並且在那漫長的等待之後有多個解決方案所以如果你需要多次啓動ODE才能加快你的工作速度。
爲了加速一個ODE函數,使用RelTol和AbsTol設置(更改時間從幾秒到幾小時)也是一個好主意,使用Jpattern選項也可以非常有幫助(我的幾何三角形模式使其運行速度快兩倍)。如果你的微分方程很簡單,可以嘗試先編譯它,或者至少向量化(我曾經在Java中編寫了一部分代碼,然後指出MATLAB使用編譯後的.class文件)。顯然你的解決方案矢量的長度起着重要的作用,所以不要超過幾個。
好的,謝謝Rody。 – Nikko 2013-05-14 12:04:06