The project was conceived around 1988.[6] At first it was intended to be a companion to a chemical reactor design course. Full development was started by John W. Eaton in 1992. The first alpha release dates back to 4 January 1993 and on 17 February 1994 version 1.0 was released. Version 9.2.0 was released on 7 June 2024.[7]
In addition to use on desktops for personal scientific computing, Octave is used in academia and industry. For example, Octave was used on a massiveparallel computer atPittsburgh Supercomputing Center to find vulnerabilities related to guessing social security numbers.[22]
Acceleration withOpenCL orCUDA is also possible with use of GPUs.[23]
Octave uses aninterpreter to execute the Octave scripting language.
Octave is extensible using dynamically loadable modules.
Octave interpreter has anOpenGL-based graphics engine to create plots, graphs and charts and to save or print them. Alternatively,gnuplot can be used for the same purpose.
The Octave language is an interpreted programming language. It is astructured programming language (similar toC) and supports many commonC standard library functions, and also certainUNIX system calls and functions.[24] However, it does not support passing arguments by reference[25] although function arguments arecopy-on-write to avoid unnecessary duplication.
Typing a TAB character on the command line causes Octave to attempt to complete variable, function, and file names (similar toBash'stab completion). Octave uses the text before the cursor as the initial portion of the name to complete.[31]
Octave includes a limited amount of support for organizing data in structures. In this example, we see a structurex with elementsa,b, andc, (an integer, an array, and a string, respectively):
Octave's&& and|| logicaloperators are evaluated in ashort-circuit fashion (like the corresponding operators in theC language), in contrast to the element-by-element operators& and|.
Octave supports a limited form ofexception handling modelled after theunwind_protect ofLisp. The general form of an unwind_protect block looks like this:
As a general rule, GNU Octave recognizes as termination of a givenblock either the keywordend (which is compatible with the MATLAB language) or a more specific keywordendblock or, in some cases,end_block. As a consequence, anunwind_protect block can be terminated either with the keywordend_unwind_protect as in the example, or with the more portable keywordend.
Thecleanup part of the block is always executed. In case an exception is raised by thebody part,cleanup is executed immediately before propagating the exception outside the blockunwind_protect.
GNU Octave also supports another form of exception handling (compatible with the MATLAB language):
trybodycatchexception_handlingend
This latter form differs from anunwind_protect block in two ways. First,exception_handling is only executed when an exception is raised bybody. Second, after the execution ofexception_handling the exception is not propagated outside the block (unless arethrow( lasterror ) statement is explicitly inserted within theexception_handling code).
Octave has a mechanism for handling functions that take an unspecified number of arguments without explicit upper limit. To specify a list of zero or more arguments, use the special argumentvarargin as the last (or only) argument in the list.varargin is a cell array containing all the input arguments.
MATLAB scripts from theMathWorks' FileExchange repository in principle are compatible with Octave. However, while they are often provided and uploaded by users under an Octavecompatible and properopen sourceBSD license, the FileExchangeTerms of use prohibit any usage beside MathWorks'proprietary MATLAB.[32][33][34]
Comment lines can be prefixed with the # character as well as the % character;
VariousC-based operators++,--,+=, *=, /= are supported;
Elements can be referenced without creating a new variable by cascaded indexing, e.g. [1:10](3);
Strings can be defined with the double-quote " character as well as the single-quote ' character;
When the variable type issingle (a single-precision floating-point number), Octave calculates the "mean" in the single-domain (MATLAB indouble-domain) which is faster but gives less accurate results;
Blocks can also be terminated with more specificControl structure keywords, i.e., endif, endfor, endwhile, etc.;
Functions can be defined within scripts and at the Octave prompt;
Presence of a do-until loop (similar todo-while in C).
Many, but not all, of the numerous MATLAB functions are available in GNU Octave, some of them accessible through packages inOctave Forge. The functions available as part of either core Octave or Forge packages are listedonlineArchived 2024-03-14 at theWayback Machine.
A list of unavailable functions is included in the Octave function__unimplemented.m__. Unimplemented functions are also listed under many Octave Forge packages in theOctave Wiki.
When an unimplemented function is called the following error message is shown:
Octave comes with an officialgraphical user interface (GUI) and anintegrated development environment (IDE) based onQt. It has been available since Octave 3.8,[35] and has become the default interface (over thecommand-line interface) with the release of Octave 4.0.[12] It was well-received by an EDN contributor, who wrote "[Octave] now has a very workable GUI" in reviewing the then-new GUI in 2014.[36]
Several 3rd-party graphical front-ends have also been developed, likeToolboX for coding education.
# create figure and panel on itf=figure;# create a button (default style)b1=uicontrol(f,"string","A Button","position",[101015040]);# create an edit controle1=uicontrol(f,"style","edit","string","editable text","position",[106030040]);# create a checkboxc1=uicontrol(f,"style","checkbox","string","a checkbox","position",[1012015040]);
# create figure and panel on itf=figure;# create a button groupgp=uibuttongroup(f,"Position",[00.511])# create a buttons in the groupb1=uicontrol(gp,"style","radiobutton","string","Choice 1","Position",[1015010050]);b2=uicontrol(gp,"style","radiobutton","string","Choice 2","Position",[105010030]);# create a button not in the groupb3=uicontrol(f,"style","radiobutton","string","Not in the group","Position",[105010050]);
Octave also has many packages available. Those packages are located at Octave-ForgeOctave Forge - Packages, orGitHub Octave Packages. It is also possible for anyone to create and maintain packages.
Alternatives to GNU Octave under anopen source license, other than the aforementioned MATLAB, includeScilab andFreeMat.[37][38][39][40] Octave is more compatible with MATLAB than Scilab is,[37][41][42] and FreeMat has not been updated since June 2013.[43]
^Kapuno, Raul Raymond (2008).Programming for Chemical Engineers Using C, C++, and MATLAB. Jones & Bartlett Publishers. p. 365.ISBN978-1-934015-09-4.
^Herman, Russell L. (2013).A Course in Mathematical Methods for Physicists. CRC Press. p. 42.ISBN978-1-4665-8467-9.
^Wouwer, Alain Vande; Saucez, Philippe; Vilas, Carlos (2014).Simulation of ODE/PDE Models with MATLAB, Octave and Scilab: Scientific and Engineering Applications. Springer. pp. 114–115.ISBN978-3-319-06790-2.
^"FreeMat".freemat.sourceforge.net. Retrieved22 February 2020.