Re: [問題] 物理的數值模擬適合用C++嗎?
小弟的意見,什麼比較適合你要看你想要的輸出而定
不過,小弟對程式設計經驗有限,以下心得可能會有錯漏之處,還請見諒
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
04/20 10:11, 1F
→
04/20 10:12, , 2F
04/20 10:12, 2F
→
04/20 10:14, , 3F
04/20 10:14, 3F
→
04/20 11:57, , 4F
04/20 11:57, 4F
→
04/20 11:58, , 5F
04/20 11:58, 5F
→
04/20 11:59, , 6F
04/20 11:59, 6F
→
04/20 11:59, , 7F
04/20 11:59, 7F
→
04/20 11:59, , 8F
04/20 11:59, 8F
→
04/20 12:28, , 9F
04/20 12:28, 9F
→
04/20 12:29, , 10F
04/20 12:29, 10F
推
04/20 13:23, , 11F
04/20 13:23, 11F
→
04/20 13:24, , 12F
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
04/20 13:35, 15F
→
04/20 13:35, , 16F
04/20 13:35, 16F
→
04/20 13:52, , 17F
04/20 13:52, 17F
→
04/20 14:39, , 18F
04/20 14:39, 18F
→
04/20 14:40, , 19F
04/20 14:40, 19F
→
04/20 14:40, , 20F
04/20 14:40, 20F
推
04/20 22:01, , 21F
04/20 22:01, 21F
→
04/20 22:29, , 22F
04/20 22:29, 22F
→
04/20 23:16, , 23F
04/20 23:16, 23F
→
04/20 23:53, , 24F
04/20 23:53, 24F
→
04/21 01:49, , 25F
04/21 01:49, 25F
推
04/21 08:42, , 26F
04/21 08:42, 26F
→
04/21 08:43, , 27F
04/21 08:43, 27F
→
04/21 11:10, , 28F
04/21 11:10, 28F
→
04/21 11:10, , 29F
04/21 11:10, 29F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):