GNU Octave - GNU Octave

GNU Octave
Gnu-oktav-logo.svg
GNUOctave430.png
GNU Octave 4.3.0+ kører på Linux
Udvikler (er) John W. Eaton og mange andre
Første udgivelse 1988 ; 33 år siden ( 1988 )
Stabil udgivelse
6.3.0 / 11. juli 2021 ; for 3 måneder siden ( 11. juli 2021 )
Udgivelsesversion
6.0.90a / 28. august 2020 ; 13 måneder siden ( 2020-08-28 )
Depot
Skrevet i C , C ++ , Fortran
Operativ system Windows , macOS , Linux , BSD
Tilgængelig i 17 sprog
Type Videnskabelig databehandling
Licens 2007: GPL-3.0 eller senere
1992: GPL-2.0 eller nyere
Internet side gnu .org /software /octave /

GNU Octave er software med et programmeringssprog på højt niveau , primært beregnet til numeriske beregninger . Octave hjælper med at løse lineære og ikke -lineære problemer numerisk og til at udføre andre numeriske eksperimenter ved hjælp af et sprog, der for det meste er kompatibelt med MATLAB . Det kan også bruges som et batchorienteret sprog. Da det er en del af GNU -projektet , er det gratis software under vilkårene i GNU General Public License .

Andre gratis alternativer til MATLAB inkluderer Scilab og FreeMat . Octave er mere kompatibel med MATLAB end Scilab er, og FreeMat er ikke blevet opdateret siden juni 2013.

Historie

Projektet blev udtænkt omkring 1988. Først var det meningen, at det skulle være ledsager til et kemisk reaktordesignkursus. Virkelig udvikling blev startet af John W. Eaton i 1992. Den første alfa -udgivelse går tilbage til 4. januar 1993, og den 17. februar 1994 blev version 1.0 frigivet. Version 4.0.0 blev frigivet den 29. maj 2015.

Programmet er opkaldt efter Octave Levenspiel , en tidligere professor i hovedforfatteren. Levenspiel var kendt for sin evne til at udføre hurtige back-of-the-envelope-beregninger .

Udviklingshistorie

Tid Handling
1988/1989 1. diskussioner (bog og software)
Februar 1992 Start af udvikling
Januar 1993 News in Web (Version 0.60)
Februar 1994 1. publikation (version 1.0.0 til 1.1.1)
December 1996 2. publikation (version 2.0.x) med Windows Port ( Cygwin )
Marts 1998 Version 2.1
November 2004 Version 2.9 (DEV Version af 3.0)
December 2007 Offentliggørelse af version 3.0 (milepæl)
Juni 2009 Offentliggørelse af version 3.2 (milepæl)
8. februar 2011 Version 3.4.0 (milepæl)
22. februar 2012 Offentliggørelse af Octave 3.6.1 (milepæl)
31. december 2013 Offentliggørelse af Octave 3.8.0 (eksperimentel GUI)
29. maj 2015 Version 4.0.0 (stabil GUI og ny syntaks til OOP )
14. november 2016 Version 4.2.0 (gnuplot 4.4+)
30. april 2018 Version 4.4.0 (nyt mål for GUI QT Toolkit, FLTK -værktøjskassen er ikke udfaset, og der er ingen tidsplan for fjernelse - mens den ikke længere prioriteres)
1. marts 2019 Offentliggørelse af Octave 5.1.0 (QT5 foretrukket, Qt 4.8 minimum), hiDpi -understøttelse
31. januar 2020 Offentliggørelse af Octave 5.2.0 (QT5 foretrækkes)
26. november 2020 Offentliggørelse af Octave 6.1.0 (QT5 foretrækkes, Qt 4.x udfaset for fjernelse i 7)
20. februar 2021 Offentliggørelse af Octave 6.2.0 (foretrukket QT5), Bugfix, forbedret matlab -syntaksunderstøttelse

Udviklinger

Udover brug på stationære computere til personlig videnskabelig databehandling, bruges Octave i akademia og industri. For eksempel blev Octave brugt på en massiv parallelcomputer i Pittsburgh Supercomputing Center til at finde sårbarheder i forbindelse med gætte på cpr -numre.

Acceleration med OpenCL eller CUDA er også mulig ved brug af GPU'er.

Tekniske detaljer

Octave, sproget

Octave -sproget er et fortolket programmeringssprog. Det er et struktureret programmeringssprog (ligner C ) og understøtter mange almindelige C -standardbiblioteksfunktioner , og også visse UNIX -systemopkald og funktioner. Det understøtter imidlertid ikke at videregive argumenter ved reference.

Oktavprogrammer består af en liste over funktionsopkald eller et script . Syntaksen er matrixbaseret og giver forskellige funktioner til matrixoperationer. Det understøtter forskellige datastrukturer og tillader objektorienteret programmering .

Dens syntaks ligner meget MATLAB, og omhyggelig programmering af et script giver det mulighed for at køre på både Octave og MATLAB.

Fordi Octave stilles til rådighed under GNU General Public License , kan den frit ændres, kopieres og bruges. Programmet kører på Microsoft Windows og de fleste Unix og Unix-lignende operativsystemer , herunder Linux , Android og macOS .

Bemærkelsesværdige funktioner

Kommando og variabelnavnafslutning

Indtastning af et TAB -tegn på kommandolinjen får Octave til at forsøge at fuldføre variabel-, funktions- og filnavne (svarende til Bash ' tabulatorafslutning ). Octave bruger teksten før markøren som den første del af navnet for at fuldføre.

Kommandohistorik

Når de kører interaktivt, gemmer Octave kommandoerne, der er skrevet i en intern buffer, så de kan genkaldes og redigeres.

Datastrukturer

Octave inkluderer en begrænset mængde støtte til organisering af data i strukturer. I dette eksempel ser vi en struktur "x" med elementerne "a", "b" og "c" (henholdsvis et heltal, en matrix og en streng):

octave:1> x.a = 1; x.b = [1, 2; 3, 4]; x.c = "string";
octave:2> x.a
ans =  1
octave:3> x.b
ans =

   1   2
   3   4

octave:4> x.c
ans = string
octave:5> x
x =
{
  a =  1
  b =

     1   2
     3   4

  c = string
}

Kortslutning boolske operatører

Octaves &&og ||logiske operatorer evalueres på en kortslutning (som de tilsvarende operatorer i C- sproget), i modsætning til element-for-element-operatorerne &og |.

Øg og reducer operatører

Octave inkluderer de C-lignende inkrement- og decrement-operatorer ++ og --i både deres præfiks- og postfix-former. Octave udfører også forstørret opgave , f.eks x += 5.

Slap af, beskyt

Oktav understøtter en begrænset form for undtagelse håndtering modelleret efter unwind_protectaf Lisp . Den generelle form for en unwind_protect -blok ser sådan ud:

unwind_protect
   body
unwind_protect_cleanup
   cleanup
end_unwind_protect

Som hovedregel genkender GNU Octave som afslutning af et givet blockenten søgeordet end(som er kompatibelt med MATLAB -sproget) eller et mere specifikt søgeord . Som en konsekvens kan en blok afsluttes enten med søgeordet som i eksemplet eller med det mere bærbare søgeord . end_blockunwind_protectend_unwind_protectend

Den oprydning del af blokken er altid henrettet. I tilfælde af at en undtagelse rejses af kropsdelen , udføres oprydning umiddelbart før spredning af undtagelsen uden for blokken unwind_protect.

GNU Octave understøtter også en anden form for undtagelseshåndtering (kompatibel med MATLAB -sproget):

try
   body
catch
   exception_handling
end

Denne sidstnævnte form adskiller sig fra en unwind_protectblok på to måder. For det første udføres undtagelseshåndtering kun, når en undtagelse rejses af kroppen . For det andet, efter eksekveringen af undtagelsesbehandling håndteres undtagelsen ikke uden for blokken (medmindre en rethrow( lasterror )erklæring eksplicit indsættes i undtagelseshåndteringskoden ).

Argumentlister med variabel længde

Octave har en mekanisme til håndtering af funktioner, der tager et uspecificeret antal argumenter uden eksplicit øvre grænse. Hvis du vil angive en liste med nul eller flere argumenter, skal du bruge det særlige argument vararginsom det sidste (eller eneste) argument på listen.

function s = plus (varargin)
   if (nargin==0)
      s = 0;
   else
      s = varargin{1} + plus (varargin{2:nargin});
   end
end

Returlister med variabel længde

En funktion kan oprettes til at returnere et vilkårligt antal værdier ved hjælp af den særlige returværdi varargout. For eksempel:

function varargout = multiassign (data)
   for k=1:nargout
      varargout{k} = data(:,k);
   end
end

C ++ integration

Det er også muligt at eksekvere Octave -kode direkte i et C ++ - program. Her er for eksempel et kodestykke til opkald rand([10,1]):

#include <octave/oct.h>
...
ColumnVector NumRands(2);
NumRands(0) = 10;
NumRands(1) = 1;
octave_value_list f_arg, f_ret;
f_arg(0) = octave_value(NumRands);
f_ret = feval("rand", f_arg, 1);
Matrix unis(f_ret(0).matrix_value());

C- og C ++ - kode kan integreres i GNU Octave ved at oprette oct -filer eller bruge de MATLAB -kompatible MEX -filer .

MATLAB -kompatibilitet

Octave er blevet bygget med MATLAB -kompatibilitet i tankerne og deler mange funktioner med MATLAB:

  1. Matricer som grundlæggende datatype.
  2. Indbygget understøttelse af komplekse tal.
  3. Kraftfulde indbyggede matematiske funktioner og omfattende funktionsbiblioteker.
  4. Udvidelse i form af brugerdefinerede funktioner.

Octave behandler uforenelighed med MATLAB som en fejl ; derfor kunne det betragtes som en software -klon , som ikke krænker softwareophavsret i henhold til Lotus v. Borland retssag.

MATLAB -scripts fra MathWorks 'FileExchange -lager er i princippet kompatible med Octave. Men mens de ofte leveres og uploadet af brugere under en oktav kompatibel og ordentlig open source BSD-licensen , de FileExchange Betingelser for brug forbyder enhver brug ved siden af MathWorks' proprietære Matlab.

Syntaks kompatibilitet

Der er et par målrettede, omend mindre, syntaks tilføjelser :

  1. Kommentarlinjer kan være præfiks med # -tegnet samt % -tegnet;
  2. Forskellige C-baserede operatører ++ , - , += , *=, /= understøttes;
  3. Der kan refereres til elementer uden at oprette en ny variabel ved kaskadeindeksering, f.eks. [1:10] (3);
  4. Strenge kan defineres med det dobbelte citat "tegn" samt det enkelte citat "tegn;
  5. Når variabeltypen er enkelt (et flydende punktnummer med en præcision), beregner Octave " middelværdien " i enkeltdomænet (MATLAB i dobbeltdomæne ), hvilket er hurtigere, men giver mindre præcise resultater;
  6. Blokke kan også afsluttes med mere specifikke kontrolstruktursøgeord , dvs. endif, endfor, endwhile osv .;
  7. Funktioner kan defineres i scripts og ved Octave -prompten;
  8. Tilstedeværelse af en do-until-loop (ligner do-while i C).

Funktionskompatibilitet

Mange, men ikke alle, af de mange MATLAB -funktioner er tilgængelige i GNU Octave, nogle af dem er tilgængelige via pakker i Octave Forge . De tilgængelige funktioner som en del af enten Core Octave- eller Forge -pakker er angivet online .

En liste over utilgængelige funktioner er inkluderet i funktionen Octave __unimplemented.m__. Uimplementerede funktioner er også angivet under mange Octave Forge -pakker i Octave Wiki .

Når en ikke -implementeret funktion kaldes, vises følgende fejlmeddelelse:

  octave:1> guide
  warning: the 'guide' function is not yet implemented in Octave

  Please read <http://www.octave.org/missing.html> to learn how you can contribute missing functionality.
  error: 'guide' undefined near line 1 column 1

Brugergrænseflader

Octave leveres med en officiel grafisk brugergrænseflade (GUI) og et integreret udviklingsmiljø (IDE) baseret på Qt . Det har været tilgængeligt siden Octave 3.8, og er blevet standardgrænsefladen (over kommandolinjegrænsefladen ) med frigivelsen af ​​Octave 4.0. Det blev godt modtaget af EDN-bidragyder, der sagde "[Octave] har nu en meget brugbar GUI."

Flere tredjeparts grafiske front-end er også blevet udviklet, f.eks. ToolboX til kodning af uddannelse.

GUI -applikationer

Med Octave -kode kan brugeren oprette GUI -applikationer GUI Development (GNU Octave (version 6.3.0)) . Nedenfor er nogle eksempler:

Knap, rediger kontrol, afkrydsningsfelt

# create figure and panel on it
f = figure;
# create a button (default style)
b1 = uicontrol (f, "string", "A Button", "position",[10 10 150 40]);
# create an edit control
e1 = uicontrol (f, "style", "edit", "string", "editable text", "position",[10 60 300 40]);
# create a checkbox
c1 = uicontrol (f, "style", "checkbox", "string", "a checkbox", "position",[10 120 150 40]);

Tekstboks

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

Listeboks med meddelelsesbokse.

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

Radioknapper

# create figure and panel on it
f = figure;
# create a button group
gp = uibuttongroup (f, "Position", [ 0 0.5 1 1])
# create a buttons in the group
b1 = uicontrol (gp, "style", "radiobutton", "string", "Choice 1", "Position", [ 10 150 100 50 ]);
b2 = uicontrol (gp, "style", "radiobutton", "string", "Choice 2", "Position", [ 10 50 100 30 ]);
# create a button not in the group
b3 = uicontrol (f, "style", "radiobutton","string", "Not in the group","Position", [ 10 50 100 50 ]);

Pakker

Octave har også gratis pakker til rådighed. Disse pakker er placeret på Octave -Forge Octave Forge - Packages . Tilgængelige pakker er:

  • bim - Pakke til løsning af Diffusion Advection Reaction (DAR) Partielle differentialligninger
  • bsltl - BSLTL -pakken er en gratis samling af OCTAVE/MATLAB -rutiner til arbejde med biospeckle laserteknikken
  • cgi - Common Gateway Interface til Octave
  • kommunikation - Digital kommunikation, fejlkorrigeringskoder (kanalkode), kildekodefunktioner, modulering og Galois -felter
  • kontrol - Computer -Aided Control System Design (CACSD) Værktøjer til GNU Octave, baseret på det gennemprøvede SLICOT -bibliotek
  • dataudjævning - Algoritmer til udjævning af støjende data
  • database - Interface til SQL -databaser, i øjeblikket kun postgresql ved hjælp af libpq
  • dataframe - Datamanipuleringsværktøjskasse svarende til R -data
  • dicom - Digital kommunikation i medicin (DICOM) fil io
  • divand - divand udfører en n -dimensionel variationsanalyse (interpolation) af vilkårligt placerede observationer
  • doctest -Octave-Forge Doctest-pakken finder specielt formaterede blokke med eksempelkode i dokumentationsfiler
  • økonometri - Økonometri -funktioner, herunder MLE- og GMM -baserede teknikker
  • fem -fenics - pkg til opløsning af partielle differentialligninger baseret på fenics
  • økonomisk - Monte Carlo -simulering, optioner prissætningsrutiner, økonomisk manipulation, plottefunktioner og yderligere datomanipuleringsværktøjer
  • passer - Octave -FITS -pakken indeholder funktioner til læsning og skrivning af FITS (Flexible Image Transport System) -filer
  • fpl - Indsamling af rutiner til eksport af data produceret af Finite Elements eller Finite Volume Simulations i formater, der bruges af nogle visualiseringsprogrammer
  • fuzzy-logic toolkit -Et for det meste MATLAB-kompatibelt fuzzy logic-værktøjskasse til Octave (installeres ikke på grund af mangeårig fejl)
  • ga - Genetisk optimeringskode
  • generelt - Generelle værktøjer til Octave
  • generere_html - Denne pakke indeholder funktioner til generering af HTML -sider, der indeholder hjælpetekster til et sæt funktioner
  • geometri - Bibliotek til geometrisk computing, der udvider MatGeom -funktioner
  • gsl - Oktavbindinger til GNU Scientific Library
  • image - Octave -forge Image -pakken indeholder funktioner til behandling af billeder
  • billedoptagelse- Octave-forge Image Acquisition-pakken indeholder funktioner til at tage billeder fra tilsluttede enheder
  • instrument -kontrol - Lavt niveau I/O -funktioner til serielle, i2c, parallelle, tcp, gpib, vxi11, udp og usbtmc grænseflader
  • interval - Intervallpakken til reelt værdsat intervallets aritmetik gør det muligt at evaluere funktioner over delmængder af deres domæne
  • io - Input/Output i eksterne formater f.eks. Excel
  • niveau-sæt -Rutiner til beregning af tidsudviklingen for niveausæt-ligningen og udtrækning af geometriske oplysninger fra niveausæt-funktionen
  • lineær -algebra - Yderligere lineær algebra -kode, herunder generelle SVD- og matrixfunktioner
  • lssa - En pakke, der implementerer værktøjer til at beregne spektrale nedbrydninger af tidsserier med uregelmæssigt mellemrum
  • ltfat - Large Time/Frequency Analysis Toolbox (LTFAT) er en MATLAB/Octave værktøjskasse til arbejde med tidsfrekvensanalyse, bølger og signalbehandling
  • mapping - Enkel mapping og GIS .shp og raster -filfunktioner
  • mataveid - Systemidentifikationspakke til både MATLAB og GNU Octave
  • matavecontrol - Kontrolværktøjskasse til både MATLAB og GNU Octave
  • diverse - Diverse værktøjer, der ikke ville passe andre steder
  • mpi - Oktavbindinger til grundlæggende Message Passing Interface (MPI) funktioner til parallel computing
  • msh - Opret og administrer trekantede og tetraedriske masker til Finite Element eller Finite Volume PDE solvers
  • mvn - Multivariate normal distribution clustering og utility funktioner
  • nan - En værktøjskasse til statistik og maskinlæring til data med og uden manglende værdier
  • ncarray - Få adgang til en enkelt eller en samling af NetCDF -filer som et flerdimensionalt array
  • netcdf - Et MATLAB -kompatibelt NetCDF -interface til Octave
  • nurbs -Indsamling af rutiner til oprettelse og manipulation af Non-Uniform Rational B-Splines (NURBS), baseret på NURBS værktøjskasse af Mark Spink
  • ocs - Pakke til løsning af DC- og forbigående elektriske kredsløbsligninger
  • octclip - Denne pakke giver brugerne mulighed for at udføre boolske operationer med polygoner ved hjælp af Greiner -Hormann -algoritmen
  • octproj - Denne pakke giver brugerne mulighed for at kalde funktioner i PROJ
  • optik - Funktioner, der dækker forskellige aspekter af optik
  • optim - Ikke -lineær optimeringsværktøjskasse
  • optiminterp - En optimal interpolationsværktøjskasse til oktav
  • parallel - Parallel udførelsespakke
  • quaternion - Quaternion -pakke til GNU Octave, indeholder en quaternion -klasse med overbelastede operatorer
  • - Køen pakke indeholder funktioner til kø netværk og Markov kæder analyse
  • secs1d - En Drift -Diffusion -simulator til 1d halvlederenheder
  • secs2d - En Drift -Diffusion -simulator til 2d halvlederenheder
  • secs3d - En Drift -Diffusion -simulator til 3d halvlederenheder
  • signal - Signalbehandlingsværktøjer, herunder filtrerings-, vindues- og displayfunktioner
  • sockets - Socketfunktioner til netværk inden for oktav
  • sparsersb - Interface til librsb -pakken, der implementerer RSB sparse matrix -formatet til hurtige sparsomme matrixberegninger med delt hukommelse
  • splines - Yderligere spline -funktioner
  • statistik - Yderligere statistikfunktioner for Octave
  • stk - STK er en (ikke sådan) lille værktøjskasse til Kriging
  • strenge - Yderligere funktioner til manipulation og analyse af strenge
  • struct - Yderligere strukturmanipulationsfunktioner
  • symbolsk - Octave -Forge Symbolic -pakken tilføjer symbolske beregningsfunktioner til GNU Octave
  • tisean - havn i TISEAN 3
  • tsa - Stokastiske begreber og maksimale entropimetoder til tidsserieanalyse
  • vibes - VIBes API giver en mulighed for nemt at vise resultater (kasser, belægninger) fra intervalmetoder
  • video - En indpakning til ffmpeg's libavformat og libavcodec, der implementerer addframe, avifile, aviinfo og aviread
  • vrml - 3D -grafik ved hjælp af VRML
  • windows - Giver COM -interface og yderligere funktionalitet på Windows
  • zeromq - ZeroMQ bindinger til GNU Octave

Se også

Noter

Referencer

Yderligere læsning

eksterne links