当前位置:  开发笔记 > 编程语言 > 正文

为什么用Matlab而不是Fortran编写Matlab?

如何解决《为什么用Matlab而不是Fortran编写Matlab?》经验,为你挑选了4个好方法。

您可能知道,Fortran是一种科学计算语言.然而,最着名的科学计算高级语言的核心是用C而不是Fortran编写的.为什么?



1> Trevor Boyd ..:

回答你原来的问题:Matlab最初是用Fortran编写的. 但第一件事一个MATLAB,克里夫·莫勒尔,和他的伙伴在1983年所做的创作者是重写整个应用Matlab的在C:

Jack Little离开了他在咨询公司的工作,并在西尔斯购买了一台新的COMPAQ便携式计算机.机器只有256 KB的内存,没有硬盘; 杰克不得不换掉5-1/4英寸的软盘来编译程序.杰克和史蒂夫花了一年半的时间用C语言重写MATLAB,增加了他们所设想的新功能.(MATLAB和MathWorks超过二十年的成长)

我认为今天一个更相关的问题是问:为什么他们在1983年转向C?

我的猜测是C可能具有Fortran没有的某些功能,因此切换更加不可取,并且符合代码可维护性.

Fortran77中缺少的一个杀手级功能是动态内存分配(动态内存分配仅在Fortran90中添加).在我看来,解决这个单一限制将是一个可怕的交易破坏者.

编辑:

dmckee的回答很好地解释了为什么使用Fortran77会很痛苦.


@Trevor Boyd Smith,Cleve Moler还是Steve Moler?你的答案的第一段写道,Cleve Moler和他的伙伴改写了MatLab,但在引用中它说杰克和史蒂夫.

2> dmckee..:

根据经验猜测:

内存管理.

Fortran(好吧,编写matlab时出现的fortran)不支持动态内存管理.这使得大型工作变得痛苦(例如,参见CERNLIB).

CERNLIB通过在公共块分配高达大阵列,和执行类似的(de)分配器的阵列的单元一个malloc解决了这个问题.笨重但工作:数组偏移是指针等价物,你离开...


>我讨厌恐龙.你有一个由专家写的超过40年的由Fortran编写的图书馆 - 你只是将它转换成C.你明白所有这些方程吗?所有舍入错误?所有的边缘情况?而且你要用一种没有矩阵或复数作为标准的语言来做这件事.
CERNLIB的部分日期可以追溯到20世纪60年代初.当c出现时,他们已经有了很多代码.我相信大部分内容都被重写了几次,但交易破坏者是:物理学家.即使到了80年代,大多数物理学家也只是说过fortran.
@Trevor Boyd Smith - 我不会说有一颗流星.如今,大多数工程师和物理学家都熟悉fortran - 在我的大学(nav.arch),我们被教授fortran,有些人被教授py和matlab,但没有人学过C. C是cs学生的语言 - 大多数工程师不使用它,除非他们的编程倾向于(但这是他们自己的个人业务).坦率地说,当涉及到科学目的时,fortran仍然比C,python或其他大多数人更适合(matlab很好,但是当性能进入运行时有一些缺点) - 只是
那么CERNLIB基本上将与malloc()/ free()相同的功能攻入Fortran77?他们为什么不只使用C?
"在八十年代迫使物理学家改变的"流星"究竟是什么?" 认识Pascal和c的入学学生?还是unix的崛起?但这种变化是渐进的,并且仍在继续.CERNLIB在很大程度上被ROOT取代,但是那里有数百万的LOC,它仍然得到了积极的支持.哎呀,我在18个月前写过代码.
@ldigas:在我的业务(粒子物理学)结束时,许多学生*不再*了解或学习fortran.C++占主导地位,大概是因为它是ROOT的语言.他们也没有*编写张量操作代码,他们只是带来了一个健壮的库.

3> Drew Hall..:

我的理解是Matlab是用大杂烩的语言编写的,包括但不限于C,FORTRAN,Java和Matlab本身.

我相信它在幕后使用了最好的库,包括LAPACK(FORTRAN),FFTW(C)以及更多.

我认为原始版本是纯粹的FORTRAN,但随着它变得更加精致和商业化,他们并不羞于为每个组件使用正确的语言.我不怪他们 - 我讨厌在FORTRAN中编写解析器或GUI!



4> Dafydd Giddi..:

我希望用以下陈述来限定这个答案 - 我对Fortran或Matlab一无所知

但是我想你几乎在你的问题中回答了你自己的问题.

为什么不使用科学语言编写内核.您可以使用最合适的语言来完成手头的任务.内核最好用C语言编写,因为它更适合处理内核等低级任务(使用内存管理等)

内核不是科学应用,因此您不会使用科学语言.

再说一次,我可能完全不合适,但我认为这是一个非常合乎逻辑的答案.


快速说明:计算软件包的内核与操作系统的内核不同.在第一种情况下,内核是底层计算引擎,用户通过更高级别的用户界面(例如MATLAB命令窗口或Mathematica笔记本界面)与之交互.
推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有