Uploaded by Ilhambek Ajimov

GNU Octave

advertisement
GNU Octave — свободная программная система для математических вычислений[2],
использующая совместимый с MATLAB язык высокого уровня[3].
Octave представляет интерактивный командный интерфейс для решения линейных и
нелинейных математических задач, а также проведения других численных экспериментов.
Кроме того, Octave можно использовать для пакетной обработки. Язык Octave оперирует
арифметикой вещественных и комплексных скаляров, векторов и матриц, имеет расширения
для решения линейных алгебраических задач, нахождения корней систем нелинейных
алгебраических уравнений, работы с полиномами, решения различных дифференциальных
уравнений, интегрирования систем дифференциальных и дифференциально-алгебраических
уравнений первого порядка, интегрирования функций на конечных и бесконечных интервалах.
Этот список можно легко расширить, используя язык Octave (или используя динамически
загружаемые модули, созданные на языках C, C++, Фортран и др.).
Технические детали





Octave написан на C++ с использованием стандартной библиотеки шаблонов;
Для запуска скриптов Octave использует интерпретатор;
Octave можно дополнять динамически подгружаемыми модулями;
Для создания и распечатки графиков Octave использует на выбор gnuplot, встроенный
модуль на основе FLTK, или Grace.
Название дано в честь американского химика-технолога Октейва Левенспиля (Octave
Levenspiel).
Язык Octave
Octave — интерпретируемый язык программирования. Он похож на Си и поддерживает
большинство основных функций стандартной библиотеки Си, а также основные команды и
системные вызовы Unix. С другой стороны, он не поддерживает передачу аргументов по
ссылке (особенность дизайна).
Синтаксис языка очень похож на MATLAB, и грамотно написанные скрипты будут запускаться
как в Octave, так и в MATLAB.
Некоторые возможности\
Интерфейс
Интерфейс командной строки Octave построен с использованием библиотеки GNU Readline,
что даёт доступ к таким обычным возможностям последней, как автодополнение по
клавише Tab ↹ , история команд и инкрементальный поиск по ней ( Ctrl + R , Ctrl + S ),
возможность переопределения клавиш, и т. д. Графический интерфейс до версии 3.8.0 был
представлен дополнениями (графики он мог выводить и без них).
Octave Forge
Octave Forge[4] - менеджер пакетов-расширений для системы Octave.
Интеграция с C++
Выражения Octave можно вычислять из программ на C++. Для этого в C++ подключается
специальная библиотека octave/oct.h. К примеру, фрагмент кода для
вычисления rand([9000,1]) :
#include <octave/oct.h>
…
ColumnVector NumRands(2);
NumRands(0) = 9000;
NumRands(1) = 1;
octave_value_list f_arg, f_ret;
f_arg(0) = octave_value(NumRands);
f_ret = feval("rand",f_arg,1);
Matrix unis(f_ret(0).matrix_value());
Производительность
В конце 1990-х годов (2-я серия выпусков) производительность Octave существенно уступает
по производительности MATLAB.[5] Однако к концу 2000-х годов (3-я серия выпусков)
производительности этих пакетов «почти сравнялись», а остающуюся разницу приписывают
наличию в составе MATLAB интерпретатора-компилятора (Just in Time — JIT), которого нет
в Octave.[6]
Параллельные вычисления
Основными решениями по организации распределенных вычислений в
среде Octave являются библиотеки bcMPI, MPI Toolbox for Octave (MPITB), octave-parallel_mpi
и parallel (ранее octave-parallel), предназначенные для кластерных систем, и модуль parcellfun
библиотеки general для обеспечения параллельных вычислений в масштабе «одной машины»
(на многоядерных и массивно-параллельных системах).
Первые три библиотеки обеспечивают интерфейс к наличной инсталляции библиотеки MPI и,
насколько возможно, транслируют в Octave (bcMPI — и в MATLAB) синтаксис подмножества
вызовов MPI. Соответственно в этих случаях вычисления распределены лишь настолько,
насколько это подготовлено программистом, и обеспечиваются в пределах возможностей
системной инсталляции MPI.
Библиотека parallel, напротив, не требует наличия среды типа MPI или PVM, а обеспечивает
распределённость с помощью внутренних средств пакета Octave.
Совместимость с MATLAB
Octave был написан с учётом совместимости с MATLAB и реализует многие его возможности:




матрицы в качестве основных типов данных;
встроенная поддержка комплексных чисел;
мощные встроенные математические функции и большие библиотеки функций;
расширяемость, благодаря возможности создания пользовательских функций.
Но есть и некоторые отличия:

комментарии могут начинаться как с символа #, так и с символа % ;

поддерживаются C++-подобные операторы ++ , -- , += , *= , /= ;

элементы могут быть адресованы без создания новой переменной, например [1:10](3) ;
данные строкового типа могут быть заданы как символом «"», так и символом «'».

Haqqında:
GNU Octave - это язык высокого уровня, в первую очередь предназначенный для
числовых вычислений. Он предоставляет удобный интерфейс командной строки
для численного решения линейных и нелинейных задач, а также для выполнения
других численных экспериментов с использованием языка, который в основном
совместим с Matlab. Его также можно использовать как язык, ориентированный на
пакетную обработку.
Octave имеет обширные инструменты для решения общих задач численной
линейной алгебры, нахождения корней нелинейных уравнений, интегрирования
обычных функций, манипулирования полиномами и интегрирования
обыкновенных дифференциальных и дифференциально-алгебраических
уравнений. Его легко расширять и настраивать с помощью пользовательских
функций, написанных на собственном языке Octave, или с использованием
динамически загружаемых модулей, написанных на C ++, C, Fortran или других
языках.
GNU Octave также является свободно распространяемым программным
обеспечением. Вы можете распространять и / или изменять его в соответствии с
условиями Стандартной общественной лицензии GNU
(GPL), опубликованной Free Software Foundation .
Octave был написан Джоном У. Итоном и многими другими . Поскольку Octave
является бесплатным программным обеспечением, вам предлагается сделать
Octave более полезным, написав и добавив для него дополнительные функции, а
также сообщая о любых проблемах, которые могут у вас возникнуть.
История
Octave изначально задумывался (примерно в 1988 г.) как сопутствующее
программное обеспечение для учебника по проектированию химических
реакторов для студентов, написанного Джеймсом Б. Ролингсом из Университета
Висконсин-Мэдисон и Джоном Г. Экердтом из Университета
Техаса. Первоначально мы предполагали несколько очень специализированных
инструментов для решения проблем проектирования химических
реакторов. Позже, увидев ограничения этого подхода, мы решили попытаться
создать гораздо более гибкий инструмент.
Были еще некоторые люди, которые говорили, что мы должны просто
использовать Fortran вместо этого, потому что это компьютерный язык инженерии,
но каждый раз, когда мы пробовали это, студенты тратили слишком много
времени, пытаясь выяснить, почему их код Fortran не работает и не хватает
времени на изучение химической инженерии. Мы считали, что с такой
интерактивной средой, как Octave, большинство студентов смогут быстро освоить
основы и начать уверенно использовать ее всего за несколько часов.
Полная разработка началась весной 1992 года. Первый альфа-выпуск был
выпущен 4 января 1993 года, а версия 1.0 была выпущена 17 февраля 1994 года.
С тех пор Octave претерпела несколько основных изменений, включенных
в Debian GNU / Linux , openSUSE и многие другие дистрибутивы GNU /
Linux. Обзор Octave был опубликован в июльском выпуске журнала Linux Journal
за 1997 год .
Ясно, что Octave теперь намного больше, чем просто еще один пакет учебных
программ с ограниченной полезностью за пределами учебной аудитории. Хотя
наши первоначальные цели были несколько расплывчатыми, мы знали, что хотим
создать что-то, что позволило бы студентам решать реалистичные задачи, и что
они могли бы использовать для многих других целей, помимо задач
проектирования химических реакторов. Сегодня тысячи людей во всем мире
используют Octave в обучении, исследованиях и коммерческих приложениях.
Почти все думают, что имя Октав имеет какое-то отношение к музыке, но на
самом деле это имя одного из бывших профессоров автора Октава Левеншпиля ,
написавшего знаменитый учебник по инженерии химических реакций, и который
также был хорошо известен своей способностью делать быстрые вычисления «на
обратной стороне конверта». Мы надеемся, что это программное обеспечение
позволит многим людям так же легко выполнять более амбициозные вычисления.
Всем предлагается поделиться этим программным обеспечением с другими в
соответствии с условиями Стандартной общественной лицензии GNU (GPL) . Вам
также предлагается сделать Octave более полезным, написав и добавив для него
дополнительные функции, а также сообщая о любых проблемах, которые могут у
вас возникнуть.
Оформление графиков
Заголовок
title('Название графика')
Легенда
Легенда графиков (естесственно, если их больше одногоо) создается с помощью функции legend,
которая имеет две формы вызова.
Форма 1.
legend (<название графика 1>, <название графика 2>, ..., pos)
где pos -- число, указывающее на место расположение перечня названий графиков:
+--------------------------+
|2
0 или 1|
|
|
|3
4|
+--------------------------+ -1
Форма 2.
legend ('func')
где func -- указывает на стиль отображения легенды:
show
- показать легенду
hide или
off
- скрыть легенду
boxon
- перечень названий графиков в рамке
boxoff
- перечень названий графиков без рамки
left
- выравнивание текста по левому краю
right
- выравнивание текста по правому краю
Как правило, обе формы функции legend вызываются последовательно.
Формат осей
Функция форматирования осей также вызывается в двух вариантах:
Форма 1.
axis(<вектор>,"<масштабный фактор>")
<Вектор> отвечает за размеры видимой области графика. Он должен состоять из 2, 4 или 6 элементов:
Vx = [ Xmin, Xmax ]
Vxy = [ Xmin, Xmax, Ymin, Ymax ]
Vxyz = [ Xmin, Xmax, Ymin, Ymax, Zmin, Zmax ]
<Масштабный фактор>, понятно, уригулирует вопросы соотношения делений осей:
"square" Force a square aspect ratio. "equal" Force xdistance to equalydistance. "normal" Restore the balance. "auto" Set the specified axes to have
nice limits a round the data or all if no axes are specified. "manual" Fix
the current axes limits. "tight" Fix a
xestothelimitsofthedata(notimplemented). Theoption "image" isequivalentto
"tight" and "equal".
Форма 2.
axis("label[ось]","tic[ось]")
где "label[ось]" -- печать подписей к отдельно взятым осям (в случае их отсутствия -- "nolabel"); "tic[ось]" - рисовать метки на соответствующих осях (допускается "on" и "off").
Подписи к осям
xlabel('Подпись по оси X');
ylabel('Подпись по оси Y');
zlabel('Подпись по оси Z');
Метки в произвольной точке графика
h = text (x, y, "Текст") # для 2D графиков
h = text (x, y, z, "Текст") # для 3D графиков
Присваивание переменной h можно не выполнять.
Сетка
grid('on') # включение отображения сетки
grid('off') # выключение отображения сетки
Пример 1.
x = -3:0.5:5;
y1 = sin(x);
y2 = x.^2;
plot (x,y1,x,y2);
title('Название графика')
legend('boxoff');
legend('Функция y=sin(x)', "Функция y=x^2",2);
xlabel('X');
ylabel('Y');
grid('on');
text (1, 3, "Центр тяжести")
axis([-5, 10, -2, 2],"equal");
2D графики
Подготовка исходных данных
Для загрузки данных из файла можно использовать команду: load "textfile.txt"
Данные будут загружены в переменную "textfile". Для доступа к значениям которой можно использовать
выражение: textfile(1). Необходимо помнить, что нумерация в массивах Octave'a начинается с единицы,
а не с нуля.
Для сохранения переменных в файл можно использовать команду: save "textfile.txt" var1
Для того, чтобы загружать из файла массивы, можно в начале сохранить массив, чтобы посмотреть в
каком формате он сохраняет.
Download