GNU Octave

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 17:49, 29 ноября 2016.
GNU Octave
283px-Gnu-octave-logo.svg.png
Разработчики: John W. Eaton
Выпущена: 1988
Написана на: C++
Операционная система: Linux, UNIX, Cygwin, Windows, Android[1]
Тип ПО: математическое программное обеспечение
Лицензия: GNU General Public License
Веб-сайт http://www.gnu.org/software/octave/

GNU Octave — Свободное программное обеспечение система для математических вычислений[2], использующая совместимый с MATLAB язык высокого уровня [3].

Octave представляет интерактивный командный интерфейс для решения линейных и нелинейных математических задач, а также проведения других численных экспериментов. Кроме того, Octave можно использовать для пакетной обработки. Язык Octave оперирует арифметикой вещественных и комплексных скаляров и матриц, имеет расширения для решения линейных алгебраических задач, нахождения корней систем нелинейных алгебраических уравнений, работы с полиномами, решения различных дифференциальных уравнений, интегрирования систем дифференциальных и дифференциально-алгебраических уравнений первого порядка, интегрирования функций на конечных и бесконечных интервалах. Этот список можно легко расширить, используя язык Octave (или используя динамически загружаемые модули, созданные на языках Си (язык программирования), С++, Фортран и др.)

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

  • Octave написан на C++ с использованием Стандартная библиотека шаблонов|стандартной библиотеки шаблонов;
  • Для запуска скриптов Octave использует интерпретатор;
  • Octave можно дополнять динамически подгружаемыми модулями;
  • Для создания и распечатки графиков Octave использует на выбор gnuplot, встроенный модуль на основе FLTK, или Grace (программа).
  • Название дано в честь американского химика-технолога Октейва Левенспиля (Octave Levenspiel).

Язык Octave

Octave — интерпретируемый язык программирования. Он похож на Си и поддерживает большинство основных функций стандартной библиотеки Си, а также основные команды и системные вызовы Unix. С другой стороны, он не поддерживает передачу аргументов по ссылке (особенность дизайна).

Синтаксис языка очень похож на MATLAB, и грамотно написанные скрипты будут запускаться как в Octave, так и в MATLAB.

Некоторые возможности

Интерфейс

Интерфейс командной строки Octave построен с использованием библиотеки GNU Readline, что дает доступ к таким обычным возможностям последней, как автодополнение по клавише TAB, история команд и инкрементальный поиск по ней CtrlR, клавишаCtrlS, возможность переопределения клавиш, и т. д. Графический интерфейс до версии 3.8.0 был представлен дополнениями (графики он мог выводить и без них).

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

Выражения Octave можно вычислять из программ на C++. К примеру, фрагмент кода для вычисления rand([9000,1]):

#include <octave/oct.h>

ColumnVector NumRands(2);
NumRands(0) = 9000;
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());
Производительность

Если в конце 1990-х гг. (2-я серия выпусков) отмечалось, что производительность Octave существенно уступает производительности MATLAB, то к концу 2000-х гг. (3-я серия выпусков) производительности этих пакетов «почти сравнялись», а остающуюся разницу приписывают наличию в составе MATLAB интерпретатора-компилятора (Just in Time — JIT), которого нет в Octave.

Параллельные вычисления

Основными решениями по организации распределенных вычислений в среде Octave являются библиотеки bcMPI, MPI Toolbox for Octave (MPITB), octave-parallel_mpi и parallel (ранее octave-parallel), предназначенные для кластерных систем, и модуль parcellfun библиотеки general для обеспечения параллельных вычислений в масштабе «одной машины» (на многоядерных и массивно-параллельных системах).

Первые три библиотеки обеспечивают интерфейс к наличной инсталляции библиотеки MPI и, насколько возможно, транслируют в Octave (bcMPI — и в MATLAB) синтаксис подмножества вызовов MPI. Соответственно в этих случаях вычисления распределены лишь настолько, насколько это подготовлено программистом, и обеспечиваются в пределах возможностей системной инсталляции MPI.

Библиотека parallel, напротив, не требует наличия среды типа MPI или PVM, а обеспечивает распределенность с помощью внутренних средств пакета Octave.

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

Octave был написан с учётом совместимости с MATLAB и реализует многие его возможности:

  • матрицы в качестве основных типов данных;
  • встроенная поддержка комплексных чисел;
  • мощные встроенные математические функции и большие библиотеки функций;
  • расширяемость, благодаря возможности создания пользовательских функций.

Но есть и отличия:

  • комментарии могут начинаться как с символа #, так и с символа %;
  • поддерживаются C-подобные операторы ++, --, +=, *=, /=;
  • элементы могут быть адресованы без создания новой переменной, например [1:10](3);
  • строки могут быть заданы как символом «"», так и символом «'».

Запуск Octave

На большинстве систем Octave можно запустить, набрав в командной строке команду «octave»:

octave

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

octave:1>

Если у вас возникли проблемы, вы можете просто прервать Octave нажав «Ctrl-C» (далее для краткости пишется «C-c»).

Чтобы выйти из Octave, наберите «quit» или «exit» в командной строке:

octave:1> quit

или

octave:1> exit

В системах, которые поддерживают контроль над заданиями, можно приостановить Octave, послав ему сигнал SIGTSTP, обычно для этого нужно нажать «C-z».

Простейшие примеры

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

Если вы новичок в Octave, я бы рекомендовал вам начать обучение с рассмотрения этих примеров. Строки, содержащие пометки типа «octave:13>» — строки ввода, которые должны заканчиваться нажатием клавиши «Enter». После нажатия этой клавиши Octave либо выдаст ответ либо построит график.

Создание матрицы

Чтобы создать новую матрицу и сохранит её в переменной, введите команду:

octave:1> A = [ 1, 1, 2; 3, 5, 8; 13, 21, 34 ]

Octave выведет на экран матрицу с аккуратно выровненными колонками. Если команду закончить «;», то Octave не будет выводить результат команды. Например, команда:

 
octave:2> B = rand (3, 2);

создаст матрицу с 3-мя строками и 2-мя столбцами, элементы которой примут случайные значения в промежутке между нулём и единицей.

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

octave:3> B

Арифметические операции с матрицами

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

octave:4> 2 * A

Чтобы перемножить две матрицы A и B, наберите команду:

octave:5> A * B

Для того, чтобы выполнить матричное произведение матрицы A на транспонированную матрицу A (A * transpose(A)), наберите команду:

octave:6> A * A'

Решение линейных уравнений

Для решения системы линейных уравнений , используйте оператор левого деления «\»:

octave:7> A \ b

Если матрица коэффициентов вырождена, программа выведет сообщение о предупреждении и вычислит решение минимальной нормы.

Интегрирование дифференциальных уравнений

Octave имеет встроенные функции для решения нелинейных дифференциальных уравнений вида и начальными условиями .

Чтобы Octave смогла проинтегрировать уравнения такого вида, вы должны сперва определить функцию . Это несложно сделать. Тело функции можно ввести прямо в командную строку. Например, следующие команды определяют правые части двух нелинейных дифференциальных уравнений. Заметьте, что пока вы вводите функцию, Octave изменяет вид приглашения командной строки, чтобы напомнить вам о том, что в данный момент происходит ввод функции.

octave:8> function xdot = f (x, t)
>
>  r = 0.25;
>  k = 1.4;
>  a = 1.5;
>  b = 0.16;
>  c = 0.9;
>  d = 0.8;
>
>  xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));
>  xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);
>
>  endfunction

Задаём начальные условия:

x0 = [1; 2];

Задаём вектор аргументов (первый элемент вектора аргументов соответствует начальным условиям, записанным выше):

t = linspace (0, 50, 200)';

Теперь вводим простую команду для интегрирования дифференциальных уравнений:

x = lsode ("f", x0, t);

Графический вывод

График

Чтобы вывести на экран графическое представление решения предыдущего примера, воспользуйтесь командой:

plot (t, x)

Если вы пользуетесь графическим интерфейсом, Octave автоматически создаст отдельное окно для графика.

Чтобы сохранить график, построенный на экране, воспользуйтесь командой «print». Например:

print -deps foo.eps

создаст файл с именем foo.eps в формате EPS, содержащий построенный график. Команда:

help print

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

Редактирование в командной строке

Используя командную строку Octave, вы можете вызвать, исправить и повторить предыдущие команды с помощью Emacs-подобных или vi-подобных команд редактирования. По умолчанию используются клавиатурные привязки к командам в стиле Emacs. Например, чтобы вызвать предыдущую команду, нажмите «C-p». Нажатие «C-n» позволит перемещаться по истории введённых команд в прямом направлении. Нажатие клавиш «C-f» и «C-b» перемещает курсор ввода командной строки вправо и влево соответственно, и т. д.

Полное описание возможностей команд редактирования даётся в разделе «Редактирование командной строки».

Справка и документация

Octave имеет обширную справочную информацию, доступ к которой можно получить из командной строки Octave.

Для получения справочной информации, вы должны знать имя команды, о которой требуется получить справку. Имя функции может быть не всегда очевидным, хороший способ — набрать для начала команду «help». Она покажет все операторы, зарезервированные слова, функции, встроенные переменные и функции файлов. Другой способ — выполнить поиск с помощью функции «lookfor». Эта функция описывается в разделе «Получение помощи».

После того, как вам станет известно имя функции, о которой вы хотите получить справку, введите его в качестве аргумента команды «help». Например:

help plot

отобразит справку для функции «plot».

Для вывода на экран информации, которая не может полностью на нём поместиться, Octave использует пейджеры на подобие less и more. Нажатие «Enter» выводит следующую строку, «Пробел» — следующую страницу. Клавиша «q» закрывает пейджер.

Соглашения

Этот раздел объясняет типографические соглашения, используемые в этом руководстве. Возможно вы захотите пропустить этот раздел и вернуться к нему позже.

Шрифты

Что обозначается Как обозначается
Пример кода Octave
svd (a)
Имена, представляющие аргументы и
метасинтаксические переменные
первый-номер
Команды командной строки оболочки
`octave --no-init-file'
Команды командной строки Octave
foo --bar --baz
Клавиши клавиатуры «Любая клавиша»

Запись вычислений

В примерах, рассмотренных в данном руководстве, результаты выражений, которые вы вычисляете отмечаются символами „=>“. Например:

sqrt (2)
     => 1.4142

Эту запись можно интерпретировать как: «Корень из двух равен 1.4142».

В некоторых случаях, матричные значения, возвращаемые выражениями, отображаются следующим образом:

[1, 2; 3, 4] == [1, 3; 2, 4]
     => [ 1, 0; 0, 1 ]

А в других случаях, чтобы наглядно показать результат, так:

eye (3)
     =>  1  0  0
         0  1  0
         0  0  1

Sometimes to help describe one expression, another expression is shown that produces identical results. The exact equivalence of expressions is indicated with `=='. For example:

rot90 ([1, 2; 3, 4], -1)
==
rot90 ([1, 2; 3, 4], 3)
==
rot90 ([1, 2; 3, 4], 7)

Форматированный вывод

Большинство приведенных здесь примеров отображают результат своей работы на дисплее сразу после их выполнения. Выводимое на дисплей значение отображено после знака `-|'. Значение возвращенное в результате выполнения выражения, приведенного ниже, приведено после знака `=>'.

Пример:

printf ("foo %s\n", "bar")
    -| foo bar
    => 1

Сообщения об ошибках

Примеры сообщений об ошибках. Как правило сообщение об ошибке отображаются в терминале. Сообщения об ошибках выводятся на следующую строку, обозначается обычно красным цветом:

struct_elements ([1, 2; 3, 4])
error: struct_elements: wrong type argument `matrix'

Литература

  • GNU Octave Manual Version 3 / J.W. Eaton, D. Bateman, S. Hauberg. Network Theory Limited, 2008. 568 стр.
  • Е. Р. Алексеев, О. В. Чеснокова «Введение в Octave дляинженеров и математиков» М.: ALT Linux, 2012. — 368 стр.: ил. Учебник Octave на русском
  • Eddelbüttel, D. Bank of Montreal, Toronto, Canada. Econometrics with Octave / D. Eddelbüttel [Electronic resource]: Дата обращения: 29.11.2016 — Режим доступа: http://dirk.eddelbuettel.com/papers/octave.pdf.
  • Octave and Python: High-Level Scripting Languages Productivity and Performance Evaluation / J.C. Chaves [et. al.] [Electronic resource]: Дата обращения: 29.11.2016. — Режим доступа: http://www.osc.edu/research/cse/projects/octave_python.pdf.

Ссылки

  1. "Android Apps auf Google Play" : [Электронный ресурс]: Octave / Дата обращения: 28.11.2016. - Режим доступа: "Octave – Android Apps auf Google Play". Retrieved 2013-02-18. 
  2. Syntax Examples: [Электронный ресурс]: GHU Octave/ Дата обращения 28.11.2016. - Режим доступа:Octave
  3. Официальный сайт: [Электронный ресурс]: GNU Octave/ Дата обращения 28.11.2016.-Режим доступа:About Octave