Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

GNU Octave

From Wikipedia, the free encyclopedia
Numerical analysis programming language
For other uses, seeOctave (disambiguation).
GNU Octave
GNU Octave 4.3.0+ running onLinux
DevelopersJohn W. Eaton and many others[1]
Initial release4 January 1993; 32 years ago (4 January 1993) (first alpha release)
17 February 1994; 31 years ago (17 February 1994) (version 1.0)[2]
Stable release
10.3.0[3] Edit this on Wikidata / 23 September 2025; 2 months ago (23 September 2025)
Repository
Written inC++ (main), Octave itself (scripts),C (wrapper code),Fortran (linear algebra wrapper code)[4]
Operating systemWindows,macOS,Linux,BSD
Available in18 languages[5]
TypeScientific computing
License2007:GPL-3.0-or-later[a]
1992:GPL-2.0-or-later[b]
Websitehttps://octave.org/

GNU Octave is ascientific programming language forscientific computing andnumerical computation. Octave helps in solving linear and nonlinear problems numerically, and for performing other numerical experiments using a language that is mostly compatible withMATLAB. It may also be used as abatch-oriented language. As part of theGNU Project, it isfree software under the terms of theGNU General Public License.

History

[edit]

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]

The program is named afterOctave Levenspiel, a former professor of the principal author. Levenspiel was known for his ability to perform quickback-of-the-envelope calculations.[8]

Development history

[edit]
TimeAction
1988/19891st discussions (Book and Software)
February 1992Start of Development
January 1993News in Web (Version 0.60)
February 19941st Publication (Version 1.0.0 to 1.1.1)[9]
December 19962nd Publication (Version 2.0.x) with Windows Port (Cygwin)[10]
December 2007Publication of Version 3.0 (Milestone)[11]
29 May 2015Version 4.0.0 (stable GUI and new Syntax forOOP)[12][13][14][15]
1 March 2019Publication of Octave 5.1.0 (QT5 preferred, Qt 4.8 minimum), hiDpi support[16]
26 November 2020Publication of Octave 6.1.0 (QT5 preferred, Qt 4.x deprecated for remove in 7)[17]
6 April 2022Publication of Octave 7.1.0 (QT5 preferred), improved graphics backend and matlab compatibility[18]
7 March 2023Publication of Octave 8.1.0, improved graphics backend and matlab compatibility[19]
14 March 2024Publication of Octave 9.1.0, general, matlab compatibility, and graphics improvements.[20]
7 June 2024Publication of Octave 9.2.0, bug and GUI fixes.[21]

Developments

[edit]

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]

Technical details

[edit]

Octave, the language

[edit]

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.

Octave programs consist of a list of function calls or ascript. The syntax ismatrix-based and provides various functions for matrix operations. It supports variousdata structures and allowsobject-oriented programming.[26]

Its syntax is very similar to MATLAB, and careful programming of a script will allow it to run on both Octave and MATLAB.[27]

Because Octave is made available under theGNU General Public License, it may be freely changed, copied and used.[8] The program runs onMicrosoft Windows and mostUnix andUnix-likeoperating systems, includingLinux,Android, andmacOS.[28][29][30]

Notable features

[edit]

Command and variable name completion

[edit]

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]

Command history

[edit]

When running interactively, Octave saves the commands typed in an internal buffer so that they can be recalled and edited.

Data structures

[edit]

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:1>x.a=1;x.b=[1,2;3,4];x.c="string";octave:2>x.aans=1octave:3>x.bans=1234octave:4>x.cans=stringoctave:5>xx=scalarstructurecontainingthefields:a=1b=1234c=string

Short-circuit Boolean operators

[edit]

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|.

Increment and decrement operators

[edit]
Main article:Increment and decrement operators

Octave includes the C-likeincrement and decrement operators++ and-- in both their prefix and postfix forms.Octave also doesaugmented assignment, e.g.x += 5.

Unwind-protect

[edit]

Octave supports a limited form ofexception handling modelled after theunwind_protect ofLisp. The general form of an unwind_protect block looks like this:

unwind_protectbodyunwind_protect_cleanupcleanupend_unwind_protect

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).

Variable-length argument lists

[edit]

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.

functions=plus(varargin)if(nargin==0)s=0;elses=varargin{1}+plus(varargin{2:nargin});endend

Variable-length return lists

[edit]

A function can be set up to return any number of values by using the special return valuevarargout. For example:

functionvarargout=multiassign(data)fork=1:nargoutvarargout{k}=data(:,k);endend

C++ integration

[edit]

It is also possible to execute Octave code directly in a C++ program. For example, here is a code snippet for callingrand([10,1]):

#include<octave/oct.h>...ColumnVectorNumRands(2);NumRands(0)=10;NumRands(1)=1;octave_value_listf_arg,f_ret;f_arg(0)=octave_value(NumRands);f_ret=feval("rand",f_arg,1);Matrixunis(f_ret(0).matrix_value());

C and C++ code can be integrated into GNU Octave by creating oct files, or using the MATLAB compatibleMEX files.

MATLAB compatibility

[edit]

Octave has been built with MATLAB compatibility in mind, and shares many features with MATLAB:

  1. Matrices as fundamental data type.
  2. Built-in support for complex numbers.
  3. Powerful built-in math functions and extensive function libraries.
  4. Extensibility in the form of user-defined functions.

Octave treats incompatibility with MATLAB as abug; therefore, it could be considered asoftware clone, which does not infringesoftware copyright as perLotus v. Borland court case.

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]

Syntax compatibility

[edit]

There are a few purposeful, albeit minor,syntax additionsArchived 2012-04-26 at theWayback Machine:

  1. Comment lines can be prefixed with the # character as well as the % character;
  2. VariousC-based operators++,--,+=, *=, /= are supported;
  3. Elements can be referenced without creating a new variable by cascaded indexing, e.g. [1:10](3);
  4. Strings can be defined with the double-quote " character as well as the single-quote ' character;
  5. 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;
  6. Blocks can also be terminated with more specificControl structure keywords, i.e., endif, endfor, endwhile, etc.;
  7. Functions can be defined within scripts and at the Octave prompt;
  8. Presence of a do-until loop (similar todo-while in C).

Function compatibility

[edit]

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:1>guidewarning:the'guide'functionisnotyetimplementedinOctavePleaseread<http://www.octave.org/missing.html>tolearnhowyoucancontributemissingfunctionality.error:'guide'undefinednearline1column1

User interfaces

[edit]

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.

GUI applications

[edit]

With Octave code, the user can create GUI applications. SeeGUI Development (GNU Octave (version 7.1.0)). Below are some examples:

Button, edit control, checkbox

# 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]);

Textbox

prompt={"Width","Height","Depth"};defaults={"1.10","2.20","3.30"};rowscols=[1,10;2,20;3,30];dims=inputdlg(prompt,"Enter Box Dimensions",rowscols,defaults);

Listbox with message boxes.

my_options={"An item","another","yet another"};[sel,ok]=listdlg("ListString",my_options,"SelectionMode","Multiple");if(ok==1)msgbox("You selected:");fori=1:numel(sel)msgbox(sprintf("\t%s",my_options{sel(i)}));endforelsemsgbox("You cancelled.");endif

Radiobuttons

# 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]);

Packages

[edit]

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.

Comparison with other similar software

[edit]

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]

Also theJulia programming language and its plotting capabilities has similarities with GNU Octave.

See also

[edit]

Notes

[edit]
  1. ^GPL-3.0-or-later since 2007-10-12.
  2. ^GPL-2.0-or-later from 1992-02-19 until 2007-10-11.

References

[edit]
  1. ^Rik (10 June 2015)."contributors.in". Retrieved14 June 2015.
  2. ^""Full-time development began in the Spring of 1992. The first alpha release was January 4, 1993, and version 1.0 was released February 17, 1994."".
  3. ^"Version 10.3.0 released". 23 September 2025. Retrieved16 October 2025.
  4. ^"Building - Octave".wiki.octave.org. GNU. Retrieved1 May 2018.
  5. ^"Basque, Belarusian, Catalan, Chinese, Dutch, English, French, German, Hungarian, Italian, Japanese, Latvian, Portuguese (Brazil), Portuguese (Portugal), Russian, Spanish, Turkish, Ukrainian".hg.savannah.gnu.org.
  6. ^"About GNU Octave".www.gnu.org. GNU. Retrieved1 May 2018.
  7. ^"Octave 9.2.0 Released".octave.org. 2024-06-07. Retrieved2024-11-05.
  8. ^abEaton, John W."About Octave". Retrieved2009-06-28.
  9. ^"GNU Octave Version 1".www.gnu.org.
  10. ^"GNU Octave Version 2".www.gnu.org.
  11. ^"GNU Octave Version 3".www.gnu.org.
  12. ^ab"GNU Octave Version 4.0".www.gnu.org.
  13. ^"GNU Octave 4.0.0 Released".www.gnu.org. 29 May 2015.
  14. ^"GNU Octave 4.0.1 Released".www.gnu.org. 23 March 2016.
  15. ^"GNU Octave 4.0.3 Released".www.gnu.org. 2 July 2016.
  16. ^"GNU Octave Version 5".www.gnu.org.
  17. ^"GNU Octave 6.1.0 Released".www.gnu.org. 26 November 2020.
  18. ^"GNU Octave 7.1.0 Released".www.gnu.org. 6 April 2022.
  19. ^"GNU Octave 8.1.0 Released".octave.org. 7 March 2023.
  20. ^"GNU Octave Version 9".octave.org. Retrieved2024-03-25.
  21. ^"Octave 9.2.0 released".octave.org. 7 June 2024. Retrieved2024-11-05.
  22. ^"Social Security Number Vulnerability Findings Relied on Supercomputing". 8 July 2009. Archived fromthe original on 29 February 2012.
  23. ^"Drop-in Acceleration of GNU Octave".NVIDIA Developer Blog. June 5, 2014.
  24. ^"GNU Octave - Controlling subprocesses". 14 November 2008. Archived fromthe original on 7 January 2009. Retrieved2009-01-28.
  25. ^"GNU Octave". Retrieved2009-01-28.
  26. ^"Summary of important user-visible changes for version 3.2". Retrieved2012-01-05.
  27. ^"FAQ: MATLAB compatibility". Archived fromthe original on 2011-11-21. Retrieved2009-04-04.
  28. ^"FAQ: Getting Octave". Archived fromthe original on 2011-11-21. Retrieved2009-04-04.
  29. ^"Top (GNU Octave (version 6.3.0))".octave.org.
  30. ^"Octave for Android - Octave".wiki.octave.org. Retrieved2021-08-23.
  31. ^Eaton, John W."Letting Readline Type For You".GNU Octave Reference Manual. Archived fromthe original on 2018-02-12. Retrieved2016-07-29.
  32. ^"FAQ - Octave".wiki.octave.org. Retrieved2022-12-05.
  33. ^"MATLAB Central Terms of Use".www.mathworks.com. Retrieved2022-12-05.
  34. ^"File Exchange Licensing FAQ".www.mathworks.com. Retrieved2022-12-05.
  35. ^"GNU Octave Version 3.8".www.gnu.org.
  36. ^Hageman, Steve (7 February 2014)."GNU Octave hits a high note".EDN.
  37. ^abTrappenberg, Thomas (2010).Fundamentals of Computational Neuroscience. Oxford University Press. p. 361.ISBN 978-0-19-956841-3.
  38. ^Muhammad, A; Zalizniak, V (2011).Practical Scientific Computing.Woodhead Publishing. p. 3.ISBN 978-0-85709-226-7.
  39. ^Megrey, Bernard A.; Moksness, Erlend (2008).Computers in Fisheries Research. Springer Science & Business Media. p. 345.ISBN 978-1-4020-8636-6.
  40. ^Kapuno, Raul Raymond (2008).Programming for Chemical Engineers Using C, C++, and MATLAB. Jones & Bartlett Publishers. p. 365.ISBN 978-1-934015-09-4.
  41. ^Herman, Russell L. (2013).A Course in Mathematical Methods for Physicists. CRC Press. p. 42.ISBN 978-1-4665-8467-9.
  42. ^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.ISBN 978-3-319-06790-2.
  43. ^"FreeMat".freemat.sourceforge.net. Retrieved22 February 2020.

Further reading

[edit]

External links

[edit]
Wikimedia Commons has media related toGNU Octave.
Wikibooks has a book on the topic of:Octave Programming Tutorial
History
Licenses
Software
Contributors
Other topics
Free
Discontinued
Proprietary
Open-source
Proprietary
Discontinued
Public domain
Open-source
Freeware
Commercial
Cross-platform
Windows only
Excel add-ons
Free
Proprietary
General
Software
packages
Community
Organisations
Licenses
Types and
standards
Challenges
Related
topics
International
National
Retrieved from "https://en.wikipedia.org/w/index.php?title=GNU_Octave&oldid=1317113158"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp