GNU Октава
Разработчик(и) | Джон В. Итон и многие другие [1] |
---|---|
Первоначальный выпуск | 4 января 1993 г 17 февраля 1994 г (версия 1.0) [2] | (первая альфа-версия)
Стабильная версия | 9.2.0 [3]
/ 7 июня 2024 г |
Репозиторий | |
Написано в | C++ (основной), сама Octave (скрипты), C (код-оболочка), Fortran (код-оболочка линейной алгебры) [4] |
Операционная система | Windows , MacOS , Linux , BSD |
Доступно в | 18 языков [5] |
Тип | Научные вычисления |
Лицензия | 2007: GPL-3.0 или новее [а] 1992: GPL-2.0 или новее [б] |
Веб-сайт | ГНУ |
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++ .
- Octave использует интерпретатор для выполнения языка сценариев Octave.
- Octave расширяется с помощью динамически загружаемых модулей.
- Интерпретатор Octave имеет графический движок на основе OpenGL для создания графиков, графиков и диаграмм, а также их сохранения или печати. В качестве альтернативы gnuplot . для той же цели можно использовать
- Octave включает графический интерфейс пользователя (GUI) в дополнение к традиционному интерфейсу командной строки (CLI); см. в разделе #Пользовательские интерфейсы . подробности
Октава, язык
[ редактировать ]Язык 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 функций:
- Матрицы как фундаментальный тип данных.
- Встроенная поддержка комплексных чисел.
- Мощные встроенные математические функции и обширные библиотеки функций.
- Расширяемость в виде определяемых пользователем функций.
Octave рассматривает несовместимость с MATLAB как ошибку ; следовательно, его можно считать клоном программного обеспечения , который не нарушает авторские права на программное обеспечение согласно Lotus против Borland судебному делу .
Скрипты MATLAB из репозитория MathWorks FileExchange в принципе совместимы с Octave. Однако, хотя они часто предоставляются и загружаются пользователями под совместимой с Octave и надлежащей с открытым исходным кодом лицензией BSD FileExchange , Условия использования MATLAB MathWorks запрещают любое использование, кроме проприетарного . [31] [32] [33]
Совместимость синтаксиса
[ редактировать ]Есть несколько целенаправленных, хотя и незначительных, синтаксических дополнений. Архивировано 26 апреля 2012 г. на Wayback Machine :
- Строки комментариев могут начинаться с символа # или символа %;
- различные C операторы ++ , -- , += , *=, /=; Поддерживаются
- На элементы можно ссылаться без создания новой переменной посредством каскадной индексации, например, [1:10](3);
- Строки могут определяться с помощью символа двойной кавычки ", а также символа одинарной кавычки;
- Когда тип переменной одинарный (число с плавающей запятой одинарной точности), Octave вычисляет « среднее значение » в однодоменном (MATLAB в двухдоменном ), что быстрее, но дает менее точные результаты;
- Блоки также могут завершаться более конкретными ключевыми словами структуры управления , например, endif, endfor, end while и т. д.;
- Функции могут быть определены в сценариях и в командной строке Octave;
- Наличие цикла 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]
См. также
[ редактировать ]- Список программного обеспечения для численного анализа
- Сравнение программного обеспечения для численного анализа
- Список статистических пакетов
- Список числовых библиотек
Примечания
[ редактировать ]Ссылки
[ редактировать ]- ^ Рик (10 июня 2015 г.). "contributors.in" . Проверено 14 июня 2015 г.
- ^ " Полноценная разработка началась весной 1992 года. Первый альфа-релиз состоялся 4 января 1993 года, а версия 1.0 вышла 17 февраля 1994 года." " .
- ^ «Выпущена GNU Octave 9.2.0» . 7 июня 2024 г. Проверено 10 июля 2024 г.
- ^ «Здание – Октава» . wiki.octave.org . ГНУ . Проверено 1 мая 2018 г.
- ^ «Баскский, белорусский, каталанский, китайский, голландский, английский, французский, немецкий, венгерский, итальянский, японский, латышский, португальский (Бразилия), португальский (Португалия), русский, испанский, турецкий, украинский» . hg.savannah.gnu.org .
- ^ «О GNU Octave» . www.gnu.org . ГНУ . Проверено 1 мая 2018 г.
- ^ «Выпущена GNU Octave 8.4.0» . Octave.org . 05.11.2023 . Проверено 20 ноября 2023 г.
- ^ Jump up to: а б Итон, Джон В. «Об Октаве» . Проверено 28 июня 2009 г.
- ^ «GNU Октава Версия 1» . www.gnu.org .
- ^ «GNU Октава Версия 2» . www.gnu.org .
- ^ «GNU Октава Версия 3» . www.gnu.org .
- ^ Jump up to: а б «GNU Octave версии 4.0» . www.gnu.org .
- ^ «Выпущена GNU Octave 4.0.0» . www.gnu.org . 29 мая 2015 г.
- ^ «Выпущена GNU Octave 4.0.1» . www.gnu.org . 23 марта 2016 г.
- ^ «Выпущена GNU Octave 4.0.3» . www.gnu.org . 2 июля 2016 г.
- ^ «GNU Octave версии 5» . www.gnu.org .
- ^ «Выпущена GNU Octave 6.1.0» . www.gnu.org . 26 ноября 2020 г.
- ^ «Выпущена GNU Octave 7.1.0» . www.gnu.org . 6 апреля 2022 г.
- ^ «Выпущена GNU Octave 8.1.0» . Octave.org . 7 марта 2023 г.
- ^ «GNU Octave версии 9» . Octave.org . Проверено 25 марта 2024 г.
- ^ «Выявление уязвимостей номеров социального страхования на основе суперкомпьютеров» . 8 июля 2009 г. Архивировано из оригинала 29 февраля 2012 г.
- ^ «Внешнее ускорение GNU Octave» . Блог разработчиков NVIDIA . 5 июня 2014 г.
- ^ «GNU Octave — Управление подпроцессами» . 14 ноября 2008 г. Архивировано из оригинала 7 января 2009 г. . Проверено 28 января 2009 г.
- ^ «ГНУ Октава» . Проверено 28 января 2009 г.
- ^ «Сводка важных изменений, видимых пользователю, для версии 3.2» . Проверено 5 января 2012 г.
- ^ «Часто задаваемые вопросы: совместимость с MATLAB» . Архивировано из оригинала 21 ноября 2011 г. Проверено 4 апреля 2009 г.
- ^ «Часто задаваемые вопросы: Получение Октавы» . Архивировано из оригинала 21 ноября 2011 г. Проверено 4 апреля 2009 г.
- ^ «Верх (GNU Octave (версия 6.3.0))» . Octave.org .
- ^ «Октава для Android — Октава» . wiki.octave.org . Проверено 23 августа 2021 г.
- ^ Итон, Джон В. «Позвольте печатать Readline за вас» . Справочное руководство GNU Octave . Архивировано из оригинала 12 февраля 2018 г. Проверено 29 июля 2016 г.
- ^ «FAQ – Октава» . wiki.octave.org . Проверено 5 декабря 2022 г.
- ^ «Центральные условия использования MATLAB» . www.mathworks.com . Проверено 5 декабря 2022 г.
- ^ «Часто задаваемые вопросы по лицензированию обмена файлами» . www.mathworks.com . Проверено 5 декабря 2022 г.
- ^ «GNU Octave версии 3.8» . www.gnu.org .
- ^ Хагеман, Стив (7 февраля 2014 г.). «GNU Octave берет высокую ноту» . ЭДН .
- ^ Jump up to: а б Траппенберг, Томас (2010). Основы вычислительной нейронауки . Издательство Оксфордского университета. п. 361. ИСБН 978-0-19-956841-3 .
- ^ Мухаммед, А; Зализняк, В (2011). Практические научные вычисления . Издательство Вудхед . п. 3 . ISBN 978-0-85709-226-7 .
- ^ Мегрей, Бернард А.; Мокснесс, Эрленд (2008). Компьютеры в исследованиях рыболовства . Springer Science & Business Media. п. 345 . ISBN 978-1-4020-8636-6 .
- ^ Капуно, Рауль Раймонд (2008). Программирование для инженеров-химиков с использованием C, C++ и MATLAB . Издательство Джонс и Бартлетт. п. 365. ИСБН 978-1-934015-09-4 .
- ^ Герман, Рассел Л. (2013). Курс математических методов для физиков . ЦРК Пресс. п. 42. ИСБН 978-1-4665-8467-9 .
- ^ Ваувер, Ален Ванде; Сосес, Филипп; Вилас, Карлос (2014). Моделирование моделей ODE/PDE с помощью MATLAB, Octave и Scilab: научные и инженерные приложения . Спрингер. стр. 114–115. ISBN 978-3-319-06790-2 .
- ^ «ФриМэт» . freemat.sourceforge.net . Проверено 22 февраля 2020 г. .
Дальнейшее чтение
[ редактировать ]- Хансен, Йеспер Шмидт (июнь 2011 г.). ГНУ Октава. Руководство для начинающих . Пакт Паблишинг . ISBN 978-1-849-51332-6 .
Внешние ссылки
[ редактировать ]- Программное обеспечение для обработки изображений
- Языки программирования массивов
- Кроссплатформенное бесплатное программное обеспечение
- Программное обеспечение для анализа данных
- Программное обеспечение для интеллектуального анализа данных и машинного обучения
- Бесплатное образовательное программное обеспечение
- Бесплатное математическое программное обеспечение
- Бесплатное программное обеспечение, написанное на C++.
- Программное обеспечение проекта GNU
- Программное обеспечение для численного анализа для Linux
- Программное обеспечение для численного анализа для macOS
- Программное обеспечение для численного анализа для Windows
- Языки числового программирования
- Научное программное обеспечение, использующее Qt
- Программное обеспечение, использующее Qt