作為一個學習流體力學的工科學生,我應該學習哪一種編程語言?

本人工科小碩一枚,平時主要是做一些CFD(計算流體力學)方面的模擬。編程的需求主要是編寫程序處理CFD軟體導出的數據,之前為了方便一直使用matlab作為自己的主力編程語言,但是苦於matlab計算太慢,希望能夠學習一門其它的語言。主要需求:1)便於讀取文件進行數據處理,最好能夠較好的支撐正則表達式;2)能夠做程序界面,主要是以後把之前做的程序做一個界面方便使用。3)運算效率高,本人目前對使用CUDA的GPU編程來做CFD計算比較感興趣,希望所學的語言支持CUDA編程。 我之前還學過一點FORTRAN,本科的時候學過C但是基本上忘差不多了。 希望能給我推薦一門適合我的編程語言(個人比較傾向Python 和C++)。先謝謝了!


如果只是做後處理,推薦Python。

如果希望寫計算代碼,推薦C++和Fortran。


用點庫吧。自己造輪子太浪費

C++系 paralution, Eigen, cublas, magma, boost

Trilinos/Petsc 適合搞性能。

如果要玩cuda的話c++比較適合,不過不要一下就期待多少倍的性能加成。cuda的體系做sparse solver並不是總能取得很亮眼的性能,並且由於單卡顯存限制,要算大體系必然搞mpi+cuda,學起來要花點時間

後處理用python好了,批量數據寫個c++模塊用python做膠水...pycuda/scipy/numpy/等等都方便


推薦JuliaLang

有很多專門為科學計算設計的特性


如果做數值計算C++和Python選擇,選C++。

Python的速度跟matlab是相似的;

界面C++成熟。

C++是個大坑。。。。但是你還是跳進去吧!

流體這塊我不太懂,但是開源有限元OpenSees是C++搞的,現在風生水起


如果編程底子不是太好又想馬上出活,那還是fortran。對於科學計算的原生支持確實不是C/C++能比的。不是C/C++說不好,而是對於非計算機類專業太難了。


推薦Python,讀取文件、正則表達式都很方便,界面程序可以用PyQt,,Python自身運算性能雖然很差,但Python很多庫底層其實是C++、FORTRAN這類最快的語言寫的,Python只不過包裝一下(比如numpy、scipy),所以實際使用性能並不差,


其實可以試試所謂的「有限元」語言,比如freeFEM,底層是c++,保證了計算速度,同時把一些有限元的操作,如劃分網格等,編成內部函數直接調用,當然也可以自己編成實現自己的想法。另外,是開源的,可以自己搞編譯,也能夠通過mpi做並行,事實上在cfd領域很多搞理論和計算方法的都在用,也很容易上手呢!


看到你說要批量處理數據,我非常推薦你用shell+gnuplot,能輸出latex公式的圖標,也能完成批處理,而且學習成本很低,最多三天.


果斷建議 python +Fortran

我情況和你的類似。是做建築工程的有限元,計算規模可能沒你大,但面臨的問題差不多,並且都不是IT專業出身。

說實話,如果編程底子很強那肯定C/C++了,沒啥猶豫!而且你也不會問這問題了。C++現成的計算庫很多,不比Fortran的少;C++這把大刀啥都能幹,計算 界面 資料庫。。。 不用整那麼多種語言 來回折騰,,一站搞齊。

C++要說缺點 就三個字:門檻高!讓C++成為高效的數值計算語言,門檻更高! 應用C++在數值計算,那麼各層面的數值計算「優化技巧」 應該有所了解。 否則,C++直白編譯後的計算效率 會比fortran的無優化編譯慢不少。而這些技巧,恰恰是工程專業出身的同學非常頭疼 並且不感興趣的領域。。。

如果C++不熟悉,又對數值計算有要求,那麼fortran是第一選擇。尤其是for90、03以後的新標準。

--------已有的for代碼資源 可以充分利用;

--------另外現成的擴展庫很豐富(必須呀,fortran就是干這個的);

--------對並行計算先天的支持(這個如果用c++實現,必須高手才搞得來。。);

--------計算性能的優化,這對非IT專業人員 特別受用(工程人員沒見到幾個 對程序特精通 對代碼 編譯選項反覆優化的。。)只要程序結構不是太糟糕,計算效率絕對的沒問題,,,,

所以你的需求選擇fortan,絕對不會錯。

Python比較多面,界面沒問題,處理文本也高效,資料庫也ok,計算也ok(這個計算指得是numpy scipy這些庫,不是py原生內部函數。原生的我試過,大矩陣求解要慢50~100倍)。

--------就說計算部分吧,numpy矩陣這部分的效率很高,和fortran在IVF上特別優化編譯的幾乎沒差別! 比for在G95/GFortran這些開源編譯器上的優化編譯還要快得多。.可見numpy的效率是不用質疑的。它本身就是c/fortran 並特別優化編譯出來的,無論是演算法 還是編譯技巧。。。都很優秀!

---------換句話說,演算法中能用numpy的盡量用numpy!這是一條保證效率的鐵律。 絕大多數情況下,它要比你自己用fortran造的輪子(dll/pyd) 要快; 比你用C++造的輪子要更加的快;比Matlab這類准編程工具 更是要快幾十倍。。。對於工程人員,我敢保證90%的情況都是如此。

--------另外,如有fortran的歷史代碼庫,需要供py調用,那麼f2py是個很好的方案。直接弄成pyd格式的動態庫。這樣py和fortran組合,有較大的靈活性。。

--------至於界面,py相當的方便。自帶就有Tkinter就不錯,大家都介紹過。。要求高的話,第三方選擇也多的很。不過,一般工程應用Tkinter 和Wxpython我覺得夠用了。

--------這幾條,pyhton比C# / VB.net..更適合工程人員「手邊靈活應用」的特點。不管問題大小,隨時調用解決,這也是腳本的優勢。


c++ 或者matlab


matlab的gui工具好方便啊,不過運算速度太坑了,c++做界面有類似的工具沒有,visual studio2008這個軟體能做到不能,單位不能裝其他軟體


看到有人推薦Python我就安心了。


計算用C/C++,因為要確保運算效率。

畫圖、讀數據、作分析用Python或MATLAB。


還是Fortran吧,對部分和整個矩陣的操作不是其他語言何以比的。CFD對速度要求很高,一般要求並行才能滿足,最近幾年Fortran發展緩慢但是也在進步,可以看看在Fortran2008的標準中引入的coarray技術。


推薦閱讀:

LBM (Lattice Bolzmann Method 格子波茲曼)為什麼這麼流行?如何用它模擬進入速度隨時間變化的管道流體?
湍流領域還有什麼未解決的問題?
水從高處流到低處靜止下來,原有的勢能去哪裡了?
為什麼會出現小水球漂浮在水面上情況?
如果流道很窄,即使雷諾數超過湍流層流臨界值,會有湍流產生嗎,換言之,層流湍流只與雷諾數有關嗎?

TAG:編程語言 | Python | 流體力學 | 計算流體力學CFD | C |