GNU Octave - GNU Octave

GNU Octave
GNU-octave-logo.svg
GNUOctave430.png
GNU Octave 4.3.0+, работающая в Linux
Разработчики) Джон У. Итон и многие другие
Первый выпуск 1988 ; 33 года назад ( 1988 )
Стабильный выпуск
6.3.0 / 11 июля 2021 г . ; 3 месяца назад ( 11 июля 2021 г. )
Предварительный выпуск
6.0.90a / 28 августа 2020 г . ; 13 месяцев назад ( 2020-08-28 )
Репозиторий
Написано в C , C ++ , Фортран
Операционная система Windows , macOS , Linux , BSD
Доступно в 17 языков
Тип Научные вычисления
Лицензия 2007: GPL-3.0 или новее
1992: GPL-2.0 или новее
Веб-сайт gnu .org / программное обеспечение / октава /

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

Другие бесплатные альтернативы MATLAB включают Scilab и FreeMat . Octave более совместим с MATLAB, чем Scilab, а FreeMat не обновлялся с июня 2013 года.

История

Проект был задуман примерно в 1988 году. Сначала он задумывался как дополнение к курсу проектирования химических реакторов. Настоящая разработка была начата Джоном У. Итоном в 1992 году. Первый альфа-релиз датируется 4 января 1993 года, а 17 февраля 1994 года была выпущена версия 1.0. Версия 4.0.0 была выпущена 29 мая 2015 года.

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

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

Время Действие
1988/1989 1-е обсуждение (книга и программное обеспечение)
Февраль 1992 г. Начало разработки
Январь 1993 Новости в Интернете (версия 0.60)
Февраль 1994 Первая публикация (версии с 1.0.0 по 1.1.1)
Декабрь 1996 г. 2-я публикация (версия 2.0.x) с портом Windows ( Cygwin )
Март 1998 г. Версия 2.1
Ноябрь 2004 г. Версия 2.9 (DEV версия 3.0)
Декабрь 2007 г. Публикация версии 3.0 (Milestone)
Июнь 2009 г. Публикация версии 3.2 (Milestone)
8 февраля 2011 г. Версия 3.4.0 (Milestone)
22 февраля 2012 г. Публикация Octave 3.6.1 (Milestone)
31 декабря 2013 г. Публикация Octave 3.8.0 (экспериментальный графический интерфейс)
29 мая 2015 Версия 4.0.0 (стабильный графический интерфейс и новый синтаксис для ООП )
14 ноября 2016 г. Версия 4.2.0 (gnuplot 4.4+)
30 апреля 2018 г. Версия 4.4.0 (новая цель для GUI QT Toolkit, инструментарий FLTK не является устаревшим, и нет графика для его удаления - хотя больше не имеет приоритета)
1 марта 2019 г. Публикация Octave 5.1.0 (предпочтительно QT5, минимум Qt 4.8), поддержка hiDpi
31 января 2020 г. Публикация Octave 5.2.0 (предпочтительно QT5)
26 ноября 2020 г. Публикация Octave 6.1.0 (QT5 предпочтительно, Qt 4.x не рекомендуется для удаления в 7)
20 февраля 2021 г. Публикация Octave 6.2.0 (предпочтительно QT5), исправление ошибок, улучшенная поддержка синтаксиса Matlab

Разработки

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

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

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

Октава, язык

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

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

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

Поскольку Octave предоставляется под Стандартной общественной лицензией GNU , ее можно свободно изменять, копировать и использовать. Программа работает в Microsoft Windows и большинстве Unix и Unix-подобных операционных систем , включая Linux , Android и macOS .

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

Завершение имени команды и переменной

Пишем символ табуляции в командной строке заставляет Octave пытаться полной переменной, функции и имена файлов ( по аналогии с Bash «s автодополнению ). Octave использует текст перед курсором как начальную часть имени для завершения.

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

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

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

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

Булевы операторы короткого замыкания

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

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

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

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

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

unwind_protect
   body
unwind_protect_cleanup
   cleanup
end_unwind_protect

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

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

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

try
   body
catch
   exception_handling
end

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

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

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

Также возможно выполнить код 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 Условие использования запрещает любое использование ряда MathWorks' патентованного MATLAB.

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

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

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

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

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

Список недоступных функций включен в функцию 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 и стал интерфейсом по умолчанию (поверх интерфейса командной строки ) с выпуском Octave 4.0. Он был хорошо принят участником EDN, который сказал, что «[Octave] теперь имеет очень работоспособный графический интерфейс».

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

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

С помощью кода Octave пользователь может создавать приложения с графическим интерфейсом для разработки графического интерфейса пользователя (GNU Octave (версия 6.3.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 . Доступные пакеты:

  • bim - Пакет для решения дифференциальных уравнений в частных производных с реакцией диффузии и адвекции (DAR)
  • bsltl - Пакет BSLTL представляет собой бесплатный набор процедур OCTAVE / MATLAB для работы с методом биоспекл-лазера.
  • cgi - Общий интерфейс шлюза для Octave
  • коммуникации - цифровая связь, коды с исправлением ошибок (код канала), функции исходного кода, модуляция и поля Галуа
  • control - Инструменты автоматизированного проектирования систем управления (CACSD) для GNU Octave, основанные на проверенной библиотеке SLICOT
  • data-smoothing - Алгоритмы сглаживания зашумленных данных
  • database - интерфейс с базами данных SQL, в настоящее время только postgresql с использованием libpq
  • dataframe - набор инструментов для работы с данными, аналогичный данным R
  • dicom - Цифровые коммуникации в медицине (DICOM), файл io
  • divand - divand выполняет n-мерный вариационный анализ (интерполяцию) произвольно расположенных наблюдений
  • doctest - Пакет Octave-Forge Doctest находит специально отформатированные блоки примера кода в файлах документации.
  • эконометрика - функции эконометрики, включая методы на основе MLE и GMM
  • fem-fenics - pkg для разрешения дифференциальных уравнений в частных производных на основе fenics
  • финансовые - моделирование Монте-Карло, процедуры ценообразования опционов, финансовые манипуляции, функции построения графиков и дополнительные инструменты манипулирования датами
  • подходит - пакет Octave-FITS предоставляет функции для чтения и записи файлов FITS (гибкая система передачи изображений)
  • fpl - набор процедур для экспорта данных, созданных с помощью моделирования конечных элементов или конечного объема, в форматах, используемых некоторыми программами визуализации.
  • набор инструментов нечеткой логики - в основном совместимый с MATLAB набор инструментов нечеткой логики для Octave (не устанавливается из-за давней ошибки)
  • ga - код генетической оптимизации
  • general - Общие инструменты для Octave
  • generate_html - этот пакет предоставляет функции для создания HTML-страниц, содержащих тексты справки для набора функций.
  • geometry - Библиотека для геометрических вычислений, расширяющая функции MatGeom
  • gsl - привязки Octave к научной библиотеке GNU
  • image - Пакет Octave-forge Image предоставляет функции для обработки изображений
  • получение изображений - пакет Octave-forge Image Acquisition предоставляет функции для захвата изображений с подключенных устройств.
  • instrument-control - низкоуровневые функции ввода / вывода для интерфейсов последовательного, i2c, параллельного, tcp, gpib, vxi11, udp и usbtmc
  • interval - Пакет интервалов для вещественной интервальной арифметики позволяет оценивать функции по подмножествам их области
  • io - ввод / вывод во внешних форматах, например Excel
  • level-set - процедуры для расчета временной эволюции уравнения набора уровней и извлечения геометрической информации из функции набора уровней.
  • linear-algebra - Дополнительный код линейной алгебры, включая общие SVD и матричные функции
  • lssa - Пакет, реализующий инструменты для вычисления спектральных разложений нерегулярных временных рядов
  • ltfat - Large Time / Frequency Analysis Toolbox (LTFAT) - это набор инструментов MATLAB / Octave для работы с частотно-временным анализом, вейвлетами и обработкой сигналов.
  • отображение - Простое отображение и функции ГИС .shp и растровых файлов
  • mataveid - Пакет идентификации системы как для MATLAB, так и для GNU Octave
  • matavecontrol - Панель инструментов управления как для MATLAB, так и для GNU Octave
  • разное - разные инструменты, которые больше нигде не поместятся
  • mpi - привязки Octave для основных функций интерфейса передачи сообщений (MPI) для параллельных вычислений
  • msh - Создание и управление треугольными и тетраэдральными сетками для решателей конечных элементов или конечного объема.
  • mvn - многомерная кластеризация с нормальным распределением и функции полезности
  • nan - набор инструментов для статистики и машинного обучения для данных с пропущенными значениями и без них.
  • ncarray - Доступ к одному или нескольким файлам NetCDF как к многомерному массиву
  • netcdf - совместимый с MATLAB интерфейс NetCDF для Octave
  • nurbs - Сборник процедур для создания и управления неоднородными рациональными B-сплайнами (NURBS) на основе набора инструментов NURBS от Марка Спинка
  • ocs - Пакет для решения уравнений постоянного и переходного электрических цепей
  • octclip - этот пакет позволяет пользователям выполнять логические операции с полигонами, используя алгоритм Грейнера-Хормана.
  • octproj - этот пакет позволяет пользователям вызывать функции PROJ
  • optics - Функции, охватывающие различные аспекты оптики.
  • optim - инструментарий нелинейной оптимизации
  • optiminterp - Оптимальный набор инструментов интерполяции для октавы
  • parallel - Пакет параллельного выполнения
  • quaternion - пакет Quaternion для GNU Octave, включает класс quaternion с перегруженными операторами
  • организация очередей - пакет очередей предоставляет функции для анализа сетей массового обслуживания и цепей Маркова.
  • secs1d - Симулятор дрейфа-диффузии для полупроводниковых устройств 1d.
  • secs2d - Симулятор дрейфа-диффузии для двумерных полупроводниковых устройств.
  • secs3d - Симулятор дрейфа-диффузии для трехмерных полупроводниковых устройств.
  • signal - инструменты обработки сигналов, включая функции фильтрации, управления окнами и отображения.
  • сокеты - функции сокетов для работы в сети из октавы
  • sparsersb - Интерфейс к пакету librsb, реализующий формат разреженной матрицы RSB для быстрых вычислений разреженной матрицы с общей памятью
  • splines - Дополнительные функции сплайна
  • статистика - Дополнительные функции статистики для Octave
  • stk - STK - это (не очень) небольшой набор инструментов для кригинга.
  • strings - Дополнительные функции для обработки и анализа строк
  • struct - Дополнительные функции манипулирования структурой
  • символический - Пакет Octave-Forge Symbolic добавляет функции символьных вычислений в GNU Octave
  • tisean - Порт ТИСЕАН 3
  • tsa - Стохастические концепции и методы максимальной энтропии для анализа временных рядов
  • vibes - API VIBes позволяет легко отображать результаты (блоки, дорожные покрытия) из интервальных методов
  • video - оболочка для libavformat и libavcodec ffmpeg, реализующая addframe, avifile, aviinfo и aviread
  • vrml - 3D-графика с использованием VRML
  • windows - Обеспечивает COM-интерфейс и дополнительные функции в Windows
  • zeromq - привязки ZeroMQ для GNU Octave

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

Примечания

использованная литература

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

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