最近我一直在對一些動力學系統進行模擬,其中所有的動力學量是相互依賴的。爲了模擬我在小時間步長內執行循環的動力學,並在每次迭代中改變了數量。模擬分別在Mathematica和Matlab中完成。 我得到了很好的結果,但由於迭代過程緩慢,模擬可能需要相當長的時間。通常我聽說應該避免像我用過的循環,因爲它們大大減慢了仿真速度。但另一方面,我對如何在小時間步驟內不進行迭代的情況下進行模擬毫無頭緒。因此,我問你:對於一個動態系統,每一個數量必須在超小時間步長內改變,那麼模擬動力學的可能方法是什麼?用MATLAB/Mathematica建模動力學系統
1
A
回答
2
直接的方法是將問題寫成一組微分方程並使用任一系統的ODE求解能力。 MATLAB和Mathematica都有先進的(和可定製的)數值微分方程求解器,它們都支持微分方程中的特殊「事件」,不能用簡單的公式表達(例如, 。
對於Mathematica,首先檢查出NDSolve
,WhenEvent
然後再輸入Advanced Numerical Differential Equation Solving tutorial。
從您的描述中,聽起來像您可能正在使用一種天真的ODE解決方法,如Euler method。使用更好的數字ODE求解技術可以提供顯着的有效加速(不要強迫你使用「超小時間步長」)。
如果性能至關重要,可考慮以低級語言(如C或C++)重新實現仿真,並可能使用Mathematica(LibraryLink)調用該仿真,以便輕鬆進行數據分析和可視化。
相關問題
- 1. 動力學理論模型
- 2. VENSIM TREND系統動力學中的函數
- 3. IF THEN ELSE的嵌套報表系統動力學的NetLogo
- 4. Python中使用itertools的動力系統
- 5. 動力學Gephi
- 6. C++模板力學
- 7. 動力學使用JFugue
- 8. 想學習Microsoft Dynamics CRM。請建議動力學初學者?
- 9. 學習和理解Xcode構建系統
- 10. 創建學生信息系統
- 11. 動力學結構
- 12. 動力學拖放
- 13. CUDA推力推力::系統:: SYSTEM_ERROR在exclusive_scan
- 14. Nhibernate建模系統指導
- 15. 建模通知系統
- 16. C++:壓力Windows系統
- 17. 推力::系統:: SYSTEM_ERROR在transform_reduce
- 18. 用於創建動力學運動的算法的資源
- 19. 用Python建模一個線性系統
- 20. 使用NSDirectoryEnumerator建模文件系統
- 21. 將子系統建模爲用例圖?
- 22. 如何用SPIN建模轉換系統
- 23. 爲JS應用程序構建系統 - 值得付出努力?
- 24. 學習系統設計
- 25. 學生管理系統C++
- 26. Java學生註冊系統
- 27. 機器學習系統
- 28. 學生註冊系統
- 29. 動力學JS - 兒童
- 30. 動力學獲得點擊
愚蠢的問題:你有沒有使用工具箱[** Simulink **](http://www.mathworks.com/products/simulink/)?你熟悉狀態空間模型還是至少簡單的傳遞函數? – thewaywewalk