GNU Octave 是一种采用高级 编程语言 的主要用于数值分析 的软件。Octave有助于以数值方式解决线性和非线性问题,并使用与MATLAB 兼容的语言进行其他数值实验。它也可以作为面向批处理 的语言使用。因为它是GNU計劃 的一部分,所以它是GNU通用公共许可证 条款下的自由软件 。
Octave是MATLAB的主要自由 替代品之一,其他还有Scilab 和FreeMat 。[ 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以提供初步的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使用的程序。
矩陣 為基礎資料型別 之一
內建支援複數
內建功能強大的數學函式 及可擴充的函式庫
使用者可自定函式
参见
参考文献
^ Rik. contributors.in . 10 June 2015 [14 June 2015] . (原始内容 存档于2022-04-10).
^ GNU Octave 7.2.0 Released . 2022-07-28 [2022-07-28 ] . (原始内容存档 于2022-08-06).
^ Building - Octave . wiki.octave.org. GNU. [1 May 2018] . (原始内容存档 于2020-07-06) (英语) .
^ 4.0 4.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).
外部連結