GNU Octave

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

Octave是MATLAB的主要自由替代品之一，其他还有Scilab和FreeMat。 然而，与Octave相比，Scilab更少强调与MATLAB的（双向）句法兼容性。

 歷史 
系統性開發則是由John W. Eaton在1992年接手才開始的。
第一個alpha測試版是在1993年1月4日釋出，1.0穩定版則是在1994年2月17日釋出。

其名稱與音樂上的八度沒有直接關係。該軟體乃是以一位早期開發群的成員，同時也以敏於處理數值逼近問題著稱的前化工系教授奧克塔夫·列文斯比爾（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、macOS、安卓中執行。

 特殊功能 
變數及函式名稱自動補齊
在命令列按下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語言
 開放源代碼軟件列表

 参考文献 

 外部連結 

 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 

Octave
Category:程序设计语言
Category:陣列編程語言