stringtranslate.com

Октава GNU

GNU Octave — это научный язык программирования для научных вычислений и численных расчетов . Octave помогает в численном решении линейных и нелинейных задач, а также для выполнения других численных экспериментов с использованием языка, который в основном совместим с MATLAB . Он также может использоваться как пакетно-ориентированный язык. Как часть проекта GNU , он является свободным программным обеспечением в соответствии с условиями GNU General Public License .

История

Проект был задуман около 1988 года. [6] Сначала он планировался как дополнение к курсу по проектированию химических реакторов. Полная разработка была начата Джоном У. Итоном в 1992 году. Первый альфа-релиз датируется 4 января 1993 года, а 17 февраля 1994 года была выпущена версия 1.0. Версия 9.2.0 была выпущена 7 июня 2024 года. [7]

Программа названа в честь Октава Левеншпиля , бывшего профессора главного автора. Левеншпиль был известен своей способностью выполнять быстрые расчеты на скорую руку . [8]

История развития

Разработки

Помимо использования на настольных компьютерах для персональных научных вычислений, Octave используется в академических кругах и промышленности. Например, Octave использовался на массивном параллельном компьютере в Питтсбургском суперкомпьютерном центре для поиска уязвимостей, связанных с угадыванием номеров социального страхования. [22]

Ускорение с OpenCL или CUDA также возможно с использованием графических процессоров. [23]

Технические подробности

Октава, язык

Язык Octave — это интерпретируемый язык программирования. Это структурированный язык программирования (похожий на C ) и он поддерживает множество общих функций стандартной библиотеки C , а также некоторые системные вызовы и функции UNIX . [24] Однако он не поддерживает передачу аргументов по ссылке [25], хотя аргументы функций копируются при записи, чтобы избежать ненужного дублирования.

Программы Octave состоят из списка вызовов функций или скрипта . Синтаксис основан на матрицах и предоставляет различные функции для матричных операций. Он поддерживает различные структуры данных и допускает объектно-ориентированное программирование . [26]

Его синтаксис очень похож на MATLAB, и тщательное программирование скрипта позволит запустить его как в Octave, так и в MATLAB. [27]

Поскольку Octave предоставляется по лицензии GNU General Public License , его можно свободно изменять, копировать и использовать. [8] Программа работает на Microsoft Windows и большинстве Unix и Unix-подобных операционных систем , включая Linux , Android и macOS . [28] [29] [30]

Примечательные особенности

Дополнение имен команд и переменных

Ввод символа TAB в командной строке заставляет Octave пытаться завершить имена переменных, функций и файлов (аналогично дополнению Tab в Bash ). Octave использует текст перед курсором в качестве начальной части имени для завершения. [31]

История команд

При интерактивной работе Octave сохраняет введенные команды во внутреннем буфере, чтобы их можно было вызвать и отредактировать.

Структуры данных

Octave включает ограниченную поддержку для организации данных в структуры. В этом примере мы видим структуру x с элементами a , b , и c , (целое число, массив и строка соответственно):

октава : 1 >  x.a = 1 ; x.b = [ 1 , 2 ; 3 , 4 ] ; x.c = " струна " ; октава : 2 > x.a ans = 1 октава : 3 > x.b ans =                 1  2  3  4октава : 4 >  x . c ans  =  струна октава : 5 >  x x  = скалярная  структура  , содержащая  поля  : а  =  1  б  = 1  2  3  4 с  =  строка

Короткие логические операторы

Логические операторы Octave &&и вычисляются по принципу короткого замыкания (как и соответствующие операторы в языке C ), в отличие от поэлементных операторов и .||&|

Операторы увеличения и уменьшения

Octave включает в себя C-подобные операторы инкремента и декремента ++ в --обеих их префиксных и постфиксных формах. Octave также выполняет расширенное присваивание , например x += 5.

Расслабляющий-защитный

Octave поддерживает ограниченную форму обработки исключений, смоделированную по образцу unwind_protect из Lisp . Общая форма блока unwind_protect выглядит следующим образом:

unwind_protect  тело unwind_protect_cleanup  очистка end_unwind_protect

Как правило, GNU Octave распознает в качестве завершения заданного blockлибо ключевое слово end(совместимое с языком MATLAB), либо более конкретное ключевое слово или, в некоторых случаях, . Как следствие, блок может быть завершен либо ключевым словом , как в примере, либо более переносимым ключевым словом .endblockend_blockunwind_protectend_unwind_protectend

Часть очистки блока выполняется всегда. В случае возникновения исключения частью тела , очистка выполняется немедленно перед распространением исключения за пределы блока unwind_protect.

GNU Octave также поддерживает другую форму обработки исключений (совместимую с языком MATLAB):

попробуйте тело поймать исключение_обработка конец  

Эта последняя форма отличается от unwind_protectблока двумя способами. Во-первых, exception_handling выполняется только тогда, когда исключение вызвано body . Во-вторых, после выполнения exception_handling исключение не распространяется за пределы блока (если только rethrow( lasterror )оператор явно не вставлен в код exception_handling ).

Списки аргументов переменной длины

Octave имеет механизм для обработки функций, которые принимают неопределенное количество аргументов без явного верхнего предела. Чтобы указать список из нуля или более аргументов, используйте специальный аргумент vararginкак последний (или единственный) аргумент в списке. varargin— это массив ячеек, содержащий все входные аргументы.

функция  s = плюс ( varargin ) если ( nargin == 0 ) s = 0 ; иначе s = varargin { 1 } + плюс ( varargin { 2 : nargin }); конец конец               

Списки возврата переменной длины

Функцию можно настроить на возврат любого количества значений, используя специальное возвращаемое значение varargout. Например:

функция  varargout = multiassign ( data ) для k = 1 : nargout varargout { k } = data (:, k ); конец конец        

Интеграция с С++

Также возможно выполнить код Octave напрямую в программе 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 ); Матрица unis ( f_ret ( 0 ) .matrix_value ());               

Код C и C++ можно интегрировать в GNU Octave, создав файлы oct или используя совместимые с MATLAB файлы MEX .

Совместимость с MATLAB

Octave был создан с учетом совместимости с MATLAB и имеет много общих функций с MATLAB:

  1. Матрицы как фундаментальный тип данных.
  2. Встроенная поддержка комплексных чисел.
  3. Мощные встроенные математические функции и обширные библиотеки функций.
  4. Расширяемость в виде пользовательских функций.

Octave рассматривает несовместимость с MATLAB как ошибку ; следовательно, его можно считать клоном программного обеспечения , который не нарушает авторские права на программное обеспечение, как это было определено в судебном деле Lotus против Borland .

Скрипты MATLAB из репозитория MathWorks FileExchange в принципе совместимы с Octave. Однако, хотя они часто предоставляются и загружаются пользователями в соответствии с совместимой с Octave и надлежащей лицензией BSD с открытым исходным кодом , Условия использования FileExchange запрещают любое использование помимо MATLAB, принадлежащего MathWorks . [32] [33] [34]

Совместимость синтаксиса

Есть несколько целенаправленных, хотя и незначительных, дополнений к синтаксису. Архивировано 26.04.2012 на Wayback Machine :

  1. Строки комментариев могут начинаться с символа #, а также символа %;
  2. Поддерживаются различные операторы на основе языка C: ++ , -- , += , *=, /=;
  3. На элементы можно ссылаться без создания новой переменной с помощью каскадной индексации, например [1:10](3);
  4. Строки можно определять как с помощью символа двойной кавычки ", так и с помощью символа одинарной кавычки ';
  5. Если тип переменной — single (число с плавающей точкой одинарной точности), Octave вычисляет « среднее » в однодоменной системе (MATLAB в двухдоменной ), что быстрее, но дает менее точные результаты;
  6. Блоки также могут быть завершены с помощью более конкретных ключевых слов структуры управления , например, endif, endfor, endwhile и т. д.;
  7. Функции можно определять в скриптах и ​​в командной строке Octave;
  8. Наличие цикла do-until (аналогично do-while в C).

Совместимость функций

Многие, но не все, из многочисленных функций MATLAB доступны в GNU Octave, некоторые из них доступны через пакеты в Octave Forge. Функции, доступные как часть основных пакетов Octave или Forge, перечислены онлайн Архивировано 2024-03-14 на Wayback Machine .

Список недоступных функций включен в функцию Octave __unimplemented.m__. Нереализованные функции также перечислены во многих пакетах Octave Forge в Octave Wiki.

При вызове нереализованной функции отображается следующее сообщение об ошибке:

 octave : 1 >  предупреждение о руководстве  : функция « guide » еще не реализована в Octave          Пожалуйста,  прочтите  < http : // www . octave . org / missing . html >  , чтобы  узнать  , как  вы  можете  внести свой вклад в  отсутствующую  функциональность .  Ошибка :  «руководство»  не определено  около  строки  1  столбца  1

Пользовательские интерфейсы

Octave поставляется с официальным графическим пользовательским интерфейсом (GUI) и интегрированной средой разработки (IDE) на основе Qt . Он был доступен с Octave 3.8, [35] и стал интерфейсом по умолчанию (поверх интерфейса командной строки ) с выпуском Octave 4.0. [12] Он был хорошо принят участником EDN, который написал «[Octave] теперь имеет очень работоспособный GUI» в обзоре тогда еще нового GUI в 2014 году. [36]

Также было разработано несколько сторонних графических интерфейсов, например ToolboX для обучения кодированию.

Приложения с графическим интерфейсом

С кодом Octave пользователь может создавать приложения GUI. См. GUI Development (GNU Octave (версия 7.1.0)). Ниже приведены некоторые примеры:

Кнопка, элемент управления редактированием, флажок

# создаем фигуру и панель на ней f  =  figure ; # создаем кнопку (стиль по умолчанию) b1  =  uicontrol  ( f ,  "string" ,  "A Button" ,  "position" ,[ 10  10  150  40 ]); # создаем элемент управления редактированием e1  =  uicontrol  ( f ,  "style" ,  "edit" ,  "string" ,  "editable text" ,  "position" ,[ 10  60  300  40 ]); # создаем флажок c1  =  uicontrol  ( f ,  "style" ,  "checkbox" ,  "string" ,  "a checkbox" ,  "position" ,[ 10  120  150  40 ]);

Текстовое поле

prompt  =  { "Ширина" ,  "Высота" ,  "Глубина" }; defaults  =  { "1.10" ,  "2.20" ,  "3.30" }; rowscols  =  [ 1 , 10 ;  2 , 20 ;  3 , 30 ]; dims  =  inputdlg  ( prompt ,  "Введите размеры поля" ,  rowscols ,  defaults );

Список с полями сообщений.

my_options  =  { "Элемент" ,  "еще один" ,  "еще один" }; [ sel ,  ok ]  =  listdlg  ( "ListString" ,  my_options ,  "SelectionMode" ,  "Multiple" ); if  ( ok  ==  1 )  msgbox  ( "Вы выбрали:" );  for  i  =  1 : numel  ( sel )  msgbox  ( sprintf  ( "\t%s" ,  my_options { sel ( i )}));  endfor else  msgbox  ( "Вы отменили." ); endif

Радиокнопки

# создаем фигуру и панель на ней f  =  figure ; # создаем группу кнопок gp  =  uibuttongroup  ( f ,  "Position" ,  [  0  0.5  1  1 ]) # создаем кнопки в группе 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  ]); # создаем кнопку не в группе b3  =  uicontrol  ( f ,  "style" ,  "radiobutton" , "string" ,  "Not in the group" , "Position" ,  [  10  50  100  50  ]);

Пакеты

Octave также имеет множество доступных пакетов. Эти пакеты находятся на Octave-Forge Octave Forge - Packages или Github Octave Packages. Также любой может создавать и поддерживать пакеты.

Сравнение с другим аналогичным программным обеспечением

Альтернативы GNU Octave под лицензией с открытым исходным кодом , помимо вышеупомянутого MATLAB, включают Scilab и FreeMat . [37] [38] [39] [40] Octave более совместим с MATLAB, чем Scilab, [37] [41] [42] а FreeMat не обновлялся с июня 2013 года. [43]

Кроме того, язык программирования Julia и его возможности построения графиков имеют сходство с GNU Octave.

Смотрите также

Примечания

  1. ^ GPL-3.0 или более поздняя версия с 12 октября 2007 г.
  2. ^ GPL-2.0 или более поздняя версия с 1992-02-19 по 2007-10-11.

Ссылки

  1. ^ Rik (10 июня 2015 г.). "contributors.in" . Получено 14 июня 2015 г.
  2. ^ ""Полноценная разработка началась весной 1992 года. Первый альфа-релиз состоялся 4 января 1993 года, а версия 1.0 была выпущена 17 февраля 1994 года."".
  3. ^ "GNU Octave 9.2.0 Released". 7 июня 2024 г. Получено 10 июля 2024 г.
  4. ^ "Building - Octave". wiki.octave.org . GNU . Получено 1 мая 2018 .
  5. ^ "Баскский, белорусский, каталонский, китайский, голландский, английский, французский, немецкий, венгерский, итальянский, японский, латышский, португальский (Бразилия), португальский (Португалия), русский, испанский, турецкий, украинский". hg.savannah.gnu.org .
  6. ^ "О GNU Octave". www.gnu.org . GNU . Получено 1 мая 2018 г. .
  7. ^ "Octave 9.2.0 Released". octave.org . 2024-06-07 . Получено 2024-11-05 .
  8. ^ ab Eaton, John W. "About Octave" . Получено 28.06.2009 .
  9. ^ "GNU Octave Версия 1". www.gnu.org .
  10. ^ "GNU Octave Версия 2". www.gnu.org .
  11. ^ "GNU Octave Версия 3". www.gnu.org .
  12. ^ ab "GNU Octave Версия 4.0". www.gnu.org .
  13. ^ "GNU Octave 4.0.0 Released". www.gnu.org . 29 мая 2015 г.
  14. ^ "GNU Octave 4.0.1 Released". www.gnu.org . 23 марта 2016 г.
  15. ^ "GNU Octave 4.0.3 Released". www.gnu.org . 2 июля 2016 г.
  16. ^ "GNU Octave версии 5". www.gnu.org .
  17. ^ "GNU Octave 6.1.0 Released". www.gnu.org . 26 ноября 2020 г.
  18. ^ "GNU Octave 7.1.0 Released". www.gnu.org . 6 апреля 2022 г.
  19. ^ "GNU Octave 8.1.0 Released". octave.org . 7 марта 2023 г.
  20. ^ "GNU Octave Version 9". octave.org . Получено 2024-03-25 .
  21. ^ "Octave 9.2.0 выпущен". octave.org . Получено 2024-11-05 .
  22. ^ "Выводы об уязвимости номеров социального страхования основаны на суперкомпьютерах". 8 июля 2009 г. Архивировано из оригинала 29 февраля 2012 г.
  23. ^ "Drop-in Acceleration of GNU Octave". Блог разработчиков NVIDIA . 5 июня 2014 г.
  24. ^ "GNU Octave - Управление подпроцессами". 14 ноября 2008 г. Архивировано из оригинала 7 января 2009 г. Получено 28.01.2009 .
  25. ^ "GNU Octave" . Получено 28.01.2009 .
  26. ^ "Сводка важных изменений, видимых пользователю, для версии 3.2" . Получено 2012-01-05 .
  27. ^ "FAQ: Совместимость с MATLAB". Архивировано из оригинала 2011-11-21 . Получено 2009-04-04 .
  28. ^ "FAQ: Getting Octave". Архивировано из оригинала 2011-11-21 . Получено 2009-04-04 .
  29. ^ "Верх (GNU Octave (версия 6.3.0))". octave.org .
  30. ^ "Octave для Android - Octave". wiki.octave.org . Получено 2021-08-23 .
  31. ^ Eaton, John W. "Letting Readline Type For You". Справочное руководство GNU Octave . Архивировано из оригинала 2018-02-12 . Получено 2016-07-29 .
  32. ^ "FAQ - Octave". wiki.octave.org . Получено 2022-12-05 .
  33. ^ "Условия использования MATLAB Central". www.mathworks.com . Получено 2022-12-05 .
  34. ^ "Часто задаваемые вопросы о лицензировании обмена файлами". www.mathworks.com . Получено 2022-12-05 .
  35. ^ "GNU Octave Версия 3.8". www.gnu.org .
  36. Хагеман, Стив (7 февраля 2014 г.). «GNU Octave берет высокую ноту». EDN .
  37. ^ ab Траппенберг, Томас (2010). Основы вычислительной нейронауки . Oxford University Press. стр. 361. ISBN 978-0-19-956841-3.
  38. ^ Мухаммад, А; Зализняк, В (2011). Практические научные вычисления . Woodhead Publishing . стр. 3. ISBN 978-0-85709-226-7.
  39. ^ Megrey, Bernard A.; Moksness, Erlend (2008). Компьютеры в исследованиях рыболовства . Springer Science & Business Media. стр. 345. ISBN 978-1-4020-8636-6.
  40. ^ Капуно, Рауль Рэймонд (2008). Программирование для инженеров-химиков с использованием C, C++ и MATLAB . Jones & Bartlett Publishers. стр. 365. ISBN 978-1-934015-09-4.
  41. ^ Герман, Рассел Л. (2013). Курс математических методов для физиков . CRC Press. стр. 42. ISBN 978-1-4665-8467-9.
  42. ^ Ваувер, Ален Ванде; Саусез, Филипп; Вилас, Карлос (2014). Моделирование моделей ODE/PDE с помощью MATLAB, Octave и Scilab: научные и инженерные приложения . Springer. стр. 114–115. ISBN 978-3-319-06790-2.
  43. ^ "FreeMat". freemat.sourceforge.net . Получено 22 февраля 2020 г. .

Дальнейшее чтение

Внешние ссылки