GNU Octave je programski jezik visokog nivoa, prvenstveno namenjen numeričkim proračunima. On je pogodan za numeričko rešavanje linearnih i nelinearnih problema,kao i za obavljanje drugih numeričkih eksperimenata. Sintaksa ovog jezika je uglavnom kompatibilna sa MATLAB-om. Takođe se može koristiti kao paketno orijentisan jezik. GNU Octave je postao slobodan softver otkako je ušao u GNU projekat, i zadovoljava uslove GNU-ove javne licence.

GNU Octave
GNU Octave 4.0.0 RC1 za Linuks
GNU Octave 4.0.0 RC1 za Linuks
Programer(i)Džon Iton i drugi[1]
Prvo izdanje1988
Stabilno izdanje
4.2.1 / 17. februar 2017.
Repozitorijum Uredi na Vikipodacima
Napisan uC, C++, Fortran
Operativni sistempodržavaju ga Microsoft Windows, Unix,Unix-like i OS X
TipNaučno računarstvo
LicencaGPL
Veb-sajtgnu.org/software/octave/

Octave je jedan od glavnih alternativa otvorenog koda MATLAB-a, a pored njega su i FreeMat i Scilab.[2][3][4][5]Scilab stavlja manje naglaska na (dvosmernu) sintaksnu kompatibilnost sa MATLAB-om u odnosu na Octave.[2][6][7]

Istorija

uredi

Projekat je zamišljen oko 1988. godine. U početku je trebalo da za praćenje dizajniranja hemijskih reaktora. Prilikom pravljenja prve verzije ovog programa dolazilo je do problema zato što su ljudi pokušavali da nagovore autora da koristi Fortran, pod izgovorom da je on programski jezik budućnosti. Autor je ta nagovaranja odbio, jer je smatrao da njegovi studenti ne bi trebalo da rade na pronalaženju grešaka u Fortran-u, nego da provedu više vremena učeći o hemijskom inžinjeringu. Razvoj izmenjene ideje programa započeo je John W. Eaton u 1992. Prvo alfa izdanje datira od 4. januara 1993. godine, a 17. februara. 1994. izbačena je verzija 1.0.Najnovija verzija 4.2.1. izbačena je 17. februara 2017. godine. Program je nazvan po Octave Levenspiel-u, bivšem profesoru glavnog autora. Levenspiel je bio poznat po svojoj sposobnosti da obavlja brze proračune.[8]

Razvoj

uredi

Pored koristi za računarsku nauku, Octave se koristi u akademskim krugovima i industriji. Na primer, Octave je korišćen na velikom paralelnom računaru u Pittsburgh-ovom superračunarskom centru da se pronađu nedostaci vezani za pogađanje brojeva socijalnog osiguranja.[9]

Tehnički detalji

uredi
  • Octave je napisana u C++ koristeći C++ standardnu biblioteku.
  • Octave koristi interpretator-e za izvršavanje svog skriptnog jezika.
  • Octave se može proširivati korišćenjem dinamički učitljivih modula.
  • Octave prevodilac radi sa gnuplot i Grace softverskim rutinama za stvaranje parcela, grafikona i dijagrama, da ih sačuva ili ispiše.
  • Octave verzije 3.8.0 i kasnije uključuju i grafički korisnički interfejs, pored tradicionalnog interfejsa komandne linije.

Karakteristike Octave programskog jezika

uredi

Octave je interpretatorski programski jezik. To je struktupirani programski jezik (sličan C-u) i podržava mnoge zajedničke C standardne biblioteke, kao i neke UNIX sisteme poziva i funkcije.[10] Međutim, ne podržava prenos argumenata po referenci.[11]

Octave programi se sastoje od poziva niza raznih funkcija ili skripti. Sintaksa je bazirana na matricama i obezbeđuje različite funkcije za operacije nad matrice. On podržava različite strukture podataka i omogućava objektno-orijentisano programiranje.[12]

Njegova sintaksa je veoma slična MATLAB-u. Pažljivo programiranje njegovih skripti će omogućiti rad njegovih programa i u Octave-u i u MATLAB-u.[13]

Zbog toga što je Octave pod GNU-ovom javnom licencom, može se slobodno menjati, kopirati i koristiti.[8]Programi rade na Microsoft Windows, Unix,Unix-like operativnim sistema, uključujući OS X.[14]

Značajne karakteristike

uredi

Komande i promenljivo ime završetka

uredi

Pritiskom na TAB znak na komandnoj liniji dovodi do pokušaja oktave da završi promenljive, funkcije i imena datoteka (slično Baš tretmanu završetaka). Oktava koristi tekst pre kursora kao početni deo imena koje završava.

Komandna istorija

uredi

Kada se pokrene u interaktivnom modu, oktava čuva unesene komande u internom baferu, tako da one mogu biti opozvane i izmenjene.

Strukture podataka

uredi

Oktava uključuje ograničenu količinu podrške za organizaciju podataka u strukturama. U ovom primeru, vidimo strukturu "x" sa elementima "a", "b", i "c", (ceo broj, niz, i string):

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
}

Logički operatori kratkog spoja

uredi

Oktavini '&&' i '||' logički operatori su ocenjeni na način kratkog spoja (kao što su odgovarajući operateri u C jeziku), za razliku od elementa kod elementnih operatora '&' i '|'.

Inkrement

uredi

Oktava uključuje C jeziku sličan inkrement '++' i '--' u svom prefiksu i postfiksu forme. Takođe, ona argumentuje zadatke.

Unwind-zaštita

uredi

Oktava podržava ograničeni oblik izuzetaka po uzoru na 'unwind_protect' Lispa. Opšti oblik jednog unwind_protect bloka izgleda ovako:

unwind_protect
   body
unwind_protect_cleanup
   cleanup
end_unwind_protect

Kao opšte pravilo, GNU oktava prepoznaje kao prestanak datog 'block' ili ključne reči 'end' (koji je kompatibilan sa MATLAB jezikom) ili više specifičnih ključnih reči 'end_block'. Kao posledica toga, jedan 'unwind_protect' blok može biti raskinut sa ključnom rečju 'end_unwind_protect' 'kao u primeru, ili sa više portable ključnih reči 'end'.

Čišćenjem deo bloka se uvek izvršava. U tom slučaju izuzetak je podignut od strane dela tela, čišćenje se odmah izvrši pre nego što propagira izuzetak izvan bloka 'unwind_protect'.

GNU oktava takođe podržava drugi oblik izuzeteka (kompatibilan sa MATLAB jezikom):

try
   body
catch
   exception_handling
end

Ovaj drugi oblik razlikuje se od 'unwind_protect' bloka na dva načina. Prvo, exception_handling se izvršava samo kada je izuzetak pokrenuo organ.. Drugo, nakon što je izvršenje exception_handling izuzetak se ne propagira izvan bloka (osim ako 'rethrow( lasterror )' izjava je namerno ubačena u exception_handling kod).

Promenljive dužine argument liste

uredi

Oktava ima mehanizam za rukovanje funkcijom koja uzima neodređen broj argumenata, bez eksplicitne gornje granice. Da biste odredili listu nula ili više argumenata koristite poseban argument varargin kao poslednji (ili samo) argument na listi.

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

Promenljive dužine liste povratka

uredi

Funkcija se može podesiti da se vrate bilo koji brojevi vrednosti pomoću posebne vrednosti za povratak varargout. Na primer:

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

Integracija C++

uredi

Takođe je moguće izvršiti kod oktave direktno u programu C++. Na primer, ovde je fragment koda za raspisivanje 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 i C++ kod može da se integriše u GNU oktavu stvaranjem oct fajlova, ili korišćenjem Matlab kompatibilnih MEX fajlove.

MATLAB kompatibilnost

uredi

Oktava je napravljena da bude kompatibilna sa MATLAB-om, i ima mnoštvo zajedničkih svojstava s tim jezikom:

  1. Matrice kao fundamentalni tip podataka.
  2. Ugrađena podrška za kompleksne brojeve.
  3. Snažno ugrađene matematičke funkcije i opsežne funkcije.
  4. Rastegljivost u obliku korisnički definisane funkcije.

U stvari, oktava tretira nekompatiblnost sa MATLAB-om kao bag;[15] stoga, može se smatrati softverskim klonom, koji ne narušava softversko autorsko pravo sudeći po sudskom slučaju Lotus v. Borland.

Sintaksna kompatibilnost

uredi

Postoji nekoliko namenskih:

  1. Linija komentara može da se prefiksuje sa karakterom #, kao i % karakterom;
  2. Razni C-based operatori  ++, --, +=, *=, /= su podržani;
  3. Elementi se mogu ukazati bez stvaranja novih promenljivih od vodopada indeksiranjaa, npr [1:10](3);
  4. Niska se može definisati sa karakterom;
  5. Kada je promenljiv tip jedan, oktava izračunava "znači" u jednom domena (MATLAB u duplom-domenu) koji je brži, ali daje manje tačne rezultate;
  6. Blokovi mogu biti prekinuti sa konkretnijim kontrolnim strukturama ključnih reči, tj, endif, endfor, endwhile, itd.;
  7. Funkcije se mogu definisati u skripti i na oktava liniji;
  8. Svi operateri vrše automatsko emitovanje ili jednoplodno proširenje.
  9. Prisustvo do petlje (sločno radi dok je u C).

Funkcija kompatibilnosti

uredi

Mnoge od brojnih MATLAB funkcija dostupne su u GNU oktavi, neke od njih su dostupne preko paketa putem falsifikovane oktave, ali nisu sve MATLAB funkcija  dostupne u GNU oktavi. Postoji spisak nedostupnih funkcija u oktavi, a programeri traže pomoć za njihovo sprovođenje. U potrazi za funkcijama __unimplemented.m__, dovodi u listu nerealizovanih funkcija.

Implementirane funkcije su kategorisane u Image, Mapping, Optimization, Signal, i Statistics pakete.

Kada se naziva implementirana funkcija sledeća poruka o grešci je prikazana:

  octave:1> quad2d
  warning: quad2d is not implemented. Consider using dblquad.
  
  Please read <http://www.octave.org/missing.html> to learn how you can
  contribute missing functionality.
  warning: called from
      __unimplemented__ at line 523 column 5
  error: 'quad2d' undefined near line 1 column 1

Korisnički interfejs

uredi

Do verzije 3.8, oktava nije dolazila sa grafičkim korisničkim interfejsom (GUI) / integrisanim razvojnim okruženjem (IDE). Međutim, zvanični grafički interfejs baziran na Qt platformi je sada bio migriran u glavni izvor spremišta i dostupan je sa 3.8 oktavom, ali ne kao podrazumevani interfejs.[16] On je postao uobičajen interfejs sa izdavanjem oktave 4.0.[17]  

Vidi još

uredi

Reference

uredi
  1. ^ Rik (10. 6. 2015). „contributors.in”. Pristupljeno 14. 6. 2015. 
  2. ^ a b Trappenberg, Thomas (2010). Fundamentals of Computational Neuroscience. Oxford University Press. str. 361. ISBN 978-0-19-956841-3. 
  3. ^ Muhammad, A; Zalizniak, V (2011). Practical Scientific Computing. Woodhead Publishing. str. 3. ISBN 978-0-85709-226-7. 
  4. ^ Megrey, Bernard A.; Moksness, Erlend (2008). Computers in Fisheries Research. Springer Science & Business Media. str. 345. ISBN 978-1-4020-8636-6. 
  5. ^ Kapuno, Raul Raymond (2008). Programming for Chemical Engineers Using C, C++, and MATLAB. Jones & Bartlett Publishers. str. 365. ISBN 978-1-934015-09-4. 
  6. ^ Herman, Russell L. (2013). A Course in Mathematical Methods for Physicists. CRC Press. str. 42. ISBN 978-1-4665-8467-9. 
  7. ^ Wouwer, Alain Vande; Saucez, Philippe; Vilas, Carlos (2014). Simulation of ODE/PDE Models with MATLAB®, OCTAVE and SCILAB: Scientific and Engineering Applications. Springer. str. 114—115. ISBN 978-3-319-06790-2. 
  8. ^ a b Eaton, John W. „About Octave”. Pristupljeno 28. 6. 2009. 
  9. ^ „Social Security Number Vulnerability Findings Relied on Supercomputing”. 8. 7. 2009. Arhivirano iz originala 29. 2. 2012. g. 
  10. ^ „GNU Octave - Controlling subprocesses”. 14. 11. 2008. Arhivirano iz originala 07. 01. 2009. g. Pristupljeno 28. 1. 2009. 
  11. ^ „GNU Octave”. Pristupljeno 28. 1. 2009. 
  12. ^ „Summary of important user-visible changes for version 3.2”. Pristupljeno 5. 1. 2012. 
  13. ^ „FAQ: MATLAB compatibility”. Arhivirano iz originala 21. 11. 2011. g. Pristupljeno 4. 4. 2009. 
  14. ^ „FAQ: Getting Octave”. Arhivirano iz originala 21. 11. 2011. g. Pristupljeno 4. 4. 2009. 
  15. ^ „GNU Octave - Bugs: Submit Item [Savannah]”. 
  16. ^ „Summary of important user-visible changes for version 3.8”. 
  17. ^ „Summary of important user-visible changes for version 4.0”. 

Literatura

uredi

Spoljašnje veze

uredi

Dokumentacija

uredi

Numerički paketi i biblioteke povezivanja sa GNU Oktavom

uredi

GNU Octave uglavnom pružaju opšte ili specifične apstrakcije za naučno računanje. Ovi alati mogu biti podeljeni prema tome da li su njihovi doprinosi više orijentisani ka računarskom modelovanju ili ka jačanju vizuelne analize.

Numerički alati

uredi
  • Octave-forge – Slobodne alatne kutije softvera za razne probleme iz nezavisnih programera. Oktava-falsifikovani paketi pružaju funkcije dizajnirane da rade sa Oktava paketnim sistemom. Windows installer za oktavu i alatne kutije je takođe dostupan.
  • Mastrave project – Biblioteka Cross-jezika library (GNU GPLv3+ covered) u skladu sa GNU Octave i MATLAB, kako bi se olakšalo naučno računanje modelling (npr. modeliranje životne sredine) sa opštom namenenom semantike array programiranja komunalne usluge.
  • Neuroimaging Analysis Kit – Biblioteka (MIT License covered) za obradu podataka unutar GNU Octave ili MATLAB-a, posebno funkcionalne magnetne rezonance slike. Takođe nudi Pipeline sistem da rukuje u više faza prerade (PSOM: pipeline system for Octave and Matlab).
  • Parallel MATLAB Toolbox – MATLAB jezička struktura podataka i funkcija koja distibuira MATLAB nizove. To je objavljeno pod MIT license.
  • MPI Toolbox for Octave (MPITB) – Paralelno računarstvo za Oktavu
  • FEATool[mrtva veza] – Potpuno integrisani multifizički konačni elemenati simuliraju kutiju alata i komandne linije podrške (uključujući geometriju i stvaranje mreže, rešavanje).

Crtanje alata

uredi
  • PLplot – Zamena tradicionalnog gnuplot u GNU Octave, licenciran pod GNU LGPL.
  • Plotly – Interaktivan, baziran na pretraživaču, kvalitet publikacije grafike. Može da se deli i zajednički edituje.
  • OctPlot – Visok kvalitet 2D grafike (PostScript i izgled grafike). Objavljen pod GNU GPL.
  • Octave graphics add-on – 3D vizuelni sistem za oktavu.
  • Octaviz – 3D vizuelni sistem za GNU Octave (omotač koji čini VTK časove dostupne u okviru oktavee). Ona takođe obezbeđuje funkcije na visokom nivou za 2D vizuelizaciju. (Napomena: Njihov sajt kaže, "Nažalost, Oktava nije više u razvoju. Najnovije izdanje (0.4.7) je sasvim upotrebljivo i stabilno kada je ugrađen protiv vtk-5.0.").
MATLAB-kao IDEs
uredi
Ostali GUIs
uredi
  • Cantor (Linux, Windows; GPLv2) A KDE mathematics application, with backends for R, Maxima, Octave, Scilab, Sage, KAlgebra, and Qalculate. Pod aktivnim razvojem od 2011. godine.
  • Anoc Octave Editor (Android) GUI za Android koji koristi namenski server za obavljanje izračunavanja i stvaranja zaplete
  • GNU TeXmacs podržava oktavu kao backend
Web-based korisnički interfejs
uredi