python语言属于科学计算语言吗_Go会是一门合适的科学计算语言吗?

在我学习工作中经常需要经常涉及到一些数值计算的问题,之前我一直采用python进行编程,有时候我也会采用Matlab实现一些复杂的计算。 就我目前所了解的,Python和Matlab (特指内置的M语言)是目前主流的动态语言中最适合科学计算的。Matlab主要优势在于内置的大量数学函数,而Python在文本处理方面则要更胜一筹,另外,Python作为一门独立的编程语言,显然更具有灵活性。然而,Matlab和Python都属于动态语言,其主要缺点在于计算效率偏低,尤其是对于需要进行大量的循环迭代的应用场景,典型的如有限元中的对计算网格进行遍历。因此有必要尝试一些新的适用于科学计算的编程语言以提高计算效率。

需要指出的是,通过内置TIJ机制,Matlab的循环效率有了质的提升,我有一个师兄就是基于Matlab开发了一套完整的有限元程序,通过进一步引入稀疏矩阵,其计算效率完全可以用“吓人”二字来形容。与之类似的有近几年比较火的Julia语言,其语法与Matlab十分类似,同时也引入了TIJ机制,据说计算效率与C++十分接近。前段时间发现有人采用Julia实现了物质点法(MPM,一种适用于大变形计算的数值计算方法),我对此十分感兴趣,确切的说是垂涎别人的源代码,无奈作者完全没有开源的意思。 对于Python而言,可以将核心代码采用C语言实现,从而指数级的提高运算效率,典型的如Numpy和Scipy。但不管怎么样,C和C++无疑是最高效的计算语言(不好意思,我忘了Fortran了,其实它挺好的,无奈现在是小鲜肉横行的年代,而它确实上了点年纪)。

由于大规模的数值计算涉及了大量的运算,通常大家会优先采用C++,就物质点法而言,目前Github上的gb-mpm和taichi-mpm应该是我们能够找到最好的实现了吧。然而,作为一名非计算机专业科班出身的工科生,C++对我来说还是太过于高深了。虽然我能够读懂一部分代码,但是真的让我对其进行修改我觉得还是太过于为难我了。网上有句很有名的话”人生苦短,我用python“, 或许我不应该左顾右盼,然而,python的计算效率让我觉得人生更为苦短(主要针对物质点法这种需要引入大量循环的数值方法)。我觉得Go这一新兴的编程语言能够救我于水火之中。我选择Go进行科学计算的动机十分单纯,因为他简单并且高效。至于线程什么的,不要指望我一个工科生能用上。私心也足够明显,那就是目前还很少有人尝试用Go来实现一些主流的数值计算方法,谁不想做先驱者,虽无用,但有功!

经过一段时间的资料整理,目前适用于科学计算的Go库稀有程度堪比大熊猫。相对比较成熟的竟然只有Gonum和Gosl!其中Gonum看起来要更为专业些,毕竟人家还是有自己的官方网站,不过貌似也有段时间没有更新。而Gosl则孤傲的存在于Github上,几年前在Hacker news上有关于它的讨论,貌似评论鼓励要多于肯定。虽然我与其作者有着师门上的渊源(这叫八竿子打不着的亲戚),但是这家伙前段时间将原本开源的Gofem(有限单元法的go语言实现,gofem能够计算非饱和渗流问题,真是好东西啊!)从网上移除了,万一哪天他不高兴把Gosl也删库了呢?其实Gonum也没有好太多,全网竟然也就Medium上有一篇粗略的教程。

通过初步阅读两者的源代码和Godoc上的文档,我打算将自己有限的时间和精力集中在Gonum上。近期我会写一些关于Gonum的教程,为了便于理解,我会尝试将其与Numpy中一些功能进行对比。之后我会尝试基于Go实现一个简单的MPM计算框架,名字我都想好了,就叫Gompm。这个名字简直不要太好,其原因在于mpm的计算思路与围棋类似,其背景计算网格与物质点在迭代计算的过程保持相对独立,与棋子和棋盘之间的联系有异曲同工之妙。毫无疑问,gompm将作为一个开源软件存在,Anura3D MPM喊开源都几年了,至今也没有看到一行代码(其实Anura3D MPM是可以通过参加学习班获得使用权限的)。

就像所有国产电视开头都有“如有雷同,纯属巧合”这句话一样,我同样需要再三的强调一点:我没打算做一个正经的博主,至于错别字,病句,甚至断更什么的,那都不是事。目前就想到这些了,就此打住!

你可能感兴趣的:(python语言属于科学计算语言吗_Go会是一门合适的科学计算语言吗?)