Re: [問題] 數值計算的軟體 - 土木
By Elvira
at 2009-04-13T01:45
at 2009-04-13T01:45
Table of Contents
※ [本文轉錄自 PhD 看板]
作者: MHG (MPS model) 站內: PhD
標題: Re: [問題] 數值計算的軟體
時間: Sun Apr 12 18:00:03 2009
※ 引述《ForHonor (I'm not afraid)》之銘言:
: 大家好
: 就我所知常用來做研究的工具有
: C語言 Fortran Matlab Mathematica
: 有沒有大大用過這其中的好幾個可以給個比較
: 假設以
: 人性化(方便性) 運算速度 繪圖能力 多變性
: 這幾個點為討論出發點
小弟專長是作數值運算的~以發展數值方法為主。
所以對於程式語言來說算是較為常用的!
根據原po所列的工具,小弟有使用過用於數值計算的問題,如下所列:
Fortran, C, C++, Matlab, Mathematica, Maple
下列所述都是個人使用的經驗!
實際的速度還是得依照個人使用的語言習慣與計算環境較有關係!
如有錯誤的話煩請各位大大指證!
當然!小弟從學程式語言以來所學主要的開發工具是以Fortran為主~
所以經常混搭Fortran與C或是Fortran與Matlab作為使用~
以下的的討論其OS環境,小弟就簡單以WinXP與Linux為主~
其他的BSD或是其他的Unix, 就不題了~基本上有些計算效率而言~Linux較快一點!
但相同的codes在其他的UNIX環境下都跟Linux差異不大~
1. Fortran
一般而言~從名字上就可以知道Fortran它的功用了!
由於小弟不擅長繪圖功能的程式撰寫,所以在此以討論數值計算的速度為主。
而繪圖的部分,Fortran 90之後的功能提升很多也可以撰寫繪圖程式用於I/O了。
但是小弟實際上還是會用其他軟體輔助繪圖的部分,
以Tecplot為主,並以Grapher、Surfer為輔大致上2D 3D的圖大概都還可以表達~
有時會搭用Matlab來作後端輸出的視覺化表達。
而其他軟體在搭配fortran上的表達也算還ok啦!
(但Fortran 90以上基本也支援OpenGL~可以支援不少科學繪圖了!)
就計算而言,Fortran的Subroutine和Function可用性很高,
在計算上著名的書籍Numerical Recipes早期就以fortran 77出版了~
而支援Fortran的語言函式或是副程式也非常多(C, C++, Matlab...etc.),
這個關係到使用fortran這個工具時~你也可以使用其他語言的工具,
進而降低研發程式的難度與時間。
在工作站上的計算小弟目前也有使用Fortran,使用的OS環境為Linux~
由於先前小弟group並未購買IMSL用於工作站上,所以此時很多小問題得依賴
世界各地專家們所釋出的函式或是副程式來解決,只要小心根據定義使用
Fortran在銜接這些solutions的相容性非常高的!
So, 人性化(方便性)、運算速度可謂極佳!
繪圖能力則屬尚可(我得強調!這是因為我太弱了XD)
多變性我個人評為佳!
(雖然90以上的語法已經可以支指標、援物件導向...etc.
但與C++比起物件導向來看我想還有些距離吧!)
2. C語言
這是小弟接觸以來的經驗,一般來看,C可以算是早期泛用型語言了吧!
但是C與Fortran比起,Fortran可以作的C都可以作!
然而Fortran是以撰寫數值程式為專門取向的工具,這點是無庸置疑的~
故小弟個人認為以C來寫數值程式比起Fortran先天上並無大的優勢!
以眾多前人所釋出的函式或是副程式寶藏來看...
C的資源可謂是最豐富的吧!
而且,C與FORTRAN的subroutine或functions連結是非常容易且多樣的!
著名的劍橋數值菜單Numerical Recipes也有C的版本~XD
再者!許多著名的大型程式之撰寫(UMPACK, SuperLU, FFTW...etc.)
也是由C撰寫的!真是可為寶藏含量極為豐富的語言啊!XD
在工作站上C的使用,比起Fortran而言算是簡易很多了!
而速度上則會因為程式設計者的習慣而有差異!
基本綜觀以同方法解同問題但是用不同語言來比較的話!我想是差異不大的!
So, 人性化(方便性)與運算速度可謂極佳,繪圖能力由於龐大寶藏之故也可謂極佳
多變性來看還是受限於語法本身,比Fortran90略微單調,但也算佳!
3. C++
C++的部分小弟使用不是很多!煩請大大幫忙簡述這項工具的威力程度了!
C++是C的延伸(小弟個人觀感),他既可已接收前人發展C的龐大資源
又可以超越C做出物件導向,
但是C++在與Fortran上的連結卻變的困難許多!
不過小弟覺得無妨!因為C的資源對於一般程設者大概就夠用了~
更何況到處都有得討論~XD
附帶一題的是Numerical Recipes也有出版C++版本~:p
在工作站上的使用上~C++似乎有著一些語法的優勢~
在某些平行的計算環境上~似乎蠻多人使用C++作為開發的工具~
(Open MP之類的!平行計算的部份小弟並無實際經驗!煩請各位大大補充了!)
So, 人性化(方便性)則因為可接收C的大寶藏(有些時候需要改寫)個人判斷為佳
計算速度因小弟個人使用之故無法做出最好的評斷!
繪圖能力由於龐大寶藏之故也可謂極佳!
而多變性來看是極佳!
4. Matlab
呵...基本上小弟不完全認為Matlab算是個"程式語言"...
但是它有許多好用的tool box!對於繪圖而言他可以算是天生的強項啊~
但是它的計算速度卻相對於C或是Fortran卻慢很多!尤其是迴圈的部分!
針對它在與C或是Fortran的連結來觀察,相容性很高!
所以大致上可以將需要加速的部分丟給Fortran或是C來處理~
而Matlab本身的資源也算是不錯!除了專業的Tool box以外~
連接C與Fortran的資源也可算是可以接受的了~
(C++與Matlab連結的的狀況,小弟不明瞭煩請能人補充了!)
至於資源的部份來看~Matlab在網路上的資源也漸漸的流行起來!
可以想見未來的資源也會越來越多!
就使用上而言,他不太嚴謹,也因此方便了許多!XD
工作站上的計算則是需要for Linux的版本~使用方法差異不大~
Matlab作大量運算的效能來還是無法與C/C++或是Fortran比擬~
So, 人性化(方便性)可謂極佳!與運算速度則只能說尚可了!
繪圖能力由於Tool box之故也可謂極佳!
多變性來看還是屬於尚可的階段~
5. Mathematica與Maple
嗯!他不是程式語言!執行速度也不太快!
畫圖的部粉也只能說是普普!(有許多軟體也能做到)
但是他的特殊功能卻是其他軟體無法比擬的!
例如:微分、積分、特殊函數...etc.
通常在數值分析前段我會使用它來協助數學上的驗算~
另外~~在精度上的部份這類工具有著一些的優勢~
例如超越雙精度的數值計算或是大數運算~
雖然程式語言都還可以操作~但是沒有這類工具來的簡便~
至於他們的資源只能說不算太多了!而跟其他程式的結合似乎還不多見!(請能人補充!)
用來作大量計算的話我想是頗為困難的吧!(若有誤請能人指證~)
So, 人性化(方便性)可謂尚可!與運算速度可謂不佳!
繪圖能力可謂尚可!多變性來看算是不佳~
綜觀1~5.....大概是台灣市面上極為常見的幾種數值工具了~
但是基本上我還是得說明一下!
工具只是工具!它們會因使用者的不同用法而有著效率上的差異~
個人認為,學熟其中的一種程式語言,搭配使用其他的資源,用來解決問題即可!
若真正講究計算效率,倒不如把演算法的細節先搞定,
再交給真正的程式設計人員去操刀~
例如:我用有限體積法(FVM)去分析3D大規模不規則區域的黏性流場~
目的是藉由數值方法分析這個計算區域的物理現象~
看到這問題我個人第一個感想是:這是個物理問題!數值程式只是工具~
就算我用數值菜單的CG解法去求解矩陣,還是沒辦法和商業軟體比快!
因為這個例子的目標並不是在研發新型快速的矩陣解法~而流場的物理現象才重點!
也許有人會講~那與其這樣為何不用LU分解就好?
是的!因為傳統LU分解的速度可能會讓我多好幾年才畢業!
工具只要夠用即可!要更好的效率要付出更多的的代價~只有自己能去衡量輕重~
呵~以上是小弟的粗略看法!
--
作者: MHG (MPS model) 站內: PhD
標題: Re: [問題] 數值計算的軟體
時間: Sun Apr 12 18:00:03 2009
※ 引述《ForHonor (I'm not afraid)》之銘言:
: 大家好
: 就我所知常用來做研究的工具有
: C語言 Fortran Matlab Mathematica
: 有沒有大大用過這其中的好幾個可以給個比較
: 假設以
: 人性化(方便性) 運算速度 繪圖能力 多變性
: 這幾個點為討論出發點
小弟專長是作數值運算的~以發展數值方法為主。
所以對於程式語言來說算是較為常用的!
根據原po所列的工具,小弟有使用過用於數值計算的問題,如下所列:
Fortran, C, C++, Matlab, Mathematica, Maple
下列所述都是個人使用的經驗!
實際的速度還是得依照個人使用的語言習慣與計算環境較有關係!
如有錯誤的話煩請各位大大指證!
當然!小弟從學程式語言以來所學主要的開發工具是以Fortran為主~
所以經常混搭Fortran與C或是Fortran與Matlab作為使用~
以下的的討論其OS環境,小弟就簡單以WinXP與Linux為主~
其他的BSD或是其他的Unix, 就不題了~基本上有些計算效率而言~Linux較快一點!
但相同的codes在其他的UNIX環境下都跟Linux差異不大~
1. Fortran
一般而言~從名字上就可以知道Fortran它的功用了!
由於小弟不擅長繪圖功能的程式撰寫,所以在此以討論數值計算的速度為主。
而繪圖的部分,Fortran 90之後的功能提升很多也可以撰寫繪圖程式用於I/O了。
但是小弟實際上還是會用其他軟體輔助繪圖的部分,
以Tecplot為主,並以Grapher、Surfer為輔大致上2D 3D的圖大概都還可以表達~
有時會搭用Matlab來作後端輸出的視覺化表達。
而其他軟體在搭配fortran上的表達也算還ok啦!
(但Fortran 90以上基本也支援OpenGL~可以支援不少科學繪圖了!)
就計算而言,Fortran的Subroutine和Function可用性很高,
在計算上著名的書籍Numerical Recipes早期就以fortran 77出版了~
而支援Fortran的語言函式或是副程式也非常多(C, C++, Matlab...etc.),
這個關係到使用fortran這個工具時~你也可以使用其他語言的工具,
進而降低研發程式的難度與時間。
在工作站上的計算小弟目前也有使用Fortran,使用的OS環境為Linux~
由於先前小弟group並未購買IMSL用於工作站上,所以此時很多小問題得依賴
世界各地專家們所釋出的函式或是副程式來解決,只要小心根據定義使用
Fortran在銜接這些solutions的相容性非常高的!
So, 人性化(方便性)、運算速度可謂極佳!
繪圖能力則屬尚可(我得強調!這是因為我太弱了XD)
多變性我個人評為佳!
(雖然90以上的語法已經可以支指標、援物件導向...etc.
但與C++比起物件導向來看我想還有些距離吧!)
2. C語言
這是小弟接觸以來的經驗,一般來看,C可以算是早期泛用型語言了吧!
但是C與Fortran比起,Fortran可以作的C都可以作!
然而Fortran是以撰寫數值程式為專門取向的工具,這點是無庸置疑的~
故小弟個人認為以C來寫數值程式比起Fortran先天上並無大的優勢!
以眾多前人所釋出的函式或是副程式寶藏來看...
C的資源可謂是最豐富的吧!
而且,C與FORTRAN的subroutine或functions連結是非常容易且多樣的!
著名的劍橋數值菜單Numerical Recipes也有C的版本~XD
再者!許多著名的大型程式之撰寫(UMPACK, SuperLU, FFTW...etc.)
也是由C撰寫的!真是可為寶藏含量極為豐富的語言啊!XD
在工作站上C的使用,比起Fortran而言算是簡易很多了!
而速度上則會因為程式設計者的習慣而有差異!
基本綜觀以同方法解同問題但是用不同語言來比較的話!我想是差異不大的!
So, 人性化(方便性)與運算速度可謂極佳,繪圖能力由於龐大寶藏之故也可謂極佳
多變性來看還是受限於語法本身,比Fortran90略微單調,但也算佳!
3. C++
C++的部分小弟使用不是很多!煩請大大幫忙簡述這項工具的威力程度了!
C++是C的延伸(小弟個人觀感),他既可已接收前人發展C的龐大資源
又可以超越C做出物件導向,
但是C++在與Fortran上的連結卻變的困難許多!
不過小弟覺得無妨!因為C的資源對於一般程設者大概就夠用了~
更何況到處都有得討論~XD
附帶一題的是Numerical Recipes也有出版C++版本~:p
在工作站上的使用上~C++似乎有著一些語法的優勢~
在某些平行的計算環境上~似乎蠻多人使用C++作為開發的工具~
(Open MP之類的!平行計算的部份小弟並無實際經驗!煩請各位大大補充了!)
So, 人性化(方便性)則因為可接收C的大寶藏(有些時候需要改寫)個人判斷為佳
計算速度因小弟個人使用之故無法做出最好的評斷!
繪圖能力由於龐大寶藏之故也可謂極佳!
而多變性來看是極佳!
4. Matlab
呵...基本上小弟不完全認為Matlab算是個"程式語言"...
但是它有許多好用的tool box!對於繪圖而言他可以算是天生的強項啊~
但是它的計算速度卻相對於C或是Fortran卻慢很多!尤其是迴圈的部分!
針對它在與C或是Fortran的連結來觀察,相容性很高!
所以大致上可以將需要加速的部分丟給Fortran或是C來處理~
而Matlab本身的資源也算是不錯!除了專業的Tool box以外~
連接C與Fortran的資源也可算是可以接受的了~
(C++與Matlab連結的的狀況,小弟不明瞭煩請能人補充了!)
至於資源的部份來看~Matlab在網路上的資源也漸漸的流行起來!
可以想見未來的資源也會越來越多!
就使用上而言,他不太嚴謹,也因此方便了許多!XD
工作站上的計算則是需要for Linux的版本~使用方法差異不大~
Matlab作大量運算的效能來還是無法與C/C++或是Fortran比擬~
So, 人性化(方便性)可謂極佳!與運算速度則只能說尚可了!
繪圖能力由於Tool box之故也可謂極佳!
多變性來看還是屬於尚可的階段~
5. Mathematica與Maple
嗯!他不是程式語言!執行速度也不太快!
畫圖的部粉也只能說是普普!(有許多軟體也能做到)
但是他的特殊功能卻是其他軟體無法比擬的!
例如:微分、積分、特殊函數...etc.
通常在數值分析前段我會使用它來協助數學上的驗算~
另外~~在精度上的部份這類工具有著一些的優勢~
例如超越雙精度的數值計算或是大數運算~
雖然程式語言都還可以操作~但是沒有這類工具來的簡便~
至於他們的資源只能說不算太多了!而跟其他程式的結合似乎還不多見!(請能人補充!)
用來作大量計算的話我想是頗為困難的吧!(若有誤請能人指證~)
So, 人性化(方便性)可謂尚可!與運算速度可謂不佳!
繪圖能力可謂尚可!多變性來看算是不佳~
綜觀1~5.....大概是台灣市面上極為常見的幾種數值工具了~
但是基本上我還是得說明一下!
工具只是工具!它們會因使用者的不同用法而有著效率上的差異~
個人認為,學熟其中的一種程式語言,搭配使用其他的資源,用來解決問題即可!
若真正講究計算效率,倒不如把演算法的細節先搞定,
再交給真正的程式設計人員去操刀~
例如:我用有限體積法(FVM)去分析3D大規模不規則區域的黏性流場~
目的是藉由數值方法分析這個計算區域的物理現象~
看到這問題我個人第一個感想是:這是個物理問題!數值程式只是工具~
就算我用數值菜單的CG解法去求解矩陣,還是沒辦法和商業軟體比快!
因為這個例子的目標並不是在研發新型快速的矩陣解法~而流場的物理現象才重點!
也許有人會講~那與其這樣為何不用LU分解就好?
是的!因為傳統LU分解的速度可能會讓我多好幾年才畢業!
工具只要夠用即可!要更好的效率要付出更多的的代價~只有自己能去衡量輕重~
呵~以上是小弟的粗略看法!
--
Tags:
土木
All Comments
By Hamiltion
at 2009-04-14T08:48
at 2009-04-14T08:48
Related Posts
懇請採購相關工作先進幫忙(填寫即贈送小禮物)
By Joe
at 2009-04-13T01:43
at 2009-04-13T01:43
工程力學用書
By Vanessa
at 2009-04-13T01:08
at 2009-04-13T01:08
九華補習班模擬考總複習優惠
By Carol
at 2009-04-12T16:13
at 2009-04-12T16:13
請問中興土木結構組老師問題
By Kelly
at 2009-04-12T11:00
at 2009-04-12T11:00
請問北科大地組教授問題
By Wallis
at 2009-04-12T03:15
at 2009-04-12T03:15