2009-06-03 71 views
4

我使用許多不同的模型和模擬。一些較舊的模型和模擬是用FORTRAN編寫的。其中一些模型已被轉換爲C++,但目前的趨勢是使用MATLAB/SIMULINK創建這些模型。從計算機科學的角度來看,我一直覺得MATLAB/SIMULINK不是一個好的解決方案。你用什麼語言來創建模型和模擬,爲什麼?建模與仿真編程語言

+0

我真的好奇你爲什麼覺得MATLAB/SIMULINK不是很好的建模解決方案。你有沒有具體的原因,你爲什麼不喜歡他們/不覺得他們適用於你的模型? – gnovice 2009-06-03 17:09:36

+0

這可能只是我見過的應用程序,但它們運行速度非常慢,並沒有充分利用可用的計算機資源。 – SchwartzE 2009-06-03 17:11:45

回答

4

我也使用了很多遺留代碼,大部分遺留代碼都在Fortran中。我真的不介意使用Fortran - 所有現代編譯器都允許使用大於舊的和愚蠢的6個字符限制的變量名稱。另外,使用Fortran 95,如果您覺得您對現有代碼庫的修改會受益,則甚至可以執行OOP。

另外,Fortran有非常好的代碼編輯器,對於更專門化的腳本語言並不總是如此。

C++有內存考慮的巨大缺點。現在我已經編程C/C++ 20多年了,我仍然忘記刪除對象並正確填寫析構函數。

最後,如果您要使用Windows,那麼Fortran.NET編譯器(我認爲來自Lahey-Fujitsu?)如果您想將Fortran移動到託管環境。

祝你好運!

7

我總是嘗試使用最好的建模和模擬工具(或庫,如果你喜歡)提供的語言爲我完成這項工作。

而這個問題只能通過考慮你想要實現的模型的來解答。連續(例如ODE),離散(例如StateCharts,Petri網)或組合(即可以用Simulink + StateFlow實現的混合模型)?每種模型都有各種工具。

另一個重要方面是您正在使用的。 Simulink擁有相當廣泛的電子工程,金融或計算生物學庫(儘管其中大多數都包含在其他軟件包中) - 如果您在其中一個領域工作,那麼可能沒有更好的(即完整的,有效的)組件庫。其他商業模擬軟件包也是如此,例如AnyLogic,Arena等。也可能有一些開源模擬工具,這取決於您的建模問題。

最後,您可能更喜歡特定的編程語言而不是另一種語言,並且您可能還有其他要求,例如,對於

  • 優化(模型參數)
  • 驗證
  • 產出分析(統計圖表,統計檢驗)
  • 支持並行和分佈式仿真支持
  • 模型檢測
  • .. 。

所以我目前正在使用Java與衆所周知的優勢 - 相當快速,良好的多線程支持,相對簡單易用等等。但是,如果「相當快」速度不夠快,那麼可能就沒有其他選擇,只能進入一個抽象層次:-)

1

粒子物理學已經轉向C++和python。這不是普遍的,如果不是ROOT的無處不在,可能甚至不會接近。

Root對cint的使用意味着當你用一個新想法時,你需要爲內存管理而煩惱,它的運行編譯的容量允許你有速度,混合模式的能力是非常有用的,綁定對於Python和其他RAD語言而言,它具有很大的靈活性。

在一個非常真實的意義上,這歸結爲roland's point的認可。

4

SIMULA當然!! :-)

2

我從MATLAB中得到的是它能夠讓我快速對算法進行原型設計。通過繪製數據並使用內置的統計函數,我可以真正感受到數據。當嘗試新的東西時,我可以做一些快速和骯髒的事情來獲得一些初步結果,然後返回並清理一些事情來優化我的結果。使用編譯語言,爲了讓仿真運行,還需要做很多工作。使用MATLAB,我花了更多時間思考真正的問題,而不是編譯,鏈接,內存管理等。

但是,有很多問題,MATLAB只是沒有足夠的解決方案。對於大型數據集,使用用戶定義的數據結構的編譯語言幾乎是必要的。

0

您可以使用s-funcuin塊將fortran(c,C++)與matlab連接起來。