Spec-Zone.ru › Octave 5

1.2 Простые примеры

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

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

1.2.1 Элементарные вычисления

Octave легко используется для основных численных вычислений. Octave знает арифметические операции (+, -, *, /), возведение в степень (^), натуральные логарифмы/экспоненты (log, exp) и тригонометрические функции (sin, cos, …). Кроме того, вычисления Octave работают с действительными или мнимыми числами (i, j). Кроме того, некоторые математические константы, такие как основание натурального логарифма (e) и отношение окружности круга к его диаметру (pi), предварительно определены.

Например, чтобы проверить тождество Эйлера,


 i*pi
e     = -1

введите следующее, что даст -1 в пределах толерантности вычисления.

octave:1> exp (i*pi)

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

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

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

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

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

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

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

octave:3> B

1.2.3 Матричные операции

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

octave:4> 2 * A

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

octave:5> A * B

и чтобы сформировать матричное произведение transpose (A) * A, введите команду

octave:6> A' * A

1.2.4 Решение систем линейных уравнений

Системы линейных уравнений повсеместно встречаются в численном анализе. Чтобы решить систему линейных уравнений Ax = b, используйте оператор левого деления «\»:

x = A \ b

Это концептуально эквивалентно inv (A) * b, но позволяет избежать непосредственного вычисления обратной матрицы.

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

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

H2 + O2 --> H2O

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

x1*H2 + x2*O2 --> H2O
H: 2*x1 + 0*x2 --> 2
O: 0*x1 + 2*x2 --> 1

Решение в Octave находится всего в трех шагах.

octave:1> A = [ 2, 0; 0, 2 ];
octave:2> b = [ 2; 1 ];
octave:3> x = A \ b

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

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

dx
-- = f (x, t)
dt

с начальным условием

x(t = t0) = x0

Для того, чтобы Octave интегрировал уравнения этого вида, вам необходимо сначала определить функцию f(x,t). Это просто, и может быть выполнено путем непосредственного ввода тела функции в командной строке. Например, следующие команды определяют функцию правой части для интересной пары нелинейных дифференциальных уравнений. Обратите внимание, что при вводе функции Octave отвечает другой подсказкой, чтобы указать, что ожидает вашего завершения ввода.

octave:1> 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

С учетом начального условия

octave:2> x0 = [1; 2];

и набора выходных моментов времени в виде столбцового вектора (обратите внимание, что первое выходное время соответствует начальному условию, приведенному выше)

octave:3> t = linspace (0, 50, 200)';

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

octave:4> x = lsode ("f", x0, t);

Функция lsode использует решатель Ливермора для обыкновенных дифференциальных уравнений, описанный в работе А. К. Хиндмарша ODEPACK, систематизированный набор решателей ОДУ, в: Научные вычисления, Р. С. Степлеман и др. (ред.), Северная Голландия, Амстердам, 1983, страницы 55–64.

1.2.6 Генерация графического вывода

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

octave:1> plot (t, x)

Octave автоматически создаст отдельный окон для отображения графика.

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

print -dpdf foo.pdf

создаст файл foo.pdf, содержащий представление текущего графика в формате Portable Document Format. Команда

help print

подробно объясняет дополнительные параметры команды print и предоставляет список дополнительных форматов выходных файлов.

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

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

Чтобы получить хорошую справку, вам сначала необходимо знать имя команды, которую вы хотите использовать. Имя этой функции может быть не всегда очевидным, но хорошим началом будет ввод help --list. Это покажет вам все операторы, ключевые слова, встроенные функции и загружаемые функции, доступные в текущем сеансе Octave. Альтернативой является поиск в документации с помощью функции lookfor (описанная в Получение справки).

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

help plot

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

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

1.2.8 Редактирование введенного текста

В командной строке Octave вы можете вызвать, отредактировать и повторно выполнить предыдущие команды, используя команды редактирования в стиле Emacs или vi. По умолчанию используемые сочетания клавиш используют команды в стиле Emacs. Например, чтобы вызвать предыдущую команду, нажмите Control-p (сокращенно C-p). Это обычно возвращает предыдущую строку ввода. C-n вызовет следующую строку ввода, C-b переместит курсор назад по строке, C-f переместит курсор вперед по строке и т. д.

Полное описание возможностей редактирования командной строки приведено в этом руководстве, см. Редактирование командной строки.

© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v5.2.0/Simple-Examples.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API