跳到内容

使用 FOSS 的 FOSS 教育/研究

来自维基教科书,开放世界中的开放书籍

传统上,学术研究以开放的方式进行,研究结果的发表先于同行评审过程。所有导致结果的假设、计算和实验都在结果被期刊接受发表之前被仔细审查。研究人员通常不会获得他们发现的知识产权,并且他们有义务发表这些发现。

计算机软件 通常不仅在 计算机科学ICT 研究中使用,而且在许多其他领域的科研中也使用。“然而,科学家很少将他们的软件提供给其他科学家进行审查,即使他们这样做,他们也经常使用闭源程序,其中底层 源代码版权 和商业秘密声明的保护。但这种做法违背了科学的核心,即可验证性。为了被认为是有效的,所有用于特定科学假设的计算和假设必须公开审查。然而,闭源软件使得这种审查成为不可能。”[1]

相反,FOSS 的开放理念与学术研究过程完全一致,因为该软件的 源代码 也可供审查。研究人员应该尽可能地将 FOSS 作为他们工作中的工具。Bryan Pfaffenberger 进一步认为,“科学家仅仅使用开源软件是不够的,他们还必须使用开源操作系统。”[2]

如前所述,免费/开源 编程语言数据库系统电子表格 软件和其他可用于研究中的计算和数据分析的应用程序都可用。更专业的 FOSS 也可用。这里介绍了一些重要的例子

出版

[edit | edit source]

许多物理学和数学研究论文使用 LaTeX 编写。

数值数学

[edit | edit source]

数值算法用于计算问题的近似解,而这些问题的精确解未知或难以获得。数值算法的输出通常包含许多数字,这些数字代表感兴趣的变量在不同时间点或空间中的值。

以某种方式属于同一组的数值通常表示为数组。来自线性代数的矩阵和向量以及张量可以方便地表示为数组。因此,几乎所有数值算法都是用数组编写的。

数组操作和算法原型

[edit | edit source]

数值算法通常使用易于学习的解释型编程语言开发。这些语言具有内置的数组和矩阵对象。它们带有大量用于数值计算、创建高质量图形和文件输入输出的子例程。它们易于使用,从而导致开发速度很快,这弥补了它们执行速度相对较慢的缺点。

缺失:简短的功能

这里提到的解释型语言本身比编译型语言(C、C++、Fortran)慢 20 到 100 倍。但是,数值子例程是用编译型语言编写的,并且执行速度很快。因此,从一定矩阵大小开始,解释型语言的速度损失变得不那么明显。算法的关键部分也可以用编译型语言编写,这相当容易。这里的速度比较 [1][2] 显示,对于简单的有限差分算法,速度损失为 5 到 10 倍。这里的测试 [3] 比较了线性代数例程的性能。

Matlab - 专有且广泛传播

[edit | edit source]

该领域的标准是专有语言 Matlab。该语言专门用于数组操作。文档完善且非常广泛;它也在线提供 [4]

Matlab 是专有软件。它以基本包和许多单独的工具箱的形式出售,这些工具箱需要额外付费。定价信息(商业许可证,单用户,美国,2007 年 11 月):基本语言 1900 美元,工具箱价格从几百美元到几千美元不等。有学术折扣。

有关该语言本身的更详细讨论:请查看几乎相同的 Octave 语言。

Scilab

[edit | edit source]

Scilab 是一种用于矩阵操作的专用语言。语法类似于 Matlab 语言,但不完全相同。它带有大量用于解决来自许多科学学科的问题的软件包。

从版本 5 开始,Scilab 是自由软件,根据 CeCILL 许可证分发。 [5] [6]

熟悉 Scilab 的人:请扩展这一节!

Octave 是专有 Matlab 语言的免费克隆。它是一种专门用于数组操作的语言,其语法非常适合此任务。该语言对逐元素和线性代数运算都有运算符。它也很容易学习。Octave 只是 Matlab 的核心,工具箱是独立的项目,许多工具箱尚不存在。然而,最常见的算法确实存在。

文档相当不错。有一个教程 [7]

用 C++、C 和 Fortran 为 Octave 编写扩展模块非常容易。(比 Python 更容易。)Octave 附带一个 C++ 库用于矩阵操作,该库也在内部使用 [8]

Octave 没有(只有模糊的)面向对象。因此组织大型项目很困难。

由于 Octave 是一种专用语言,因此很难做一些超出 Octave 范围的事情。一个经常遇到的问题是读取奇数文件格式。Octave 没有良好的字符串处理功能,也没有 XML 阅读器。图形用户界面需要用不同的语言编写。

Octave 没有附带 IDE,但许多编辑器可以对(相同的)Matlab 语言进行语法着色。还有一个 Octave 的 Emacs 模式 [9],它非常强大;但只对喜欢相当特殊的 Emacs[10] 编辑器的人有用。

Numpy、Scipy、Matplotlib

[编辑 | 编辑源代码]

Numpy、ScipyMatplotlibPython 编程语言的库。它们一起赋予 Python 数值原型语言的功能。

  • Numpy 提供数组对象和所有基本数组和矩阵功能。
  • Scipy 是一个科学算法集合(许多来自 Netlib),带有 Python 包装器。
  • Matplotlib 提供二维(以及非常简单的三维)绘图功能。

Python[11] 是一种面向对象、通用用途的编程语言。尽管如此,Python 非常容易学习,Python 程序也很容易理解。它有一个庞大的标准库。

R 支持各种统计和数值技术。它还通过使用包高度可扩展,包是用户提交的针对特定功能或特定研究领域的库。由于其 S 遗产,R 具有比大多数统计计算语言更强大的面向对象编程功能。其宽松的词法作用域规则也简化了 R 的扩展。

R 的另一个优势是其图形功能,它可以生成包含数学符号的出版质量图形。

虽然 R 主要用于统计学家和其他需要统计计算和软件开发环境的从业人员,但它也可以用作通用矩阵计算工具箱,其基准结果与 GNU Octave 及其专有对应产品 MATLAB(版本 < 7)相当。

Netlib

GNU 科学库

[编辑 | 编辑源代码]

GNU 科学库

面向对象数值

[编辑 | 编辑源代码]

面向对象数值

符号数学(计算机代数系统)

[编辑 | 编辑源代码]

符号数学是公式操作,就像你用笔和纸做的那样。(至少从工程师的角度来看。)计算机代数系统 (CAS) 可以例如:简化表达式、求导、积分或求解方程组。

Maple、Mathematica - 专有

[编辑 | 编辑源代码]

众所周知的专有软件包是 MapleMathematica。这两个软件包都非常全面,但对大众有用。它们都具有良好的图形用户界面。它们非常昂贵,但有学生折扣。

Maxima 是一个强大的 CAS,可以与 Maple 和 Mathematica 相媲美。然而,它缺乏良好的图形前端。

图形前端

  • [12] Maxima 人员提供的数学软件列表。
  • [13] 维基百科上非常庞大的符号数学软件列表

生物信息学

[编辑 | 编辑源代码]

生物信息学,总的来说,是指使用计算机处理生物信息。它是使用计算机来描述生物体的分子组成部分(计算分子生物学)。生物信息学最突出的成果是 人类基因组计划,旨在绘制人类基因的完整集合。分子生物学需要处理大量数据,这显然只有借助计算机和软件才能实现。

FOSS 在生物信息学中发挥着重要作用。Ewan [3] 认为“开源是有道理的,因为它遵循良好且众所周知的科学原则。传统上,科学实践一直涉及公开分享和讨论结果,并提供足够的信息以允许第三方确认结果。显然,开源软件非常适合这种模式。”使用 FOSS 的第二个原因是“实际数据比用于处理它的工具重要得多。”分享用于进行研究的软件减少了开发软件的重复工作。

生物信息学组织(http://www.bioinformatics.org)成立于1999 年,旨在促进生物信息学研究领域的全球沟通和合作,并为这类工作的研究方法和材料提供免费、公开的访问权限。其网站提供丰富的资源,包括软件和数据库,并为促进这些资源开发的活动提供论坛。

高端计算

[编辑 | 编辑源代码]

GNU/Linux 和 FOSS 已被用于项目中,以提供经济实惠的高端计算能力。这通过将多个低成本服务器和工作站的处理能力组合到一个系统中来实现,该系统可以提供超级计算机的算力。据 Cook 称,“这些系统之所以如此有效,是因为存在许多非常大、非常复杂的问题,这些问题可以自然地分解成许多相同、更简单问题的迭代。从天气预报到计算机动画,一切都符合这种描述。”[4]

Beowulf 是用于构建大规模并行系统的架构名称,该系统由市售个人电脑构成。用于构建系统的计算机可以是 486 系统、奔腾系统和 Alpha 计算机;计算机不需要同质。即使是原本要被丢弃的旧电脑也可以用来构建这样的系统。在美国的橡树岭国家实验室,Stone 超级计算机是使用旧电脑的组合构建的,这些电脑通过标准以太网连接在一起,用于解决映射问题。[5] 该系统具有 1.2 吉兆浮点运算每秒的理论峰值性能(FLOPS 代表每秒浮点运算次数。它被用作计算速度的近似量度。1 吉兆浮点运算每秒等于 10 亿次浮点运算每秒)。

另一个例子是纽约州立大学启动的超级计算机,它由超过 2000 台运行GNU/Linux 的计算机组成,用于开展药物研究,以对抗癌症、阿尔茨海默病和艾滋病。

  1. Pfaffenberger, B., "Linux in Higher Education: Open Source, Open Minds, Social Justice", Linux Journal, 2000 年 3 月 2 日;可从 http://www.linuxjournal.com/article.php?sid=5071 获取。
  2. Pfaffenberger, B., "Linux in Higher Education: Open Source, Open Minds, Social Justice", Linux Journal, 2000 年 3 月 2 日;可从 http://www.linuxjournal.com/article.php?sid=5071 获取。
  3. Stewart,B.,"Ewan Birney's Keynote: A Case for Open Source Bioinformatics",O'Reilly Network, 2002; 可从 www.oreillynet.com/lpt/a/1511 获取。
  4. Cook, R.,"Supercomputers on the cheap", 2000 年 4 月;可从 http://www.cnn.com/2000/TECH/computing/04/13/cheap.super.idg 获取。
  5. Hargrove,W.W.,Hoffman, F. M. and Sterling,T., "The Do-It-Yourself Supercomputer", Scientific American.com,2001 年 8 月 16 日;可从 www.sciam.com/article.cfm?articleID=000E238B-33EC-1C6F-84A9809EC588EF21 获取。
华夏公益教科书