GNU Octave

Из Википедије, слободне енциклопедије
Иди на навигацију Иди на претрагу
GNU Octave
Gnu-octave-logo.svg
Octave-4.0.0-rc1-Qt5.4-Linux.png
GNU Octave 4.0.0 RC1 за Линукс
Развијач(и) Џон Итон и други[1]
Прва верзија 1988
Најновија
верзија
4.2.1
17. фебруар 2017.
Писано у C, C++, Fortran
ОС подржавају га Microsoft Windows, Unix,Unix-like и OS X
Тип Научно рачунарство
Лиценца GPL
Веб-сајт gnu.org/software/octave/

GNU Octave је програмски језик високог нивоа, првенствено намењен нумеричким прорачунима. Он је погодан за нумеричко решавање линеарних и нелинеарних проблема,као и за обављање других нумеричких експеримената. Синтакса овог језика је углавном компатибилан са MATLAB-ом. Такође се може користити као пакетно оријентисан језик. GNU Octave је постао слободан софтвер од како је ушао у GNU пројекат, и задовољава услове GNU-ове јавне лиценце.

Octave је један од главних алтернатива отвореног кода MATLAB-а, а поред њега су и FreeMat и Scilab.[2][3][4][5]Scilab ставља мање нагласка на (двосмерну) синтаксну компатибилност са MATLAB-ом у односу на Octave.[2][6][7]

Историја[уреди]

Пројекат је замишљен око 1988. године. У почетку је требало да за праћење дизајнирања хемијских реактора. Приликом прављења прве верзије овог програма долазило је до проблема зато што су људи покушавали да наговоре аутора да користи Фортран, под изговором да је он програмски језик будућности. Аутор је та наговарања одбио, јер је сматрао да његови студенти не би требало да раде на проналажењу грешака у Фортран-у, него да проведу више времена учећи о хемијском инжињерингу. Развој измењене идеје програма започео је John W. Eaton у 1992. Прво алфа издање датира од 4. јануара 1993. године, а 17. фебруара. 1994. избачена је верзија 1.0.Најновија верзија 4.2.1. избачена је 17. фебруара 2017. године. Програм је назван по Octave Levenspiel-у, бившем професору главног аутора. Levenspiel је био познат по својој способности да обавља брзе прорачуне.[8]

Развој[уреди]

Поред користи за рачунарску науку, Octave се користи у академским круговима и индустрији. На пример, Octave је коришћен на великом паралелном рачунару у Pittsburgh-овом суперрачунарском центру да се пронађу недостаци везани за погађање бројева социјалног осигурања.[9]

Технички детаљи[уреди]

  • Octave је написана у C++ користећи C++ стандардну библиотеку.
  • Octave користи интерпретатор-е за извршавање свог скриптног језика.
  • Octave се може проширивати коришћењем динамички учитљивих модула.
  • Octave преводилац ради са gnuplot и Grace софтверским рутинама за стварање парцела, графикона и дијаграма, да их сачува или испише.
  • Octave верзије 3.8.0 и касније укључују и графички кориснички интерфејс, поред традиционалног интерфејса командне линије.

Карактеристике Octave програмског језика[уреди]

Octave је интерпретаторски програмски језик. То је структупирани програмски језик (сличан C-у) и подржава многе заједничке C стандардне библиотеке, као и неке UNIX системе позива и функције.[10] Међутим, не подржава пренос аргумената по референци.[11]

Octave програми се састоје од позива низа разних функција или скрипти. Синтакса је базирана на матрицама и обезбеђује различите функције за операције над матрице. Он подржава различите структуре података и омогућава објектно-оријентисано програмирање.[12]

Његова синтакса је веома слична MATLAB-у. Пажљиво програмирање његових скрипти ће омогућити рад његових програма и у Octave-у и у MATLAB-у.[13]

Због тога што је Octave под ГНУ-овом јавном лиценцом, може се слободно мењати, копирати и користити.[8]Програми раде на Microsoft Windows, Unix,Unix-like оперативним система, укључујући OS X.[14]

Значајне карактеристике[уреди]

Команде и променљиво име завршетка[уреди]

Притиском на ТАB знак на командној линији доводи до покушаја октаве да заврши променљиве, функције и имена датотека (слично Баш третману завршетака). Октава користи текст пре курсора као почетни део имена које завршава.

Командна историја[уреди]

Када се покрене у интерактивном моду, октава чува унесене команде у интерном баферу, тако да оне могу бити опозване и измењене.

Структуре података[уреди]

Октава укључује ограничену количину подршке за организацију података у структурама. У овом примеру, видимо структуру "x" са елементима "a", "b", и "c", (цео број, низ, и стринг, респективно):

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
}

Логички оператори кратког споја[уреди]

Октавини '&&' и '||' логички оператори су оцењени на начин кратког споја (као што су одговарајући оператери у C језику), за разлику од елемента код елементних оператора '&' и '|'.

Инкремент[уреди]

Октава укључује C језику сличан инкремент '++' и '--' у свом префиксу и постфиксу форме. Такође, она аргументује задатке.

Unwind-заштита[уреди]

Октава подржава ограничени облик изузетака по узору на 'unwind_protect' Лиспа. Општи облик једног unwind_protect блока изгледа овако:

unwind_protect
   body
unwind_protect_cleanup
   cleanup
end_unwind_protect

Као опште правило, GNU октава препознаје као престанак датог 'block' или кључне речи 'end' (који је компатибилан са МАТЛАБ језиком) или више специфичних кључних речи 'end_block'. Као последица тога, један 'unwind_protect' блок може бити раскинут са кључном речју 'end_unwind_protect' 'као у примеру, или са више portable кључних речи 'end'.

Чишћењем део блока се увек извршава. У том случају изузетак је подигнут од стране дела тела, чишћење се одмах изврши пре него што пропагира изузетак изван блока 'unwind_protect'.

GNU октава такође подржава други облик изузетека (компатибилан са МАТЛАБ језиком):

try
   body
catch
   exception_handling
end

Овај други облик разликује се од 'unwind_protect' блока на два начина. Прво, exception_handling се извршава само када је изузетак покренуо орган.. Друго, након што је извршење exception_handling изузетак се не пропагира изван блока (осим ако 'rethrow( lasterror )' изјава је намерно убачена у exception_handling код).

Променљиве дужине аргумент листе[уреди]

Октава има механизам за руковање функцијом која узима неодређен број аргумената, без експлицитне горње границе. Да бисте одредили листу нула или више аргумената користите посебан аргумент varargin као последњи (или само) аргумент на листи.

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

Променљиве дужине листе повратка[уреди]

Функција се може подесити да се врате било који бројеви вредности помоћу посебне вредности за повратак varargout. На пример:

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

Интеграција C++[уреди]

Такође је могуће извршити код октаве директно у програму C++. На пример, овде је фрагмент кода за расписивање 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 и C++ код може да се интегрише у GNU октаву стварањем oct фајлова, или коришћењем Matlab компатибилних MEX фајлове.

MATLAB компатибилност [уреди]

Октава је направљена да буде компатибилна са MATLAB-ом, и има мноштво заједничких својстава с тим језиком:

  1. Матрице као фундаментални тип података.
  2. Уграђена подршка за комплексне бројеве.
  3. Снажно уграђене математичке функције и опсежне функције.
  4. Растегљивост у облику кориснички дефинисане функције.

У ствари, октава третира некомпатиблност са MATLAB-ом као баг;[15] стога, може се сматрати софтверским клоном, који не нарушава софтверско ауторско право судећи по судском случају Lotus v. Borland.

Синтаксна компатибилност[уреди]

Постоји неколико наменских:

  1. Линија коментара може да се префиксује са карактером #, као и % карактером;
  2. Разни C-based оператори  ++, --, +=, *=, /= су подржани;
  3. Елементи се могу указати без стварања нових променљивих од водопада индексирањаа, нпр [1:10](3);
  4. Ниска се може дефинисати са карактером;
  5. Када је променљив тип један, октава израчунава "значи" у једном домена (МАТЛАБ у дуплом-домену) који је бржи, али даје мање тачне резултате;
  6. Блокови могу бити прекинути са конкретнијим контролним структурама кључних речи, тј, endif, endfor, endwhile, итд.;
  7. Функције се могу дефинисати у скрипти и на октава линији;
  8. Сви оператери врше аутоматско емитовање или једноплодно проширење.
  9. Присуство до петље (слочно ради док је у C).

Функција компатибилности[уреди]

Многе од бројних МАТLAB функција доступне су у GNU октави, неке од њих су доступне преко пакета путем фалсификоване октаве, али нису све МАТLAB функција  доступне у GNU октави. Постоји списак недоступних функција у октави, а програмери траже помоћ за њихово спровођење. У потрази за функцијама __unimplemented.m__, доводи у листу нереализованих функција.

Имплементиране функције су категорисане у Image, Mapping, Optimization, Signal, и Statistics пакете.

Када се назива имплементирана функција следећа порука о грешци је приказана:

  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

Кориснички интерфејс[уреди]

До верзије 3.8, октава није долазила са графичким корисничким интерфејсом (ГУИ) / интегрисаним развојним окружењем (ИДЕ). Међутим, званични графички интерфејс базиран на Qt платформи је сада био мигриран у главни извор спремишта и доступан је са 3.8 октавом, али не као подразумевани интерфејс.[16] Он је постао уобичајен интерфејс са издавањем октаве 4.0.[17]  

Види још[уреди]

Референце[уреди]

  1. ^ Rik (10. 6. 2015). „contributors.in”. Приступљено 14. 6. 2015. 
  2. 2,0 2,1 Trappenberg, Thomas (2010). Fundamentals of Computational Neuroscience. Oxford University Press. стр. 361. ISBN 978-0-19-956841-3. 
  3. ^ Muhammad, A; Zalizniak, V (2011). Practical Scientific Computing. Woodhead Publishing. стр. 3. ISBN 978-0-85709-226-7. 
  4. ^ Megrey, Bernard A.; Moksness, Erlend (2008). Computers in Fisheries Research. Springer Science & Business Media. стр. 345. ISBN 978-1-4020-8636-6. 
  5. ^ Kapuno, Raul Raymond (2008). Programming for Chemical Engineers Using C, C++, and MATLAB. Jones & Bartlett Publishers. стр. 365. ISBN 978-1-934015-09-4. 
  6. ^ Herman, Russell L. (2013). A Course in Mathematical Methods for Physicists. CRC Press. стр. 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. стр. 114—115. ISBN 978-3-319-06790-2. 
  8. 8,0 8,1 Eaton, John W. „About Octave”. Приступљено 28. 6. 2009. 
  9. ^ „Social Security Number Vulnerability Findings Relied on Supercomputing”. 8. 7. 2009. Архивирано из оригинала на датум 29. 2. 2012. 
  10. ^ „GNU Octave - Controlling subprocesses”. 14. 11. 2008. Приступљено 28. 1. 2009. 
  11. ^ „GNU Octave”. Приступљено 28. 1. 2009. 
  12. ^ „Summary of important user-visible changes for version 3.2”. Приступљено 5. 1. 2012. 
  13. ^ „FAQ: MATLAB compatibility”. Приступљено 4. 4. 2009. 
  14. ^ „FAQ: Getting Octave”. Приступљено 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”. 

Литература[уреди]

Спољашње везе[уреди]

Документација[уреди]

Нумерички пакети и библиотеке повезивања са GNU Октавом[уреди]

GNU Octave углавном пружају опште или специфичне апстракције за научно рачунање. Ови алати могу бити подељени према томе да ли су њихови доприноси више оријентисани ка рачунарском моделовању или ка јачању визуелне анализе.

Нумерички алати[уреди]

  • Octave-forge – Слободне алатне кутије софтвера за разне проблеме из независних програмера. Октава-фалсификовани пакети пружају функције дизајниране да раде са Октава пакетним системом. Windows installer за октаву и алатне кутије је такође доступан.
  • Mastrave project – Библиотека Cross-језика library (GNU GPLv3+ covered) у складу са GNU Octave и MATLAB, како би се олакшало научно рачунање modelling (нпр. моделирање животне средине) са општом намененом семантике array програмирања комуналне услуге.
  • Neuroimaging Analysis Kit – Библиотека (MIT License covered) за обраду података унутар GNU Octave или MATLAB-а, посебно функционалне магнетне резонанце слике. Такође нуди Pipeline систем да рукује у више фаза прераде (PSOM: pipeline system for Octave and Matlab).
  • Parallel MATLAB Toolbox – MATLAB језичка структура података и функција која дистибуира MATLAB низове. То је објављено под MIT license.
  • MPI Toolbox for Octave (MPITB) – Паралелно рачунарство за Октаву
  • FEATool – Потпуно интегрисани мултифизички коначни елеменати симулирају кутију алата и командне линије подршке (укључујући геометрију и стварање мреже, решавање).

Цртање алата[уреди]

  • PLplot – Замена традиционалног gnuplot у GNU Octave, лиценциран под GNU LGPL.
  • Plotly – Интерактиван, базиран на претраживачу, квалитет публикације графике. Може да се дели и заједнички едитује.
  • OctPlot – Висок квалитет 2D графике (PostScript и изглед графике). Објављен под GNU GPL.
  • Octave graphics add-on – 3D визуални систем за октаву.
  • Octaviz – 3D визуални систем за GNU Octave (омотач који чини ВТК часове доступне у оквиру октавее). Она такође обезбеђује функције на високом нивоу за 2D визуелизацију. (Напомена: Њихов сајт каже, "Нажалост, Октава није више у развоју. Најновије издање (0.4.7) је сасвим употребљиво и стабилно када је уграђен против vtk-5.0.").
MATLAB-као IDEs[уреди]
  • Xoctave (Windows, Linux and MAC; commercial) allows plugin and multi-language support.
  • QtOctave (Windows, Linux; free under GPLv2+) Званични развој престао  јуна 2011.
  • DomainMath IDE (Windows, Linux, Mac OS; GPLv3+), оследњи апдејт: Nov 30, 2013
  • Octclipse (Linux; Eclipse Public LicenseGPLv3+) Eclipse based octave IDE. Последњи апдејт: 2012-12-11
  • Octave UPM (на шпанском) персонализована верзија са интегрисаним GUI
Остали GUIs[уреди]
  • Cantor (Linux, Windows; GPLv2) A KDE mathematics application, with backends for R, Maxima, Octave, Scilab, Sage, KAlgebra, and Qalculate. Под активним развојем од 2011. године.
  • OctaveNB[мртва веза] (Linux, Windows, OS X; GPLv2) NetBeans IDE интеграција за GNU Octave. Последдњи верзија Apr 2009.
  • Anoc Octave Editor (Android) GUI за Android који користи наменски сервер за обављање израчунавања и стварања заплете
  • GNU TeXmacs подржава октаву као backend
Web-based кориснички интерфејс[уреди]