2014-06-14 109 views
1

最近我一直在對一些動力學系統進行模擬,其中所有的動力學量是相互依賴的。爲了模擬我在小時間步長內執行循環的動力學,並在每次迭代中改變了數量。模擬分別在Mathematica和Matlab中完成。 我得到了很好的結果,但由於迭代過程緩慢,模擬可能需要相當長的時間。通常我聽說應該避免像我用過的循環,因爲它們大大減慢了仿真速度。但另一方面,我對如何在小時間步驟內不進行迭代的情況下進行模擬毫無頭緒。因此,我問你:對於一個動態系統,每一個數量必須在超小時間步長內改變,那麼模擬動力學的可能方法是什麼?用MATLAB/Mathematica建模動力學系統

+0

愚蠢的問題:你有沒有使用工具箱[** Simulink **](http://www.mathworks.com/products/simulink/)?你熟悉狀態空間模型還是至少簡單的傳遞函數? – thewaywewalk

回答

2

直接的方法是將問題寫成一組微分方程並使用任一系統的ODE求解能力。 MATLAB和Mathematica都有先進的(和可定製的)數值微分方程求解器,它們都支持微分方程中的特殊「事件」,不能用簡單的公式表達(例如, 。

對於Mathematica,首先檢查出NDSolve,WhenEvent然後再輸入Advanced Numerical Differential Equation Solving tutorial

從您的描述中,聽起來像您可能正在使用一種天真的ODE解決方法,如Euler method。使用更好的數字ODE求解技術可以提供顯着的有效加速(不要強迫你使用「超小時間步長」)。

如果性能至關重要,可考慮以低級語言(如C或C++)重新實現仿真,並可能使用Mathematica(LibraryLink)調用該仿真,以便輕鬆進行數據分析和可視化。