GNU Octave是一种采用高级编程语言的主要用于数值分析的软件。Octave有助于以数值方式解决线性和非线性问题,并使用与MATLAB兼容的语言进行其他数值实验。它也可以作为面向批处理的语言使用。因为它是GNU计划的一部分,所以它是GNU通用公共许可证条款下的自由软件

Quick Facts 开发者, 首次发布 ...
GNU Octave
Thumb
Thumb
GNU Octave 4.3.0+ running on Linux
开发者John W. Eaton and many others[1]
首次发布1988年,​36年前​(1988
当前版本7.2.0(2022年7月28日,​2年前​(2022-07-28[2]
源代码库 编辑维基数据链接
编程语言C, C++, Fortran[3]
语言19种语言[来源请求]
类型科学计算
许可协议GNU GPLv3
网站www.gnu.org/software/octave/ 编辑维基数据
Close

Octave是MATLAB的主要自由替代品之一,其他还有ScilabFreeMat[4][5][6][7] 然而,与Octave相比,Scilab更少强调与MATLAB的(双向)句法兼容性。[4][8][9]


历史

系统性开发则是由John W. Eaton在1992年接手才开始的。 第一个alpha测试版是在1993年1月4日释出,1.0稳定版则是在1994年2月17日释出[10]

其名称与音乐上的八度没有直接关系。该软体乃是以一位早期开发群的成员,同时也以敏于处理数值逼近问题著称的前化工系教授奥克塔夫·列文斯比尔(Octave Levenspiel)之名命名的。

技术细节

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中运行也是可能的,但设置较为复杂。[11]

特殊功能

变数及函式名称自动补齐

在命令列按下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以提供初步的LISPunwind_protect例外处理模式。通常unwind_protect表述区段英语Statement block可表示如下:

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使用的程序。

  1. 矩阵为基础资料型别之一
  2. 内建支援复数
  3. 内建功能强大的数学函式及可扩充的函式库
  4. 使用者可自定函式

参见

参考文献

外部链接

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.