GNU -octaaf
![]() | |
![]() GNU Octave 4.3.0+ draait verder Linux | |
Developer (s) | John W. Eaton en vele anderen[1] |
---|---|
Eerste uitgave | 4 januari 1993 17 februari 1994 (Versie 1.0)[2] | (Eerste Alpha -release)
Stabiele vrijlating | |
Opslagplaats | |
Geschreven in | C ++ (Main), Octave zelf (scripts), C (wrapper -code), Fortran (lineaire algebra wrapper -code)[5] |
Besturingssysteem | ramen, macos, Linux, BSD |
Beschikbaar in | 18 talen[6] |
Type | Wetenschappelijk computergebruik |
Licentie | 2007: GPL-3.0 of-Later[a] 1992: GPL-2.0 of-Later[b] |
Website | GNU |
GNU -octaaf is een op hoog niveau programmeertaal voornamelijk bedoeld voor Wetenschappelijk computergebruik en numerieke berekening. Octaaf helpt bij het numeriek lineaire en niet -lineaire problemen op te lossen, en voor het uitvoeren van andere numerieke experimenten met behulp van een taal die meestal compatibel is met Matlab. Het kan ook worden gebruikt als een op batch georiënteerd taal. Als onderdeel van GNU -project, het is gratis software onder de voorwaarden van de GNU General Public License.
Geschiedenis
Het project werd rond 1988 bedacht.[7] In het begin was het bedoeld als een metgezel voor een ontwerppermijn voor chemische reactor. Volledige ontwikkeling werd gestart door John W. Eaton in 1992. De eerste Alpha -release dateert uit 4 januari 1993 en op 17 februari 1994 werd versie 1.0 uitgebracht. Versie 7.1.0 werd uitgebracht op 6 april 2022.[8]
Het programma is vernoemd Octaaf Levenspiel, een voormalige professor van de hoofdauteur. Levenspiel stond bekend om zijn vermogen om snel te presteren berekeningen van de achtergrond van de envelop.[9]
Ontwikkelingsgeschiedenis
Tijd | Actie |
---|---|
1988/1989 | 1e discussies (boek en software) |
Februari 1992 | Begin van de ontwikkeling |
Januari 1993 | Nieuws in web (versie 0.60) |
Februari 1994 | 1e publicatie (versie 1.0.0 tot 1.1.1)[10] |
December 1996 | 2e publicatie (versie 2.0.x) met Windows Port (Cygwin)[11] |
Maart 1998 | Versie 2.1 |
November 2004 | Versie 2.9 (Dev -versie van 3.0)[12] |
December 2007 | Publicatie van versie 3.0 (mijlpaal)[13] |
Juni 2009 | Publicatie van versie 3.2 (mijlpaal)[14] |
8 februari 2011 | Versie 3.4.0 (mijlpaal)[15] |
22 februari 2012 | Publicatie van Octave 3.6.1 (mijlpaal)[16][17] |
31 december 2013 | Publicatie van Octave 3.8.0 (experimentele GUI)[18][19][20] |
29 mei 2015 | Versie 4.0.0 (stabiele GUI en nieuwe syntaxis voor Oop)[21][22][23][24] |
14 november 2016 | Versie 4.2.0 (Gnuplot 4.4+)[25][26][27][28] |
30 april 2018 | Versie 4.4.0 (nieuw doel voor GUI QT Toolkit, de FLTK -toolkit is niet verouderd en er is geen schema voor het verwijderen ervan - hoewel niet langer prioriteit)[29][30][31] |
1 maart 2019 | Publicatie van Octave 5.1.0 (QT5 Preferred, QT 4.8 Minimum), HIDPI -ondersteuning[32] |
31 januari 2020 | Publicatie van Octave 5.2.0 (QT5 Preferred)[33] |
26 november 2020 | Publicatie van Octave 6.1.0 (QT5 Preferred, QT 4.x afgeschaft voor verwijdering in 7)[34] |
20 februari 2021 | Publicatie van Octave 6.2.0 (QT5 Preferred), Bugfix, verbeterde MATLAB -syntaxisondersteuning[35] |
6 april 2022 | Publicatie van Octave 7.1.0 (QT5 Preferred), verbeterde compatibiliteit met grafische backend en MATLAB -functie[36] |
Ontwikkelingen
Naast gebruik op desktops voor persoonlijk wetenschappelijk computergebruik, wordt octaaf gebruikt in de academische wereld en de industrie. Octaaf werd bijvoorbeeld op een enorme parallel computer op Pittsburgh Supercomputing Center Om kwetsbaarheden te vinden die verband houden met het raden van sofi -nummers.[37]
Versnelling met OpenCL of Cuda is ook mogelijk met het gebruik van GPU's.[38]
Technische details
- Octaaf is geschreven in C ++ de ... gebruiken C ++ standaardbibliotheek.
- Octaaf gebruikt een tolk om de octaaf -scripttaal uit te voeren.
- Octaaf is uitbreidbaar met behulp van dynamisch laadbare modules.
- Octaaf tolk heeft een OpenGL-Gebaseerde grafische motor om percelen, grafieken en grafieken te maken en om ze op te slaan of af te drukken. Alternatief, gnuplot kan voor hetzelfde doel worden gebruikt.
- Octaaf bevat een Grafische gebruikersinterface (GUI) Naast de traditionele Opdrachtregelinterface (Cli); zien #Gebruiker -interfaces voor details.
Octaaf, de taal
De octaaftaal is een geïnterpreteerde programmeertaal. Het is een gestructureerde programmering taal (vergelijkbaar met C) en ondersteunt veel gebruikelijk C Standaardbibliotheek functies, en ook zeker Unix Systeemaanroepen en functies.[39] Het ondersteunt echter geen passerende argumenten door verwijzing[40] Hoewel functieargumenten zijn Kopieer-op-schrijven Om onnodige duplicatie te voorkomen.
Octaafprogramma's bestaan uit een lijst met functieaanroepen of een script. De syntaxis is Matrix-Gebaseerd en biedt verschillende functies voor matrixbewerkingen. Het ondersteunt verschillende data structuren en staat toe object georiënteerd programmeren.[41]
De syntaxis lijkt erg op MATLAB, en zorgvuldig programmeren van een script zal het in staat stellen zowel op octaaf als MATLAB te draaien.[42]
Omdat octaaf beschikbaar wordt gesteld onder de GNU General Public License, het kan vrijelijk worden gewijzigd, gekopieerd en gebruikt.[9] Het programma loopt verder Microsoft Windows en het meest Unix en Unix-achtig besturingssystemen, inclusief Linux, Android, en macos.[43][44][45]
Opmerkelijke functies
Opdracht en voltooiing van variabele naam
Het typen van een tab -teken op de opdrachtregel zorgt ervoor dat Octave probeert de variabele, functie en bestandsnamen te voltooien (vergelijkbaar met Bashen's tabblad voltooiing). Octave gebruikt de tekst voor de cursor als het eerste gedeelte van de naam om te voltooien.[46]
Commandogeschiedenis
Wanneer interactief wordt uitgevoerd, slaat Octave de opdrachten op die in een interne buffer zijn getypt zodat ze kunnen worden opgeroepen en bewerkt.
Data structuren
Octave bevat een beperkte hoeveelheid ondersteuning voor het organiseren van gegevens in structuren. In dit voorbeeld zien we een structuur x met elementen a, b, en c, (een geheel getal, een array en een string, respectievelijk):
octaaf:1> x.a = 1; x.b = [1, 2; 3, 4]; x.c = "snaar"; octaaf:2> x.a Ans = 1 octaaf:3> x.b Ans = 1 2 3 4 octaaf:4> x.c Ans = snaar octaaf:5> x x = { a = 1 b = 1 2 3 4 c = snaar }
Kortsluit Booleaanse operators
Octaaf &&
en ||
logisch operators worden geëvalueerd in een kortsluiting mode (zoals de bijbehorende operators in de C taal), in tegenstelling tot de element-element-operators &
en |
.
Instap- en verlagingsoperators
Octaaf omvat de C-achtige Instap- en verlagingsoperators ++
en --
in zowel hun voorvoegsel- als postfix -vormen. Octaaf doet ook dat augmented opdracht, b.v. x += 5
.
Ontspannen
Octaaf ondersteunt een beperkte vorm van uitzonderingsbehandeling gemodelleerd naar de ongestond_protect
van Lisp. De algemene vorm van een Underind_Protect -blok ziet er zo uit:
ongestond_protect lichaam underind_protect_cleanup schoonmaken end_unwind_protect
Als algemene regel erkent GNU Octave als beëindiging van een gegeven blok
Ofwel het trefwoord einde
(die compatibel is met de MATLAB -taal) of een specifieker trefwoord end_block
. Als gevolg hiervan, een ongestond_protect
blok kan worden beëindigd met het trefwoord end_unwind_protect
zoals in het voorbeeld, of met het meer draagbare trefwoord einde
.
De schoonmaken Een deel van het blok wordt altijd uitgevoerd. In het geval dat een uitzondering wordt verhoogd door de lichaam een deel, schoonmaken wordt uitgevoerd onmiddellijk voordat de uitzondering buiten het blok wordt verspreid ongestond_protect
.
GNU Octave ondersteunt ook een andere vorm van uitzonderingsbehandeling (compatibel met de MATLAB -taal):
proberen lichaam vangst uitzondering_handling einde
Deze laatste vorm verschilt van een ongestond_protect
Blok op twee manieren. Eerst, uitzondering_handling wordt alleen uitgevoerd wanneer een uitzondering wordt verhoogd door lichaam. Ten tweede, na de uitvoering van uitzondering_handling De uitzondering wordt niet buiten het blok gepropageerd (tenzij a Rethrow (Lasterror)
verklaring wordt expliciet ingevoegd binnen de uitzondering_handling code).
Argumentlijsten met variabele lengte
Octave heeft een mechanisme voor het verwerken van functies die een niet -gespecificeerd aantal argumenten nemen zonder expliciete bovengrens. Gebruik het speciale argument om een lijst met nul of meer argumenten op te geven varargin
als het laatste (of enige) argument in de lijst.
functie s = plus (varargin) als (nargin==0) s = 0; anders s = varargin{1} + plus (varargin{2:nargin}); einde einde
Returnlijsten met variabele lengte
Een functie kan worden ingesteld om een willekeurig aantal waarden te retourneren met behulp van de speciale retourwaarde varargout
. Bijvoorbeeld:
functie varargout = multiassign (gegevens) voor k=1:nargout varargout{k} = gegevens(:,k); einde einde
C ++ Integratie
Het is ook mogelijk om octaafcode rechtstreeks in een C ++ -programma uit te voeren. Hier is bijvoorbeeld een codefragment om te bellen Rand ([10,1])
:
#erbij betrekken ... Kolomvector Numrands(2); Numrands(0) = 10; Numrands(1) = 1; octave_value_list f_arg, tobben; f_arg(0) = octave_value(Numrands); tobben = feval("rand", f_arg, 1); Matrix uniis(tobben(0).matrix_value());
C- en C ++ -code kan worden geïntegreerd in GNU Octave door OCT -bestanden te maken of de MATLAB -compatibel te gebruiken Mex -bestanden.
MATLAB -compatibiliteit
Octave is gebouwd met MATLAB -compatibiliteit in gedachten en deelt veel functies met MATLAB:
- Matrices als fundamenteel gegevenstype.
- Ingebouwde ondersteuning voor complexe nummers.
- Krachtige ingebouwde wiskundefuncties en uitgebreide functiebibliotheken.
- Uitbreidbaarheid in de vorm van door de gebruiker gedefinieerde functies.
Octaaf behandelt onverenigbaarheid met matlab als een beestje; Daarom kan het worden beschouwd als een softwarekloon, die niet inbreuk maakt op Software Copyright vanaf Lotus v. Borland rechtszaak.
Matlab -scripts van de MathWorks'Fileexchange Repository is in principe compatibel met Octave. Hoewel ze vaak worden verstrekt en geüpload door gebruikers onder een octaaf compatibel en juist open source BSD -licentie, de Fereexchange Gebruiksvoorwaarden Verbod enig gebruik naast MathWorks ' bezit Matlab.[47][48][49]
Syntaxiscompatibiliteit
Er zijn een paar doelgerichte, zij het minor, Syntaxis toevoegingen:
- Opmerking Lijnen kunnen worden voorafgegaan met het # teken en het% -karakter;
- Verscheidene C-gebaseerd op C operators ++, --, +=, *=, /= worden ondersteund;
- Elementen kunnen worden verwezen zonder een nieuwe variabele te maken door cascade -indexering, b.v. [1:10] (3);
- Strijkers kan worden gedefinieerd met de dubbele Quote "Character en het personage van één Quote;
- Wanneer het variabele type is enkel (Een drijvende-komma met één precisie), Octave berekent de "gemeen"In de single-domein (matlab in dubbele domein) die sneller is maar minder nauwkeurige resultaten oplevert;
- Blokken kunnen ook worden beëindigd met meer specifiek Controlestructuur Sleutelwoorden, d.w.z. endif, endfor, einde, enz.;
- Functies kunnen worden gedefinieerd in scripts en bij de octaafprompt;
- Aanwezigheid van een do-to -il-lus (vergelijkbaar met doen terwijl in c).
Functiecompatibiliteit
Veel, maar niet alle, van de vele Matlab -functies zijn beschikbaar in GNU Octave, sommige toegankelijk via pakketten in Octaafmordel. De functies die beschikbaar zijn als onderdeel van een van beide octaaf- of smederijpakketten worden vermeld online.
Een lijst met niet -beschikbare functies is opgenomen in de octaaffunctie __ unimplemented.m__
. Niet -geïmplementeerde functies worden ook vermeld onder vele octaafmorge -pakketten in de Octaaf wiki.
Wanneer een niet -geïmplementeerde functie wordt genoemd, wordt het volgende foutbericht getoond:
octaaf:1> gids waarschuwing: de 'gids' functie is niet nog geïmplementeerd in Octaaf Alstublieft lezen <http://WWW.octaaf.borg/missend.HTML> tot leren hoe jij kan bijdrage leveren missend functie. fout: 'gids' ongedefinieerd in de buurt lijn 1 kolom 1
Gebruikersinterfaces
Octaaf komt met een officiële grafische gebruikersinterface (GUI) en een geïntegreerde ontwikkelomgeving (IDE) gebaseerd op QT. Het is beschikbaar sinds Octave 3.8,[18] en is de standaardinterface geworden (over de opdrachtregelinterface) met de release van Octave 4.0.[21] Het werd goed ontvangen door EDN-medewerker, die zei: "[Octave] heeft nu een zeer werkbare GUI."[50]
Verschillende grafische front-ends van 3e partijen zijn ook ontwikkeld, zoals Gereedschapskist voor het coderen van onderwijs.
GUI -toepassingen
Met octaafcode kan de gebruiker GUI -applicaties maken. Zien GUI Development (GNU Octave (versie 7.1.0)). Hieronder staan enkele voorbeelden:
Knop, bewerkingsbediening, selectievakje
# Maak een figuur en paneel erop f = figuur; # Een knop maken (standaardstijl) B1 = uicontrol (f, "snaar", "Een knop", "positie", [10 10 150 40]); # Maak een bewerkingscontrole E1 = uicontrol (f, "stijl", "Bewerk", "snaar", "bewerkbare tekst", "positie", [10 60 300 40]); # Maak een selectievakje aan C1 = uicontrol (f, "stijl", "selectievakje", "snaar", "Een selectievakje", "positie", [10 120 150 40]);
Tekstveld
snel = {"Breedte", "Hoogte", "Diepte"}; standaardinstellingen = {"1.10", "2.20", "3.30"}; rijen = [1,10; 2,20; 3,30]; dimmen = inputdlg (snel, "Voer de dimensies van het vak in" in, rijen, standaardinstellingen);
Listbox met berichtenvakken.
my_options = {"Een item", "een ander", "nog een ander"}; [sel, OK] = listdlg ("Liststring", my_options, "Selectiemode", "Meerdere"); als (OK == 1) msgbox ("Je hebt geselecteerd:"); voor i = 1:getal (sel) msgbox (sprintf ("\ t%s", my_options{sel(i)})); beëindigen anders msgbox ("Je hebt geannuleerd."); stop als
Radio knoppen
# Maak een figuur en paneel erop f = figuur; # Maak een knopgroep maken huisarts = uibuttongroup (f, "Positie", [ 0 0,5 1 1])) # Maak een knoppen in de groep B1 = uicontrol (huisarts, "stijl", "Radio knop", "snaar", "Keuze 1", "Positie", [ 10 150 100 50 ]); B2 = uicontrol (huisarts, "stijl", "Radio knop", "snaar", "Keuze 2", "Positie", [ 10 50 100 30 ]); # Maak een knop niet in de groep B3 = uicontrol (f, "stijl", "Radio knop","snaar", "Niet in de groep","Positie", [ 10 50 100 50 ]);
Pakketjes
Octave heeft ook veel pakketten beschikbaar. Die pakketten bevinden zich op Octave-Forge Octave Forge - Pakketten, of GitHub octaafpakketten. Het is ook mogelijk voor iedereen om pakketten te maken en te onderhouden.
Vergelijking met andere vergelijkbare software
Ander vrij Alternatieven voor Matlab zijn onder meer Scilab en Freemat.[51][52][53][54] Octaaf is meer compatibel met Matlab dan Scilab is,[51][55][56] En Freemat is sinds juni 2013 niet meer bijgewerkt.[57]
Zie ook
- Lijst met software voor numerieke analyse
- Vergelijking van software voor numerieke analyse
- Lijst met statistische pakketten
- Lijst met numerieke bibliotheken
- Matlab
Aantekeningen
Referenties
- ^ Rik (10 juni 2015). "bijdragers.in". Opgehaald 14 juni 2015.
- ^ ""Fulltime ontwikkeling begon in het voorjaar van 1992. De eerste Alpha-release was 4 januari 1993 en versie 1.0 werd uitgebracht op 17 februari 1994."".
- ^ "GNU Octave 7.2.0 vrijgegeven". 28 juli 2022. Opgehaald 3 augustus 2022.
- ^ John W. Eaton (28 juli 2022). "Versie 7.2.0 uitgebracht". Opgehaald 3 augustus 2022.
- ^ "Building - Octave". wiki.octave.org. GNU. Opgehaald 1 mei 2018.
- ^ "Baskisch, Wit -Rusland, Catalaans, Chinees, Nederlands, Engels, Frans, Duits, Hongaars, Italiaans, Japans, Letland, Portugees (Brazilië), Portugees (Portugal), Russisch, Spaans, Turks, Oekraïens". hg.savannah.gnu.org.
- ^ "Over Gnu Octave". www.gnu.org. GNU. Opgehaald 1 mei 2018.
- ^ ""Versie 7.1.0 vrijgegeven. Datum: wo, 06 apr 2022 10:05:12 -0400"".
- ^ a b Eaton, John W. "Ongeveer octaaf". Opgehaald 2009-06-28.
- ^ "GNU Octave versie 1". www.gnu.org.
- ^ "GNU Octave versie 2". www.gnu.org.
- ^ "Nieuws Archief". www.gnu.org.
- ^ "GNU Octave versie 3". www.gnu.org.
- ^ "GNU Octave versie 3.2". www.gnu.org.
- ^ "GNU Octave versie 3.4". www.gnu.org.
- ^ "GNU Octave versie 3.6". www.gnu.org.
- ^ "GNU Octave 3.6.4 vrijgegeven". www.gnu.org.
- ^ a b "GNU Octave versie 3.8". www.gnu.org.
- ^ "GNU Octave 3.8.0 vrijgegeven". www.gnu.org.
- ^ "GNU Octave 3.8.1 vrijgegeven". www.gnu.org.
- ^ a b "GNU Octave versie 4.0". www.gnu.org.
- ^ "GNU Octave 4.0.0 uitgebracht". www.gnu.org.
- ^ "GNU Octave 4.0.1 vrijgegeven". www.gnu.org.
- ^ "GNU Octave 4.0.3 vrijgegeven". www.gnu.org.
- ^ "GNU Octave 4.2.0 vrijgegeven". 14 november 2016.
{{}}
: CS1 onderhoud: url-status (link) - ^ "GNU Octave versie 4.2". www.gnu.org.
- ^ "GNU Octave 4.2.1 vrijgegeven". www.gnu.org.
- ^ "GNU Octave 4.2.2 vrijgegeven". www.gnu.org.
- ^ "GNU Octave versie 4.4". www.gnu.org.
- ^ "GNU Octave 4.4.0 vrijgegeven". www.gnu.org.
- ^ "GNU Octave 4.4.1 vrijgegeven". www.gnu.org.
- ^ "GNU Octave versie 5". www.gnu.org.
- ^ "GNU Octave 5.2.0 vrijgegeven". www.gnu.org.
- ^ "GNU Octave 6.1.0 vrijgegeven". www.gnu.org.
- ^ "GNU Octave 6.2.0 vrijgegeven". www.gnu.org.
- ^ "GNU Octave 7.1.0 vrijgegeven". www.gnu.org.
- ^ "Bevindingen van het socialezekerheidsnummer kwetsbaarheid gebaseerd op supercomputing". 8 juli 2009. Gearchiveerd van het origineel op 29 februari 2012.
- ^ "Drop-in versnelling van GNU Octave". NVIDIA Developer Blog. 5 juni 2014.
- ^ "GNU Octave - controlerende subprocessen". 14 november 2008. Gearchiveerd van het origineel op 7 januari 2009. Opgehaald 2009-01-28.
- ^ "Gnu Octave". Opgehaald 2009-01-28.
- ^ "Samenvatting van belangrijke gebruikers-zichtbare wijzigingen voor versie 3.2". Opgehaald 2012-01-05.
- ^ "FAQ: MATLAB -compatibiliteit". Opgehaald 2009-04-04.
- ^ "FAQ: Octave krijgen". Opgehaald 2009-04-04.
- ^ "Top (GNU Octave (versie 6.3.0))". octave.org.
- ^ "Octaaf voor Android - Octave". wiki.octave.org. Opgehaald 2021-08-23.
- ^ Eaton, John W. "Type leesline voor u laten". GNU Octave Reference Manual.
- ^ Waarom kan ik geen code gebruiken van File Exchange in Octave? Het is vrijgegeven onder een BSD -licentie! op octave.org
- ^ gebruiksvoorwaarden op Mathworks.com "Inhoud die u indient, mag niet rechtstreeks concurreren met producten die worden aangeboden door MathWorks. Inhoud die aan bestandsuitwisseling is ingediend, kan alleen worden gebruikt met MathWorks -producten."
- ^ Bestandsuitwisseling Licentiesovergang FAQ op Mathworks.com
- ^ "GNU Octave raakt een hoge noot - Steve Hageman, 7 februari 2014".
- ^ a b TraPenberg, Thomas (2010). Fundamentals of Computational Neuroscience. Oxford Universiteit krant. p. 361. ISBN 978-0-19-956841-3.
- ^ Mohammed, a; Zalizniak, V (2011). Praktisch wetenschappelijk computergebruik. Woodhead Publishing. p.3. ISBN 978-0-85709-226-7.
- ^ Megrey, Bernard A.; Moksness, Erlend (2008). Computers in visserijonderzoek. Springer Science & Business Media. p.345. ISBN 978-1-4020-8636-6.
- ^ Kapuno, Raul Raymond (2008). Programmering voor chemische ingenieurs met behulp van C, C ++ en MATLAB. Jones & Bartlett Publishers. p. 365. ISBN 978-1-934015-09-4.
- ^ Herman, Russell L. (2013). Een cursus wiskundige methoden voor natuurkundigen. CRC Press. p. 42. ISBN 978-1-4665-8467-9.
- ^ Wouwer, Alain Vande; Sausz, Philippe; Vilas, Carlos (2014). Simulatie van ODE/PDE -modellen met MATLAB, Octave en Scilab: wetenschappelijke en technische toepassingen. Springer. pp. 114–115. ISBN 978-3-319-06790-2.
- ^ "Freemat". freemat.sourceforge.net. Opgehaald 22 februari 2020.
Verder lezen
- Hansen, Jesper Schmidt (juni 2011). Gnu Octave. beginners gids. Packt Publishing. ISBN 978-1-849-51332-6.