作者kumoking (黄易派来乱的)
站内Civil
标题[转录]Re: [问题] 数值计算的软体
时间Mon Apr 13 01:45:47 2009
※ [本文转录自 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分解的速度可能会让我多好几年才毕业!
工具只要够用即可!要更好的效率要付出更多的的代价~只有自己能去衡量轻重~
呵~以上是小弟的粗略看法!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.102.102
※ 编辑: kumoking 来自: 59.104.102.102 (04/13 01:47)
1F:推 GuessTH:MATLAB最方便的是有很多内建的函数 FFT之类的 04/13 01:56