主题:【调查】大家都主要用什么写程序? -- 还是不懂
现在算变形,是不是都不用三角化的方法(TRIANGULARIZATION)而采用高阶的插值法了?但如果采样频率高的话,两种方法会有很大差别吗?采样频率低的话,高阶的就一定更接近真实值吗?
简单地讲,就是需要决定供给。
对于有一定底子的软件人员来说,临时学一门新的语言并不是很困难的事情,只要有足够的资料,一周到一个月应该差不多了。当然,变成高手的时间远不止此。
Fortran一般只用于科学计算领域;如果Java的性能能够真正提高的话,它可以成为Fortran的替代者;至于C/C++,前者现在已经成了高级汇编,而后者也已经沦落为原始的OO语言。
在我看来,如果Java/C#能够解决对虚拟机的依赖和性能问题,他们完全可以成为C++/Fortran的替代者。
你说的高阶方法是指的什么方法呢?
你指的是信号采集数据拟和的一套东西吗?
我所干的,简单来说,有一根铁棍,你给一定的力或者弯矩去弯它,想知道铁棍里面的应力分布情况,想知道铁棍的变形如何。你可以使用有限元方法解出数直解来,你就知道那里应力大,也就知道如果铁棍断裂的话,会从哪里开始等等。。。
当然最后结果需要与部分实验进行比较才能知道是否合理。
然后假设每个三角形或四面体里的变形是均匀的。
我是知道某些点的位移,希望算出连续介质的变形,然后再算应力。
不过你的回答很有帮助,真是三人行,必有我师啊,谢谢。
我干的其实就是求解微分方程。可以用有限差分(finite difference)方法求解,这时候就将区域划分为很多小格子(grid), 每个格点上分布各种物理量。
也可以用有限元方法求解(finite element),这时候计算单元就是很多点(node)构成的三角网格(mesh),物理量就分布在这上面。
现在也有些人用有限体(finite volume)求解。
不管什么方法,对我们来说是个边值问题,即开边界条件是个挑战。
也有人将Fortran 程序改为C,说是速度没有Fortran 快。
况且人们已经习惯了,所以目前从事科学计算的还都在用Fortran。
看样子属于材料力学,理论联系实际,你的工作比较有意思。
我除了算还是算,我都要烦死了,真想干点体力活儿,愣是没机会。下次你们家装修找我,free
不过我做的计算都有合作伙伴专门负责做实验,否则我的计算结果没有意义的,那样的理论也只是个空中楼阁而已。这种计算理论实验结合的方式非常成功。
那些搞试验的也非常喜欢这种方式。因为一组实验结果出来往往由于试件试验设备的关系,仅仅限于某一范围内。在他们试验的基础上,我们一般先建立材料数学模型,然后用有限元的方法模拟试验,如果数值解于实验解符合得很好,我们就可以使用这个材料模型对其他问题进行研究。进而扩展我们的研究。
呵呵,我不是做科学研究的,对Fortran没有多少项目级别的体会,因此不敢乱说。
不过我觉得Fortran目前能够依然在科学研究领域流行恐怕主要是因为很多老的算法库都是用Fortran写的,这样继续用Fortran写程序是比较方便的,否则以很多现代语言的描述能力,超过Fortran应该是不困难的。
至于将Fortran程序改写成C程序以后性能反而不行,我想主要是因为原有的Fortran程序是经过优化的,而对应的C程序缺乏优化的缘故。毕竟编译器的优化还是有限的,很多主要的优化依赖于编程人员的努力。
单从各种编程语言和汇编语言的接近程度来讲,C的级别要比Fortran更低一些,因此性能应该更好一些才对。
另外提一句,Matlab最初就是用Fortran写的。
Matlab商业化,第一件事是就是用C重写了一遍。
确实如君所言,要解决什么问题,决定用什么工具。
理论上讲,单是为Java/C#搞个Native Code 的编译器,应该不是难事。但虚拟机有虚拟机的好处,这里不多谈,坏处嘛,就是性能总是差点的,现在的趋势,似乎总是从硬件方面推进性能表现。
问题是,有可能从软件方面大幅度提高虚拟机的性能吗?
但对于科学计算来说,要求数据结构简单,算法精炼,
fortran正好满足这些条件,我想此外又有fortran相对来说简单易学,结构化程序,所以调试容易,这也是搞科学计算喜欢使用的原因。
现在的商用有限元软件一般即支持fortran也支持C/C++,就是提供两种语言的接口,有利于用户根据自己的情况对其进行功能扩充。