Octave forge

Примечательные особенности

Завершение имени команды и переменной

Пишем символ табуляции в командной строке заставляет Octave пытаться полной переменной, функции и имена файлов ( по аналогии с Bash «s автодополнению ). Octave использует текст перед курсором как начальную часть имени для завершения.

История команд

При работе в интерактивном режиме Octave сохраняет набранные команды во внутреннем буфере, чтобы их можно было вызывать и редактировать.

Структуры данных

Octave включает ограниченный объем поддержки для организации данных в структурах. В этом примере мы видим структуру «x» с элементами «a», «b» и «c» (целое число, массив и строка соответственно):

octave1> x.a = 1; x.b = 1, 2; 3, 4]; x.c = "string";
octave2> x.a
ans =  1
octave3> x.b
ans =

   1   2
   3   4

octave4> x.c
ans = string
octave5> x
x =
{
  a =  1
  b =

     1   2
     3   4

  c = string
}

Булевы операторы короткого замыкания

Логические операторы Octave ‘ ‘ и ‘ ‘ оцениваются методом короткого замыкания (как соответствующие операторы в языке C ), в отличие от поэлементных операторов ‘ ‘ и ‘ ‘.

Операторы увеличения и уменьшения

Octave включает в себя операторы инкремента и декремента типа C ‘ ‘ и ‘ ‘ как в их префиксной, так и в постфиксной форме. Octave также выполняет расширенные присваивания , например ‘ ‘.

Расслабься-защити

unwind_protect
   body
unwind_protect_cleanup
   cleanup
end_unwind_protect

Как правило, GNU Octave распознает как завершение заданного « либо ключевого слова » (которое совместимо с языком MATLAB), либо более конкретного ключевого слова ». Как следствие, блок может быть завершен либо ключевым словом ‘ ‘, как в примере, либо более переносимым ключевым словом ‘ ‘.

Очистки часть блока всегда выполняется. В случае, если исключение вызвано частью тела , очистка выполняется непосредственно перед распространением исключения за пределы блока ‘ ‘.

GNU Octave также поддерживает другую форму обработки исключений (совместимую с языком MATLAB):

try
   body
catch
   exception_handling
end

Эта последняя форма отличается от блока двумя способами. Во-первых, exception_handling выполняется только тогда, когда исключение вызывается телом . Во-вторых, после выполнения exception_handling исключение не распространяется за пределы блока (если оператор ‘ ‘ явно не вставлен в код exception_handling ).

Списки аргументов переменной длины

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

functions =plus (varargin)
if (nargin==)
      s = ;
   else
      s = varargin{1} + plus (varargin{2nargin});
   end
end

Списки возврата переменной длины

Функцию можно настроить так, чтобы она возвращала любое количество значений, используя специальное возвращаемое значение . Например:

functionvarargout =multiassign (data)
for k=1nargout
      varargout{k} = data(:,k);
   end
end

Интеграция с C ++

Также возможно выполнить код Octave непосредственно в программе на C ++. Например, вот фрагмент кода для вызова :

#include <octave/oct.h>
...
ColumnVector NumRands(2);
NumRands() = 10;
NumRands(1) = 1;
octave_value_list f_arg, f_ret;
f_arg() = octave_value(NumRands);
f_ret = feval("rand", f_arg, 1);
Matrix unis(f_ret().matrix_value());

Код C и C ++ может быть интегрирован в GNU Octave путем создания файлов oct или с помощью файлов MEX, совместимых с MATLAB .

Shared libraries and debugging techniques

As all of this project deals with the correct treatment of shared libraries,
it follows a short review on how to work with them and debug their usage.

Environment variables

A method to ensure that shared libraries located in a certain folder are found,
is to export the system environment variable . In the
example below, the environment variable gets extended by the path .

Another very verbose method to figure out what shared libraries your
system is actually loading and at which paths your system is looking for them,
is exporting the system environment variable :

Useful tools

Some useful tools for checking the shared library dependencies of a program or
library or whether the «right» shared library was loaded at runtime by a
program are:

Assume your program binary is called and at runtime it has the process
ID (which can for example be found out with ) and a
shared library of interest is called , then the commands can be used as
follows:

To get a further insight into shared libraries, here are some more advanced
references on this topic:

Анализ поисковых запросов сайта

Приведённый выше отчёт по частотности использования поисковых запросов, может быть использован оптимизаторами сайта при составлении его семантического ядра и подготовке контента т.н. «посадочных страниц». Статистика поисковых запросов — обобщённая сгруппированная информация по «обращениям» пользователей к поисковой системе по ключевым запросам (фразам).
В большинстве случаев, наш сервис показывает уже сгруппированную информацию, содержащую не только подборку самых популярных слов (фраз), но и словосочетания + синонимы. Собранная в данном разделе статистика показывает по каким «ключевым словам» (поисковым запросам) пользователи переходят на сайт octave-online.net.

Поисковый запрос – это слово или словосочетание, которое пользователь вводит в форму поиска на сайте поисковой системы, с учётом автоподбора и автоматического исправления в поиске ошибочного набора.

Приложения с графическим интерфейсом

Кнопка, элемент управления, флажок

# create figure and panel on it
f = figure;
# create a button (default style)
b1 = uicontrol (f, "string", "A Button", "position",);
# create an edit control
e1 = uicontrol (f, "style", "edit", "string", "editable text", "position",);
# create a checkbox
c1 = uicontrol (f, "style", "checkbox", "string", "a checkbox", "position",);

Текстовое окно

prompt = {"Width", "Height", "Depth"};
defaults = {"1.10", "2.20", "3.30"};
rowscols = 1,10; 2,20; 3,30];
dims = inputdlg (prompt, "Enter Box Dimensions", rowscols, defaults);

Список с окнами сообщений.

my_options = {"An item", "another", "yet another"};
sel, ok = listdlg ("ListString", my_options, "SelectionMode", "Multiple");
if (ok == 1)
  msgbox ("You selected:");
  for i = 1numel (sel)
    msgbox (sprintf ("\t%s", my_options{sel(i)}));
  endfor
else
  msgbox ("You cancelled.");
endif

Радио-кнопки

# create figure and panel on it
f = figure;
# create a button group
gp = uibuttongroup (f, "Position",   0.5 1 1])
# create a buttons in the group
b1 = uicontrol (gp, "style", "radiobutton", "string", "Choice 1", "Position",  10 150 100 50 ]);
b2 = uicontrol (gp, "style", "radiobutton", "string", "Choice 2", "Position",  10 50 100 30 ]);
# create a button not in the group
b3 = uicontrol (f, "style", "radiobutton","string", "Not in the group","Position",  10 50 100 50 ]);

Скрипты[править]

В Octave есть очень полезная возможность сохранять комманды и запускать их заново позже. Вы, вероятно, захотите сохранить вашу работу или написать код, который можно заново использовать (самостоятельно или отдать кому-то еще). Такие файлы называются скриптами Octave. Их стоит сохранять с расширением и тогда Octave сможет самостоятельно распознать их. (Расширение используется потому что MATLAB называет свои скрипты «М-файлами», а Octave основывается на MATLAB).

Чтобы запустить созданные скрипты в Octave вы должны находиться в той же директории, что и файл со скриптом и ввести имя файла без расширения . Например, если у вас есть скрипт myscript.m в папке octave, следующие команды выполнят этот скрипт.

chdir('~/octave'); % This changes to the octave directory
myscript;

Обратите внимание, что команда ; необходима, если вы не находились внутри этой папки во время запуска Octave.

В следующих уроках вы узнаете несколько новых выражений, которые вы сможете использовать, чтобы сделать ваш Octave-код намного круче. Количество предоставляемых скриптов будет расти и вам следует сохранять их для дальнейшего использования. Хорошей идеей будет создать папку octave в вашей домашней папке и сохранять все ваши Octave файлы в неё.

Notes for cygwin[edit]

«make check»
passes almost all the tests. Only, and not substantial, failures are:
/pub/hg/octave/src/data.cc : 8 failures due to different handling of complex Inf on sort
/pub/hg/octave/src/syscalls.cc: 1 failure on fork. This disappears when octave is installed
/pub/hg/octave/scripts/sparse/svds.m: 1 failure due to test sensitivity on starting point. See 
https://mailman.cae.wisc.edu/pipermail/octave-maintainers/2011-September/024715.html

To build GNU Octave from cygwin source package, you need to install «cygport» and the relevant development libraries

tar -xf octave-5.1.0-1-src.tar.xz 
cygport octave.cygport almostall

Improvements

  • Avoid color changes in MS Windows GUI terminal
    (bug #57658).
  • Lock amd and symbfact to avoid segmentation fault with SuiteSparse
    (bug #57435).
  • Fix segfault when calculating patch vertex normals
    (bug #57353).
  • Fix segfault in constructing patch normals for lighting
    (bug #57353).
  • mat2str.m: Fix for logical matrix (add ).
  • improve file equality check for MS Windows
    (bug #55161).
  • ismember.m: Fix second return argument when values are complex
    (bug #52437).
  • findobj.m: Fix typo and correctly handle numeric properties
    (bug #57030).
  • Correctly display integer types with format hex
    (bug #56966).
  • Cast types to
    (bug #56703).
  • Fix numerous errors in /
    (bug #56889).
  • print.m: Pass quoted path to
    (bug #56768).
  • dir.m: Fix occasionally returning incorrect folder field
    (bug #55448).
  • Stop segfault when calling 3-input form of with cell arrays
    (bug #56711).
  • improve message for setting breakpoint in nonexistent function
    (bug #56157).
  • Use framebuffer object for printing invisible Qt figures on mac
    (bug #55268).
  • Escape backslash characters in output
    (bug #56448).
  • Use replacement characters to display non UTF-8 strings in figures
    (bug #55974).
  • inputrc: Add warning about modification
    (bug #56079).
  • documentation.cc (global_search): just return if query string is empty
    (bug #56388).
  • Default (c)transpose for old style class arrays
    (bug #56323).
  • Always reserve at least 1 element of storage for sparse matrices
    (bug #56232).
  • Don’t segfault at exit after reading malformed HDF5 file
    (bug #56149).
  • Fix pause() with no arguments called on Windows
    (bug #55943).
  • refactor minimum eigenvalue index search in
    (bug #56037).
  • qp: fix obscure corner case when calculating caused by a typo
    (bug #56037).
  • use instead of
    (patch #9782).
  • fix and with glibc 2.28 end-of-file state behavior
    (bug #55029).
  • Fix return of left-handed vectors when inputs are complex
    (bug #56026).
  • waitbar.m: Fix hang when using property
    (bug #55963).
  • shading.m: Fix unexpected error when multiple present
    (bug #55993).
  • dec2base.m: Correctly handle zero matrix input
    (bug #56005).
  • eliminate duplicate graphics callback object stack
    (bug #55908).
  • Improve performance when closing figures
    (bug #55908).
  • Reduce time to process by 30X
    (bug #39479).
  • Feed with PDF files converted from svg
    (bug #55906).
  • Improve error checking for .
  • poly.m: fix the fix for input of complex conjugate pairs
    (bug #53897).
  • mkoctfile: use the environment variable if set
    (bug #55814).
  • line.m: Fix creation of unwanted axes
    (bug #55840).
  • Accept 4-input form for quiver3
    (bug #55570).
  • pkg.m: restore installing packages from zip archives
    (bug #55788).
  • axis.m: Fix issues with argument
    (bug #55619,
    bug #55614,
    bug #55574,
    bug #55514,
    bug #54848,
    bug #53724,
    bug #53504,
    bug #53336,
    bug #51938,
    bug #50356).
  • ordeig.m: Do not fail on 1×1 matrices
    (bug #55779).

Некоторые возможности

Интерфейс

Интерфейс командной строки Octave построен с использованием библиотеки GNU Readline, что дает доступ к таким обычным возможностям последней, как автодополнение по клавише Tab ↹, история команд и инкрементальный поиск по ней (Ctrl+R, Ctrl+S), возможность переопределения клавиш, и т. д. Графический интерфейс до версии 3.8.0 был представлен дополнениями (графики он мог выводить и без них).

Octave Forge

Octave Forge — менеджер пакетов-расширений для системы Octave.

Интеграция с C++

Выражения Octave можно вычислять из программ на C++. К примеру, фрагмент кода для вычисления :

#include <octave/oct.h>
…
ColumnVector NumRands(2);
NumRands() = 9000;
NumRands(1) = 1;
octave_value_list f_arg, f_ret;
f_arg() = octave_value(NumRands);
f_ret = feval("rand",f_arg,1);
Matrix unis(f_ret().matrix_value());
Производительность

Если в конце 1990-х гг. (2-я серия выпусков) отмечалось, что производительность Octave существенно уступает производительности MATLAB, то к концу 2000-х гг. (3-я серия выпусков) производительности этих пакетов «почти сравнялись», а остающуюся разницу приписывают наличию в составе MATLAB интерпретатора-компилятора (Just in Time — JIT), которого нет в Octave.

Параллельные вычисления

Основными решениями по организации распределенных вычислений в среде 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 и имеет много общих функций с MATLAB:

  1. Матрицы как фундаментальный тип данных.
  2. Встроенная поддержка комплексных чисел.
  3. Мощные встроенные математические функции и обширные библиотеки функций.
  4. Расширяемость в виде пользовательских функций.

Octave рассматривает несовместимость с MATLAB как ошибку ; следовательно, его можно рассматривать как клон программного обеспечения , который не нарушает авторских прав на программное обеспечение согласно судебному делу Lotus против Borland .

Сценарии MATLAB из репозитория MathWorks FileExchange в принципе совместимы с Octave. Однако, в то время как они часто обеспечиваются и загружены пользователями под Octave совместимой и надлежащей открытым исходный код лицензии BSD , в fileexchange в Условии использования запретить любое использование ряда MathWorks’ патентованного MATLAB.

Совместимость синтаксиса

  1. Строки комментариев могут иметь префикс как символа #, так и символа%;
  2. Поддерживаются различные операторы на основе C ++ , — , + = , * =, / =;
  3. На элементы можно ссылаться без создания новой переменной путем каскадного индексирования, например (3);
  4. Строки могут быть определены как с помощью символа двойной кавычки, так и с помощью символа одиночной кавычки;
  5. Когда тип переменной — single (число с плавающей запятой одинарной точности), Octave вычисляет « среднее значение » в однодоменном (MATLAB в двойном домене ), что быстрее, но дает менее точные результаты;
  6. Блоки также могут оканчиваться более конкретными ключевыми словами структуры управления , например endif, endfor, end while и т. Д .;
  7. Функции могут быть определены в сценариях и в приглашении Octave;
  8. Наличие цикла do-while (аналогично do-while в C).

Совместимость функций

Когда вызывается нереализованная функция, отображается следующее сообщение об ошибке:

  octave1> guide
  warning the 'guide' function is not yet implemented in Octave

  Please read <http//www.octave.orgmissing.html> to learn how you can contribute missing functionality.
  error 'guide' undefined near line 1 column 1

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

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

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

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

Попробуем для начала проверить тождество Эйлера.

Вводим в командное окно следующее выражение:

>> exp(i*pi)

Ответ должен быть равен -1, я у себя получил следующее:

ans = -1.0000e+00 + 1.2246e-16i

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

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

>> A = 

И получим ответ:

A =
    1    1    2
    3    5    8
   13   21   34

Если ввести команду, поставив в конце точку с запятой, то Octave не будет выводить матрицу на экран, например, создадим матрицу на 3 строки и 2 столбца со случайными числами:

>> B = rand (3, 2);

Теперь для того, чтобы получить вывод данной матрицы на экран, достаточно ввести в командное окно имя переменной, в которой она сохранена:

>> B

Арифметика матриц

Умножение матрицы на скаляр:

>> 2 * A

Перемножение двух матриц:

>> A * B

Умножение транспонированной матрицы на саму себя:

>> A' * A

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

Разберем на примере следующего уравнения

Распишем матрицы коэффициентов и свободных членов для этой системы уравнений

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

>> A = ;
>> B = ;
>> A\B
ans =
   1.0000
   2.0000
   3.0000

Решение нелинейных дифференциальных уравнений

Octave может проинтегрировать уравнения следующего вида

Пробуем ввести функцию в Octave, сделать это несложно, гораздо сложнее понять, что ты только что сделал) Я уже давно забыл всю теорию вышмата, так что просто повторил пример и это работает, позже уже буду разбираться как.

>> 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 = ;
>> t = linspace (0, 50, 200)';
>> x = lsode ("f", x0, t);

Последняя команда производит интегрирование и если ее выполнить без ; в конце, то можно будет увидеть много цифр рассчитанной функциональной зависимости.

Графический вывод

Чтобы получить график, полученного в прошлом примере решения достаточно ввести команду:

>> plot (t, x)

Octave тут же создаст новое окно с вот таким вот красивым графиком, который к тому же можно сохранить скажем в pdf формат командой:

>> print -dpdf ~/foo.pdf

Пока на этом все, буду стараться использовать Octave в разработке и если у меня будет получаться, то я непременно напишу об этом в блоге. А пока подписывайтесь куда-нибудь (ВК, Твиттер), что-нибудь жмите, что-нибудь пишите (Телеграм). Всем пока!

More details

To illustrate the limitation this project addresses, consider the following
Octave code, to determine the integer size of the BLAS library used by Octave:

If the BLAS library uses 32-bit integers, an error will be thrown:

Otherwise, if the BLAS library uses 64-bit integers, the result is:

Note that the test case above usually requires twice the memory, if and
are not assigned by . Note further, that the data type «single»
has a precision of about 23 binary bits. In this particular example no
rounding errors occur.

In particular, a Makefile is provided containing all necessary information to
compile

  • ARPACK-NG (3.7.0), and

using 64-bit indices. To get a quick overview about the library dependencies,
the following figure visualizes them top-down: «The above requires all
libraries below».

Using this Makefile is especially of interest, if one pursues the following
goals:

  1. No root privileges required.
  2. No collision with system libraries.

Both aforementioned goals are archived by building and deploying the required
libraries in arbitrary directories. The following directories can be set when
calling the Makefile:

  • (default: current directory )
  • (default: )
    The build directory for each library.
  • (default: )
    The library installation directory or .
    If the installation directory is a system directory, the flag
    ensures that the installation operations are performed
    with elevated privileges.
  • (default: )
    The location for downloaded library sources.

Two typical examples:

The internal directory structure relative to is:

All required libraries are built according to this pattern:

  1. Download the source code archive to
  2. Extract the source code archive to
  3. Configure and build the library ensuring 64-bit indices
  4. Deploy the library in

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

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

Для получения справочной информации, вы должны знать имя команды, о которой требуется получить справку. Имя функции может быть не всегда очевидным, хороший способ — набрать для начала команду «help». Она покажет все операторы, зарезервированные слова, функции, встроенные переменные и функции файлов. Другой способ — выполнить поиск с помощью функции «lookfor». Эта функция описывается в разделе «Получение помощи».

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

help plot

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

Для вывода на экран информации, которая не может полностью на нём поместиться, Octave использует пейджеры на подобие less и more. Нажатие «Enter» выводит следующую строку, «Пробел» — следующую страницу. Клавиша «q» закрывает пейджер.

Соглашенияправить

Этот раздел объясняет типографические соглашения, используемые в этом руководстве. Возможно вы захотите пропустить этот раздел и вернуться к нему позже.

Ввод команд[править]

Последняя строка снизу является приглашением командной строки Octave и, так же как и командная строка в Linux, это место где вы вводите команды Octave. Чтобы выполнить простейшие арифметические операции, используйте + (сложение), — (вычитание), * (умножение), / (деление) и ^ (возведение в степень).

Также доступно много математических функций, имеющих предсказуемые имена (во многом схожие с аналогичными в других языках программирования).

Например:

  • Тригонометрические функции: , ,
  • Обратные тригонометрические функции: , ,
  • Натуральный и десятичный логарифмы: ,
  • Экспонента:
  • Модуль числа:

Также определены различные константы: pi, e, мнимая единица (i или j), inf (бесконечность), NaN (Неопределенность. Результат неопределенных операций, например inf/inf).

Вот несколько примеров операций и соответствующих им команд Octave.

         2+3{\displaystyle 2+3}         
octave:1> 2 + 3
ans = 5
   log10⁡100log10⁡10{\displaystyle {\frac {\log _{10}100}{\log _{10}10}}}   
octave:2> log10(100)/log10(10)
ans = 2
         ⌊1+tan⁡1.21.2⌋{\displaystyle \left\lfloor {\frac {1+\tan 1.2}{1.2}}\right\rfloor }         
octave:3> floor((1+tan(1.2)) / 1.2)
ans = 2
32+42{\displaystyle {\sqrt {3^{2}+4^{2}}}}
octave:4> sqrt(3^2 + 4^2)
ans = 5
ei⋅π{\displaystyle e^{i\cdot \pi }}
octave:5> e^(i*pi)
ans = -1.0000e+00 + 1.2246e-16i
octave:6> # Comment: From Euler's famous formula
octave:6> # extremely close to the correct value of -1

Несколько вещей, на которые стоит обратить внимание:

  • В Octave требуются круглые скобки вокруг аргументов у функции (так, например log(10) — нормально, а вот (log 10) неверно).
  • Любые пробелы до или после арифметических операций не являются обязательными, но допускаются
  • Не все функции в Octave имеют очевидные имена (например, sqrt — извлечение корня). Не паникуйте. Вы узнаете о них по ходу обучения.
Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий