GNU Octave
GNU Octave是一种采用高级编程语言的主要用于数值分析的软件。Octave有助于以数值方式解决线性和非线性问题,并使用与MATLAB兼容的语言进行其他数值实验。它也可以作为面向批处理的语言使用。因为它是GNU计划的一部分,所以它是GNU通用公共许可证条款下的自由软件。
GNU Octave 4.3.0+ running on Linux | |
开发者 | John W. Eaton and many others[1] |
---|---|
首次发布 | 1988年 |
当前版本 |
|
源代码库 | |
编程语言 | C, C++, Fortran[3] |
语言 | 19种语言[来源请求] |
类型 | 科学计算 |
许可协议 | GNU GPLv3 |
网站 | www |
Octave是MATLAB的主要自由替代品之一,其他还有Scilab和FreeMat。[5][6][7][8] 然而,与Octave相比,Scilab更少强调与MATLAB的(双向)句法兼容性。[5][9][10]
历史
系统性开发则是由John W. Eaton在1992年接手才开始的。 第一个alpha测试版是在1993年1月4日发布,1.0稳定版则是在1994年2月17日发布[11]。
其名称与音乐上的八度没有直接关系。该软件乃是以一位早期开发群的成员,同时也以敏于处理数值逼近问题著称的前化工系教授奥克塔夫·列文斯比尔(Octave Levenspiel)之名命名的。
技术细节
- Octave是以C++的标准模板库编程而成。
- Octave有自己Octave语言解释器。
- Octave可以动态插件扩展。
- Octave的解释器可用gnuplot及Grace产生图表及打印。
Octave语言
Octave语言是直译式及结构化(类于第二代的BASIC)的编程语言,支持许多C语言风格的标准函数功能,同时可以使用UNIX的系统调用以进行扩展增进功能,但不支持以引用的方式传递参数。
Octave的核心由一组内置的(built-in)矩阵运算语言(如四则运算)和可加载函数(Loadable Function)组成(例如求矩阵逆inv),其余能在核心语言之上实现而且性能开销不会显著增加的函数调用则一般以Octave脚本的形式存在(例如求解方程组的fsolve函数)。Octave 解释器会自动处理各种不同类型的调用。
Octave支持资料建构,也支持基本的面向对象编程,但通常仍把它当作面向过程的程序设计语言来看待。
它的语法基本上与Matlab一致,严谨编写的代码应同时可在Matlab及Octave执行。但若调用了Matlab工具包,则一般不能直接在Octave上运行,因为Octave附带的工具包与Matlab并不兼容。
由于Octave是以GNU通用公共许可证许可,所以可以自由地复制、流通与使用。Octave可在大部分的类Unix操作系统中执行,亦可在Microsoft Windows中执行。在Mac OS X中运行也是可能的,但设置较为复杂。[12]
特殊功能
- 变量及函数名称自动补齐
在命令行按下TAB键,Octave会自动补齐变量,函数或文件的名称。Octave会依据光标之前的文字来补齐。
- 指令回溯
在交互模式下,Octave会将历次指令存在暂存档中以俟调用与编辑。
- 资料建构:
Octave包含了初步的资料建构功能,例如:
octave:1> x.a = 1; x.b = [1, 2; 3, 4]; x.c = "string"; octave:2> x.a x.a = 1 octave:3> x.b x.b = 1 2 3 4 octave:4> x.c x.c = string
- 短路逻辑算符:
Octave的`&&'及`||'的逻辑算符是在短路的方式下运算(如同C语言中的相仿算符),相反于逐算子算符`&'及`|'。
- 递增与递减算符
Octave如同C语言一样具有可前置或后置的递增与递减算符。
- 异常处理:
Octave以提供初步的LISP式unwind_protect
异常处理模式。通常unwind_protect
的表述区段可表示如下:
unwind_protect
body
unwind_protect_cleanup
cleanup
end_unwind_protect
- 可变长度参数表列:
Octave提供用于处理未指明参数个数时的函数调用机制:利用特殊的varargin
作为参数来调用函数。
function s = plus(varargin)
if(nargin==0)
s = 0;
else
s = varargin{1} + plus (varargin{2:nargin});
endif
endfunction
- 可变长度回传表列:
单一函数可以varargout
这一特殊回传值来回传任意数目的值,例如:
function varargout = multiassign(data)
for k=1:nargout
varargout{k} = data(:,k);
endfor
endfunction
MATLAB兼容性
Octave最初便是模彷Matlab而设计,自然与Matlab有许多相同的功能。这也使得一部分Matlab程序可以直接或经过少量修改在Octave上运行,一些软件开发小组也使用两者兼容的语法,直接开发可以同时在Matlab和Octave使用的程序。
参见
- Scilab
- R语言
- 开放源代码软件列表
参考文献
- ^ Rik. contributors.in. 10 June 2015 [14 June 2015]. (原始内容存档于2022-04-10).
- ^ GNU Octave 8.1.0 Released. 2023年3月7日 [2023年3月11日].
- ^ Building - Octave. wiki.octave.org. GNU. [1 May 2018]. (原始内容存档于2020-07-06) (英语).
- ^ GNU Octave 7.2.0 Released. 2022-07-28 [2022-07-28]. (原始内容存档于2022-08-06).
- ^ 5.0 5.1 Trappenberg, Thomas. Fundamentals of Computational Neuroscience. Oxford University Press. 2010: 361. ISBN 978-0-19-956841-3.
- ^ Muhammad, A; Zalizniak, V. Practical Scientific Computing. Woodhead Publishing. 2011: 3. ISBN 978-0-85709-226-7.
- ^ Megrey, Bernard A.; Moksness, Erlend. Computers in Fisheries Research. Springer Science & Business Media. 2008: 345. ISBN 978-1-4020-8636-6.
- ^ Kapuno, Raul Raymond. Programming for Chemical Engineers Using C, C++, and MATLAB. Jones & Bartlett Publishers. 2008: 365. ISBN 978-1-934015-09-4.
- ^ Herman, Russell L. A Course in Mathematical Methods for Physicists. CRC Press. 2013: 42. ISBN 978-1-4665-8467-9.
- ^ Wouwer, Alain Vande; Saucez, Philippe; Vilas, Carlos. Simulation of ODE/PDE Models with MATLAB, Octave and Scilab: Scientific and Engineering Applications. Springer. 2014: 114–115. ISBN 978-3-319-06790-2.
- ^ About Octave. [2010-11-21]. (原始内容存档于2021-01-25).
- ^ Installing MacOS X Bundle. GNU Octave. [2012-03-12]. (原始内容存档于2012-06-25).
外部链接
- Octave.org网页(页面存档备份,存于互联网档案馆)
- 在线支持(含文档) (页面存档备份,存于互联网档案馆)
- Octave快记(页面存档备份,存于互联网档案馆)
- Octave-forge社群开发网页 (页面存档备份,存于互联网档案馆)
- Octave教学与技术手册 (页面存档备份,存于互联网档案馆)提供Octave相关教学与示例。
- Octave Workshop:一个Octave的集成编程环境[永久失效链接]
- kOctave:图型接口 - 适用于KDE
- Octave在线计算(页面存档备份,存于互联网档案馆) - 可在网上执行Octave程序。
- Octave FAQ快记有关绘图的部分
- OctPlot (页面存档备份,存于互联网档案馆)图形处理包,提供高质量的屏幕输出。
- Help-Octave在Gmane的邮件论坛存档
- Octave的MPI toolbox工具箱利用GNU Octave作并发计算
- Xoctave : GNU Octave GUI (页面存档备份,存于互联网档案馆)