GNU Octave/Короткое знакомство с GNU Octave

Это руководство рассказывает о том, как установить, запустить и использовать GNU Octave, а также о том, как сообщать об ошибках.

GNU Octave — высокоуровневый язык программирования, предназначенный прежде всего для численных расчётов. Он предоставляет удобный интерфейс командной строки для численного решения линейных и нелинейных задач, а также для выполнения других численных экспериментов.

Кроме того, GNU Octave — свободно распространяемое программное обеспечение. Вы можете распространять и изменять его в соответствии с GNU General Public License, опубликованной Free Software Foundation.

Этот документ соответствует версии 2.9.12+.

Запуск Octave

править

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

octave

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

octave:1>

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

 

Обозначение «C-c» говорит о том, что удерживая клавишу «Ctrl» нужно нажать клавишу «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);

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

править
 
График, сохранённый в векторном формате SVG

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

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

Иногда, чтобы помочь описать одно выражение, показывается другое выражение, которое возвращает идентичный результат. Точное соответствие выражений отображается с помощью символа '=='. Например:

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'

Format of Descriptions

править