Jump to content

GNU Октава

GNU Октава
Разработчик(и) Джон В. Итон и многие другие [1]
Первоначальный выпуск 4 января 1993 г .; 31 год назад ( 4 января 1993 ) (первая альфа-версия)
17 февраля 1994 г .; 30 лет назад ( 17 февраля 1994 г. ) (версия 1.0) [2]
Стабильная версия
9.2.0 [3]  Отредактируйте это в Викиданных / 7 июня 2024 г .; 56 дней назад ( 7 июня 2024 г. )
Репозиторий
Написано в C++ (основной), сама Octave (скрипты), C (код-оболочка), Fortran (код-оболочка линейной алгебры) [4]
Операционная система Windows , MacOS , Linux , BSD
Доступно в 18 языков [5]
Тип Научные вычисления
Лицензия 2007: GPL-3.0 или новее [а]
1992: GPL-2.0 или новее [б]
Веб-сайт ГНУ .org /программное обеспечение /октава /

GNU Octave научный язык программирования для научных вычислений и числовых вычислений . Octave помогает решать линейные и нелинейные задачи численно, а также выполнять другие численные эксперименты с использованием языка, который в основном совместим с MATLAB . Его также можно использовать как пакетно-ориентированный язык. Являясь частью проекта GNU , это бесплатное программное обеспечение согласно условиям Стандартной общественной лицензии GNU .

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

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

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

[ редактировать ]
Время Действие
1988/1989 Первые обсуждения (книга и программное обеспечение)
февраль 1992 г. Начало разработки
Январь 1993 г. Новости в Интернете (Версия 0.60)
февраль 1994 г. 1-я публикация (версии с 1.0.0 по 1.1.1) [9]
декабрь 1996 г. Вторая публикация (версия 2.0.x) с портом Windows ( Cygwin ) [10]
декабрь 2007 г. Публикация версии 3.0 (Milestone) [11]
29 мая 2015 г. Версия 4.0.0 (стабильный графический интерфейс и новый синтаксис для ООП ) [12] [13] [14] [15]
1 марта 2019 г. Публикация Octave 5.1.0 (предпочтительно QT5, минимум Qt 4.8), поддержка hiDpi [16]
26 ноября 2020 г. Публикация Octave 6.1.0 (предпочтителен QT5, Qt 4.x устарел для удаления в версии 7) [17]
6 апреля 2022 г. Публикация Octave 7.1.0 (предпочтительно QT5), улучшенная графическая часть и совместимость с Matlab. [18]
7 марта 2023 г. Публикация Octave 8.1.0, улучшенной графической части и совместимости с Matlab. [19]
14 марта 2024 г. Публикация Octave 9.1.0, общие сведения, совместимость с Matlab и улучшения графики. [20]

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

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

Технические детали

[ редактировать ]

Октава, язык

[ редактировать ]

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

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

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

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

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

[ редактировать ]

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

[ редактировать ]

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

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

[ редактировать ]

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

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

[ редактировать ]

Octave включает ограниченную поддержку организации данных в структурах. В этом примере мы видим структуру х с элементами а , группа 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 =

  scalar structure containing the fields:

    a = 1
    b =

       1   2
       3   4

    c = string

Короткое замыкание логических операторов

[ редактировать ]

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

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

[ редактировать ]

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

Расслабьтесь-защитите

[ редактировать ]

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

unwind_protect
   body
unwind_protect_cleanup
   cleanup
end_unwind_protect

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

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

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

try
   body
catch
   exception_handling
end

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

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

[ редактировать ]

Octave имеет механизм обработки функций, которые принимают неопределенное количество аргументов без явного верхнего предела. Чтобы указать список из нуля или более аргументов, используйте специальный аргумент varargin в качестве последнего (или единственного) аргумента в списке. 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

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

[ редактировать ]

Также возможно выполнить код 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);
Matrix unis(f_ret(0).matrix_value());

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

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

[ редактировать ]

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

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

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

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

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

[ редактировать ]

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

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

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

[ редактировать ]

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

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

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

  octave:1> guide
  warning: the 'guide' function is not yet implemented in Octave

  Please read <http://www.octave.org/missing.html> to learn how you can contribute missing functionality.
  error: 'guide' undefined near line 1 column 1

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

[ редактировать ]

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

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

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

[ редактировать ]

С помощью кода Octave пользователь может создавать приложения с графическим интерфейсом. См. «Разработка графического пользовательского интерфейса (GNU Octave (версия 7.1.0)») . Ниже приведены несколько примеров:

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

# create figure and panel on it
f = figure;
# create a button (default style)
b1 = uicontrol (f, "string", "A Button", "position",[10 10 150 40]);
# create an edit control
e1 = uicontrol (f, "style", "edit", "string", "editable text", "position",[10 60 300 40]);
# create a checkbox
c1 = uicontrol (f, "style", "checkbox", "string", "a checkbox", "position",[10 120 150 40]);

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

prompt = {"Width", "Height", "Depth"};
defaults = {"1.10", "2.20", "3.30"};
rowscols = [1,10; 2,20; 3,30];
dims = inputdlg (prompt, "Enter Box Dimensions", rowscols, defaults);

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

my_options = {"An item", "another", "yet another"};
[sel, ok] = listdlg ("ListString", my_options, "SelectionMode", "Multiple");
if (ok == 1)
  msgbox ("You selected:");
  for i = 1:numel (sel)
    msgbox (sprintf ("\t%s", my_options{sel(i)}));
  endfor
else
  msgbox ("You cancelled.");
endif

Радиокнопки

# create figure and panel on it
f = figure;
# create a button group
gp = uibuttongroup (f, "Position", [ 0 0.5 1 1])
# create a buttons in the group
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 ]);
# create a button not in the group
b3 = uicontrol (f, "style", "radiobutton","string", "Not in the group","Position", [ 10 50 100 50 ]);

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

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

[ редактировать ]

Другие бесплатные альтернативы MATLAB включают Scilab и FreeMat . [36] [37] [38] [39] Octave более совместим с MATLAB, чем Scilab. [36] [40] [41] и FreeMat не обновлялся с июня 2013 года. [42]

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ GPL-3.0 или новее с 12 октября 2007 г.
  2. ^ GPL-2.0 или более поздняя версия с 19 февраля 1992 г. по 11 октября 2007 г.
  1. ^ Рик (10 июня 2015 г.). "contributors.in" . Проверено 14 июня 2015 г.
  2. ^ " Полноценная разработка началась весной 1992 года. Первый альфа-релиз состоялся 4 января 1993 года, а версия 1.0 вышла 17 февраля 1994 года." " .
  3. ^ «Выпущена GNU Octave 9.2.0» . 7 июня 2024 г. Проверено 10 июля 2024 г.
  4. ^ «Здание – Октава» . wiki.octave.org . ГНУ . Проверено 1 мая 2018 г.
  5. ^ «Баскский, белорусский, каталанский, китайский, голландский, английский, французский, немецкий, венгерский, итальянский, японский, латышский, португальский (Бразилия), португальский (Португалия), русский, испанский, турецкий, украинский» . hg.savannah.gnu.org .
  6. ^ «О GNU Octave» . www.gnu.org . ГНУ . Проверено 1 мая 2018 г.
  7. ^ «Выпущена GNU Octave 8.4.0» . Octave.org . 05.11.2023 . Проверено 20 ноября 2023 г.
  8. ^ Jump up to: а б Итон, Джон В. «Об Октаве» . Проверено 28 июня 2009 г.
  9. ^ «GNU Октава Версия 1» . www.gnu.org .
  10. ^ «GNU Октава Версия 2» . www.gnu.org .
  11. ^ «GNU Октава Версия 3» . www.gnu.org .
  12. ^ Jump up to: а б «GNU Octave версии 4.0» . www.gnu.org .
  13. ^ «Выпущена GNU Octave 4.0.0» . www.gnu.org . 29 мая 2015 г.
  14. ^ «Выпущена GNU Octave 4.0.1» . www.gnu.org . 23 марта 2016 г.
  15. ^ «Выпущена GNU Octave 4.0.3» . www.gnu.org . 2 июля 2016 г.
  16. ^ «GNU Octave версии 5» . www.gnu.org .
  17. ^ «Выпущена GNU Octave 6.1.0» . www.gnu.org . 26 ноября 2020 г.
  18. ^ «Выпущена GNU Octave 7.1.0» . www.gnu.org . 6 апреля 2022 г.
  19. ^ «Выпущена GNU Octave 8.1.0» . Octave.org . 7 марта 2023 г.
  20. ^ «GNU Octave версии 9» . Octave.org . Проверено 25 марта 2024 г.
  21. ^ «Выявление уязвимостей номеров социального страхования на основе суперкомпьютеров» . 8 июля 2009 г. Архивировано из оригинала 29 февраля 2012 г.
  22. ^ «Внешнее ускорение GNU Octave» . Блог разработчиков NVIDIA . 5 июня 2014 г.
  23. ^ «GNU Octave — Управление подпроцессами» . 14 ноября 2008 г. Архивировано из оригинала 7 января 2009 г. . Проверено 28 января 2009 г.
  24. ^ «ГНУ Октава» . Проверено 28 января 2009 г.
  25. ^ «Сводка важных изменений, видимых пользователю, для версии 3.2» . Проверено 5 января 2012 г.
  26. ^ «Часто задаваемые вопросы: совместимость с MATLAB» . Архивировано из оригинала 21 ноября 2011 г. Проверено 4 апреля 2009 г.
  27. ^ «Часто задаваемые вопросы: Получение Октавы» . Архивировано из оригинала 21 ноября 2011 г. Проверено 4 апреля 2009 г.
  28. ^ «Верх (GNU Octave (версия 6.3.0))» . Octave.org .
  29. ^ «Октава для Android — Октава» . wiki.octave.org . Проверено 23 августа 2021 г.
  30. ^ Итон, Джон В. «Позвольте печатать Readline за вас» . Справочное руководство GNU Octave . Архивировано из оригинала 12 февраля 2018 г. Проверено 29 июля 2016 г.
  31. ^ «FAQ – Октава» . wiki.octave.org . Проверено 5 декабря 2022 г.
  32. ^ «Центральные условия использования MATLAB» . www.mathworks.com . Проверено 5 декабря 2022 г.
  33. ^ «Часто задаваемые вопросы по лицензированию обмена файлами» . www.mathworks.com . Проверено 5 декабря 2022 г.
  34. ^ «GNU Octave версии 3.8» . www.gnu.org .
  35. ^ Хагеман, Стив (7 февраля 2014 г.). «GNU Octave берет высокую ноту» . ЭДН .
  36. ^ Jump up to: а б Траппенберг, Томас (2010). Основы вычислительной нейронауки . Издательство Оксфордского университета. п. 361. ИСБН  978-0-19-956841-3 .
  37. ^ Мухаммед, А; Зализняк, В (2011). Практические научные вычисления . Издательство Вудхед . п. 3 . ISBN  978-0-85709-226-7 .
  38. ^ Мегрей, Бернард А.; Мокснесс, Эрленд (2008). Компьютеры в исследованиях рыболовства . Springer Science & Business Media. п. 345 . ISBN  978-1-4020-8636-6 .
  39. ^ Капуно, Рауль Раймонд (2008). Программирование для инженеров-химиков с использованием C, C++ и MATLAB . Издательство Джонс и Бартлетт. п. 365. ИСБН  978-1-934015-09-4 .
  40. ^ Герман, Рассел Л. (2013). Курс математических методов для физиков . ЦРК Пресс. п. 42. ИСБН  978-1-4665-8467-9 .
  41. ^ Ваувер, Ален Ванде; Сосес, Филипп; Вилас, Карлос (2014). Моделирование моделей ODE/PDE с помощью MATLAB, Octave и Scilab: научные и инженерные приложения . Спрингер. стр. 114–115. ISBN  978-3-319-06790-2 .
  42. ^ «ФриМэт» . freemat.sourceforge.net . Проверено 22 февраля 2020 г. .

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

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 5847216fe32994f6b56c351267ae26f4__1720645380
URL1:https://arc.ask3.ru/arc/aa/58/f4/5847216fe32994f6b56c351267ae26f4.html
Заголовок, (Title) документа по адресу, URL1:
GNU Octave - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)