GNU -octaaf

GNU -octaaf
Developer (s) John W. Eaton en vele anderen[1]
Eerste uitgave 4 januari 1993; 29 jaar geleden (Eerste Alpha -release)
17 februari 1994; 28 jaar geleden (Versie 1.0)[2]
Stabiele vrijlating
7.2.0[3][4] Edit this on Wikidata / 28 juli 2022
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.org/software/octaaf/

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, 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:

  1. Matrices als fundamenteel gegevenstype.
  2. Ingebouwde ondersteuning voor complexe nummers.
  3. Krachtige ingebouwde wiskundefuncties en uitgebreide functiebibliotheken.
  4. 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:

  1. Opmerking Lijnen kunnen worden voorafgegaan met het # teken en het% -karakter;
  2. Verscheidene C-gebaseerd op C operators ++, --, +=, *=, /= worden ondersteund;
  3. Elementen kunnen worden verwezen zonder een nieuwe variabele te maken door cascade -indexering, b.v. [1:10] (3);
  4. Strijkers kan worden gedefinieerd met de dubbele Quote "Character en het personage van één Quote;
  5. 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;
  6. Blokken kunnen ook worden beëindigd met meer specifiek Controlestructuur Sleutelwoorden, d.w.z. endif, endfor, einde, enz.;
  7. Functies kunnen worden gedefinieerd in scripts en bij de octaafprompt;
  8. 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

Aantekeningen

  1. ^ GPL-3.0 of-Later sinds 2007-10-12.
  2. ^ GPL-2.0-Later van 1992-02-19 tot 2007-10-11.

Referenties

  1. ^ Rik (10 juni 2015). "bijdragers.in". Opgehaald 14 juni 2015.
  2. ^ ""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."".
  3. ^ "GNU Octave 7.2.0 vrijgegeven". 28 juli 2022. Opgehaald 3 augustus 2022.
  4. ^ John W. Eaton (28 juli 2022). "Versie 7.2.0 uitgebracht". Opgehaald 3 augustus 2022.
  5. ^ "Building - Octave". wiki.octave.org. GNU. Opgehaald 1 mei 2018.
  6. ^ "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.
  7. ^ "Over Gnu Octave". www.gnu.org. GNU. Opgehaald 1 mei 2018.
  8. ^ ""Versie 7.1.0 vrijgegeven. Datum: wo, 06 apr 2022 10:05:12 -0400"".
  9. ^ a b Eaton, John W. "Ongeveer octaaf". Opgehaald 2009-06-28.
  10. ^ "GNU Octave versie 1". www.gnu.org.
  11. ^ "GNU Octave versie 2". www.gnu.org.
  12. ^ "Nieuws Archief". www.gnu.org.
  13. ^ "GNU Octave versie 3". www.gnu.org.
  14. ^ "GNU Octave versie 3.2". www.gnu.org.
  15. ^ "GNU Octave versie 3.4". www.gnu.org.
  16. ^ "GNU Octave versie 3.6". www.gnu.org.
  17. ^ "GNU Octave 3.6.4 vrijgegeven". www.gnu.org.
  18. ^ a b "GNU Octave versie 3.8". www.gnu.org.
  19. ^ "GNU Octave 3.8.0 vrijgegeven". www.gnu.org.
  20. ^ "GNU Octave 3.8.1 vrijgegeven". www.gnu.org.
  21. ^ a b "GNU Octave versie 4.0". www.gnu.org.
  22. ^ "GNU Octave 4.0.0 uitgebracht". www.gnu.org.
  23. ^ "GNU Octave 4.0.1 vrijgegeven". www.gnu.org.
  24. ^ "GNU Octave 4.0.3 vrijgegeven". www.gnu.org.
  25. ^ "GNU Octave 4.2.0 vrijgegeven". 14 november 2016.{{}}: CS1 onderhoud: url-status (link)
  26. ^ "GNU Octave versie 4.2". www.gnu.org.
  27. ^ "GNU Octave 4.2.1 vrijgegeven". www.gnu.org.
  28. ^ "GNU Octave 4.2.2 vrijgegeven". www.gnu.org.
  29. ^ "GNU Octave versie 4.4". www.gnu.org.
  30. ^ "GNU Octave 4.4.0 vrijgegeven". www.gnu.org.
  31. ^ "GNU Octave 4.4.1 vrijgegeven". www.gnu.org.
  32. ^ "GNU Octave versie 5". www.gnu.org.
  33. ^ "GNU Octave 5.2.0 vrijgegeven". www.gnu.org.
  34. ^ "GNU Octave 6.1.0 vrijgegeven". www.gnu.org.
  35. ^ "GNU Octave 6.2.0 vrijgegeven". www.gnu.org.
  36. ^ "GNU Octave 7.1.0 vrijgegeven". www.gnu.org.
  37. ^ "Bevindingen van het socialezekerheidsnummer kwetsbaarheid gebaseerd op supercomputing". 8 juli 2009. Gearchiveerd van het origineel op 29 februari 2012.
  38. ^ "Drop-in versnelling van GNU Octave". NVIDIA Developer Blog. 5 juni 2014.
  39. ^ "GNU Octave - controlerende subprocessen". 14 november 2008. Gearchiveerd van het origineel op 7 januari 2009. Opgehaald 2009-01-28.
  40. ^ "Gnu Octave". Opgehaald 2009-01-28.
  41. ^ "Samenvatting van belangrijke gebruikers-zichtbare wijzigingen voor versie 3.2". Opgehaald 2012-01-05.
  42. ^ "FAQ: MATLAB -compatibiliteit". Opgehaald 2009-04-04.
  43. ^ "FAQ: Octave krijgen". Opgehaald 2009-04-04.
  44. ^ "Top (GNU Octave (versie 6.3.0))". octave.org.
  45. ^ "Octaaf voor Android - Octave". wiki.octave.org. Opgehaald 2021-08-23.
  46. ^ Eaton, John W. "Type leesline voor u laten". GNU Octave Reference Manual.
  47. ^ Waarom kan ik geen code gebruiken van File Exchange in Octave? Het is vrijgegeven onder een BSD -licentie! op octave.org
  48. ^ 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."
  49. ^ Bestandsuitwisseling Licentiesovergang FAQ op Mathworks.com
  50. ^ "GNU Octave raakt een hoge noot - Steve Hageman, 7 februari 2014".
  51. ^ a b TraPenberg, Thomas (2010). Fundamentals of Computational Neuroscience. Oxford Universiteit krant. p. 361. ISBN 978-0-19-956841-3.
  52. ^ Mohammed, a; Zalizniak, V (2011). Praktisch wetenschappelijk computergebruik. Woodhead Publishing. p.3. ISBN 978-0-85709-226-7.
  53. ^ Megrey, Bernard A.; Moksness, Erlend (2008). Computers in visserijonderzoek. Springer Science & Business Media. p.345. ISBN 978-1-4020-8636-6.
  54. ^ 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.
  55. ^ Herman, Russell L. (2013). Een cursus wiskundige methoden voor natuurkundigen. CRC Press. p. 42. ISBN 978-1-4665-8467-9.
  56. ^ 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.
  57. ^ "Freemat". freemat.sourceforge.net. Opgehaald 22 februari 2020.

Verder lezen

Externe links