Re: [問題] 物理的數值模擬適合用C++嗎?

看板C_and_CPP作者 (AM2)時間13年前 (2012/04/20 01:51), 編輯推噓4(4025)
留言29則, 14人參與, 最新討論串2/3 (看更多)
小弟的意見,什麼比較適合你要看你想要的輸出而定 不過,小弟對程式設計經驗有限,以下心得可能會有錯漏之處,還請見諒 C/C++最大的優勢是有機會寫出計算速度最快的程式 缺點是若計算完的結果要輸出的漂漂亮亮的需要再花一些effort 個人的意見, 假設你對於要怎麼算已經很清楚很確定 要計算出的結果只是幾個數字,沒有想要弄成可以轉來轉去拉來拉去操縱的圖, 而得出這幾個數字又"很"需要重複迴圈的計算量的話 (這裡的"很"有點難定義... 之前看過物理模擬分割成幾部分在N台電腦各跑N天的) 強烈建議你考慮C/C++,因為個人猜測他效率是最佳的 (很多程式都以C為底) 個人經驗,加法、if、mod這三個計算的組合跑迴圈暴力算數學問題 高三時在我家電腦上自己寫的VB程式隨便就要算過夜甚至超過一天 大一的時候在課堂上同樣的計算邏輯(除了開檔、讀檔)改寫成C++只花了不到一分鐘就算 完 那時我當場就被shock到了 如果你要做的計算方式還不太確定, 或者要算的東西希望能較華麗的輸出 例如是個三度空間中的圖,軸想轉來轉去或放大縮小拉來拉去來觀察 又或者你的計算過程中會很大量的用到各種特殊函數、微積分等數學工具 建議你考慮matlab,它內建的plot功能很強大 事實上他根本就是為了數學運算作圖而設計的軟體 直接使用它內建的各種數學功能可以省下你自己寫/上網找的功夫 matlab是直譯式語言,和下面的python都有容易即寫即試的特性 各種變數的監看環境也不錯 開發程式的方便度不錯 個人還玩過python,感想是介於上述兩者之間 以程式語言的容易學習性來說大勝C/C++(也許是我已經學過C了吧) 但是很多時候沒有pointer可以用真的有點煩 (你一定還不知道pointer是啥...... 在板上或C板/pointer就可以感覺到他的威力和有點複雜性, C想要算的有效率大概難以避免的要用到它) 而且python中對結構變數的call by value/reference初學者(我)常常弄不清楚 但是它大部分的語法很直覺,且list、dictionary的設計真的非常有用 在資料結構這部分可以省下很多功夫 而且python有一些不錯的module可以import來在各方面幫助你(和C的include差不多) 無論是數學計算相關或輸出相關 計算的部分你估狗照需求找比較實際吧 輸出的部分我推薦matplotlib,覺得它挺好用的 python最重要的特點是它是直譯式語言 也就是說不用整個程式寫完、compile完才能跑 所以可以寫一部份就run起來看看對不對,然後一直往下寫 對開發很方便 不過python的GUI好像不容易寫得很"即時",我常常都弄得頓頓的...... 我知道很多物理的模擬程式會用fortran寫,但我沒這方面經驗 我猜想你學fortran的話會比較容易找到"同一主題"前人現成的成果 這點大概是最大的優勢吧 不過現在就算是在學界fortran似乎也在往下(只是感覺),用的人漸少 如果你要算的東西非常非常計算demanding,且能切開平行跑 而你又不可能去找超級電腦或工作站跑程式 一個可能的做法是去學CUDA,天體、原子第一原理計算等等的物理模擬我看過人用它 大致就是利用Nvidia的高階顯卡強大的計算能力來計算 如果你的問題適合它的特性,程式又寫得好, 動輒能跑得比用CPU計算快上百倍,而且硬體又相對很便宜 這語言我不會,詳細也請你估狗 小弟所知有限,希望這些有幫到你 如果有錯誤也請板上任何一位大大盡量指證 小弟也能更正正確的觀念 ※ 引述《famayo (砝碼)》之銘言: : 因為最近開始想學程式語言 : 但是苦不知該從哪種語言開始下手 : 於是就想到了最耳熟能想的C++ : 但是又聽到有些人說C++ 是比較舊的語言 : (我也不知有什麼是新的= =) : 因此我想問問 C++能做的事情應該很多吧? : 譬如說現在有哪些系統是用C++開發的呢 : 臉書 無名小站是嗎? : 還有就是 假設我要做物理的數值模擬 : 用C++適當嗎? 因為覺得它應該比fortran matlab來得多用途 : 如果C++不是各位最推薦的語言 : 那麼哪總才最推薦呢 (數值模擬為主 搞不好還有其他需求) : 感謝各位解惑 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.39.60.73

04/20 10:11, , 1F
推 CUDA 我做模擬心臟的 改寫成 CUDA 快了至少 100 倍
04/20 10:11, 1F

04/20 10:12, , 2F
還沒用到 share memory 喔~兩年畢業變成兩禮拜畢業 XDD
04/20 10:12, 2F

04/20 10:14, , 3F
matlab好像後來也支援cuda
04/20 10:14, 3F

04/20 11:57, , 4F
matlab的數學還有可能比自己刻快喔XD 不過很貴是真的
04/20 11:57, 4F

04/20 11:58, , 5F
C(++)快歸快,可是要自己處理一些不是很重要的東西
04/20 11:58, 5F

04/20 11:59, , 6F
要用matlab就要用矩陣運算,在矩陣運算加速很多
04/20 11:59, 6F

04/20 11:59, , 7F
將矩陣改成for雖然一樣能算,但就是慢很多
04/20 11:59, 7F

04/20 11:59, , 8F
是說matlab有提供C library,也可以試試看
04/20 11:59, 8F

04/20 12:28, , 9F
我看網頁說Octave就跟matlab功能相同
04/20 12:28, 9F

04/20 12:29, , 10F
為什麼Octave不比matlab出名
04/20 12:29, 10F

04/20 13:23, , 11F
感謝原po 我除了算第一原理 也需要處理一些金融的數據
04/20 13:23, 11F

04/20 13:24, , 12F
但其實第一原理已經有vasp這套裝軟體可以算
04/20 13:24, 12F

04/20 13:24, , 13F
我大概只會做它輸出的數據處裡
04/20 13:24, 13F

04/20 13:24, , 14F
主要也是想學以後可以有別的用處的語言
04/20 13:24, 14F

04/20 13:35, , 15F
沒聽過octave不過matlab出名是因為他很多寫好的fun
04/20 13:35, 15F

04/20 13:35, , 16F
幾乎你想的到的matlab都已經有現成的能用
04/20 13:35, 16F

04/20 13:52, , 17F
我的潛見是,那麼愛快...就用組語吧,cc
04/20 13:52, 17F

04/20 14:39, , 18F
CUDA不能算是一種語言 因為他要與其他語言綁定
04/20 14:39, 18F

04/20 14:40, , 19F
概念上,CUDA是XX語言的延申
04/20 14:40, 19F

04/20 14:40, , 20F
XX可以為C/C++,fortran,JAVA...etc
04/20 14:40, 20F

04/20 22:01, , 21F
推matlab的C library,計算矩陣複數超快
04/20 22:01, 21F

04/20 22:29, , 22F
Python 只有 call by reference, 不過這離題了...
04/20 22:29, 22F

04/20 23:16, , 23F
<~之所以聽過Octave是因為matlab要$$
04/20 23:16, 23F

04/20 23:53, , 24F
python 是 pass by value ...
04/20 23:53, 24F

04/21 01:49, , 25F
octave真的比較慢XD 不過應該會越來越好
04/21 01:49, 25F

04/21 08:42, , 26F
把 octave link MKL 或 ACML 就沒差多少了
04/21 08:42, 26F

04/21 08:43, , 27F
MATLAB 快很多是因為他都幫你 link 好
04/21 08:43, 27F

04/21 11:10, , 28F
Matlab比較有名是一定的,這就像AutoCAD很有名一樣
04/21 11:10, 28F

04/21 11:10, , 29F
(有名到大家都在當土海盜)
04/21 11:10, 29F
文章代碼(AID): #1FaC4L9c (C_and_CPP)
文章代碼(AID): #1FaC4L9c (C_and_CPP)