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 использует решатель Ливермора для обыкновенных дифференциальных уравнений, описанный в A. C. Hindmarsh, «ODEPACK, a Systematized Collection of ODE Solvers», в: Scientific Computing, R. S. Stepleman et al. (Eds.), North-Holland, Amsterdam, 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/v7.2.0/Simple-Examples.html