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);
Графический вывод
правитьЧтобы вывести на экран графическое представление решения предыдущего примера, воспользуйтесь командой:
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'