Spec-Zone.ru › Octave 6

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, систематизированный набор решателей ОДУ», в: Научное вычисление, Р. С. Степлеман и др. (ред.), North-Holland, Амстердам, 1983, страницы 55–64.

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

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

octave:1> plot (t, x)

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

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

print 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/v6.4.0/Simple-Examples.html

Spec-Zone.ru

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