Gnu octave методичка

Цель этого урока — кратко рассказать об основах Octave, а также показать вам, что многое из описанного вы уже знаете. Если вы что-то забудете или вам понадобится подробная информация о какой-либо функции или команде, просто наберите:

help command

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

Заметка:

Если у вас возникли проблемы с запуском Octave, сайты NCLab и Verbosus позволяют вам работать с Octave в облаке. Обе системы бесплатны для использования.

Запуск Octave[править]

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

GNU Octave, version 3.6.4
Copyright (C) 2013 John W. Eaton and others.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTIBILITY or
FITNESS FOR A PARTICULAR PURPOSE.  For details, type `warranty'.

Additional information about Octave is available at http://www.octave.org.

Please contribute if you find this software useful.
For more information, visit http://www.octave.org/get-involved.html

Report bugs to <bug@octave.org> (but first, please read
http://www.octave.org/bugs.html to learn how to write a helpful report).

octave:1>

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

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

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

Например:

  • Тригонометрические функции: sin, cos, tan
  • Обратные тригонометрические функции: asin, acos, atan
  • Натуральный и десятичный логарифмы: log, log10
  • Экспонента: exp
  • Модуль числа: abs

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

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

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

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

Построение графиков[править]

Сейчас вы научитесь строить следующие графики с помощью Octave.

Форма 1 (Figure 1) содержащая в себе плоскость была сгенерирована с помощью команд, написанных ниже. Пока что это простой пример, предназначенный проиллюстрировать базовые возможности построения графиков. Мы рассмотрим более сложные примеры позже.

x = linspace(0, 2*pi, 100);
y = sin(x);
plot(x, y);
figure;

Команда, создающая график — это, конечно же, plot(x,y). Да вызова это команды, мы должны задать две переменных — x и y. Функция plot просто принимает в качестве аргументов два вектора одинаковой длины, интерпретирует значения из первого как значения координаты X, а второго, как значение координаты Y и рисует линию соединяя эти координаты.

Первая команда, x = linspace(0, 2*pi, 100), использует функцию linspace, чтобы создать вектор равномерных интервалов (иногда также называемый вектором «линейно распределенных значений»). Первое значение в векторе равно нулю, а последнее . Всего вектор содержит 100 значений. Этот вектор присваивается переменной с именем x.

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

(Немножко отходя от темы, стоит отметить, что имя переменной может состоять из любой последовательности букв, цифр и подчеркиваний, но не может начинаться с цифры. Нет никаких ограничений на длину имени переменной. Имя чувствительно к регистру, так a и A — это разные переменные).

Задание[править]

{displaystyle y=lfloor xrfloor } for {displaystyle xin [0,15]} (рисунок 2)

Немного о командах[править]

Следующие команды и функции очень полезны для задания переменных при построении 2D графиков.

  • linspace — создает вектор равномерно (линейно) распределенных значений

Использование: linspace(start, end, length).
Параметр length является опциональным и определяет число элементов в возвращаемом векторе. Если вы опустите этот параметр, то вектор будет содержать 100 значений, первое из которых будет равно start, а последнее stop.

  • plot — строит двумерный график

Использование: plot(x, y)
x и y — векторые одинаковой длины

  • figure — создает новую форму для графика

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

  • hold on / hold off — команда, определяющая хотите ли вы строить последующие графики на тех же осях (hold on) или хотите заменить предыдущий построенный график (hold off).

Пример[править]

Сейчас мы построим графики, изображенные на рисунках 3 и 4.
На рисунке 3 изображены три тригонометрические функции

  • {displaystyle cos 2x},
  • {displaystyle sin 4x}, and
  • {displaystyle 2sin x}

на одном множестве осей. На рисунке 4 показан график суммы этих функций.
Первым делом, используем функцию linspace, чтобы создать вектор X-значений

octave:1> x = linspace(0, 2*pi);

Затем посчитаем Y-значения для всех трёх функций

octave:2> a = cos(2*x);
octave:3> b = sin(4*x);
octave:4> c = 2*sin(x);

Следующие команды построят график всех трёх функций

octave:5> figure;
octave:6> plot(x, a);
octave:7> hold on;
octave:8> plot(x, b);
octave:9> plot(x, c);

На строке 5 (figure) мы сообщаем Octave, что хотим построить новый график в новом окне. Считается хорошей практикой вызывать figure перед построением нового графика. Такой подход помогает избежать случайно замены предыдущего важного графика.

Обратите внимание, что на строке 7, используется команда hold on, чтобы сообщить Octave, что мы не хотим замещать предыдущий график (со строки 6) последующими. Octave, после использования hold on, будет строить все последующие графики на той же плоскости, пока не будет вызвана команда hold off.

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

octave:10> plot(x, a, x, b, x, c);

Ну, и наконец-то, построим второй график (рисунок 4):

octave:11> figure;
octave:12> hold off;
octave:13> plot(x, a+b+c);

Строка 11 создает новое окно, а строка 12 сообщает Octave, что все последующие построения графиков будут просто замещать предыдущие. На строке 13 мы строим график суммы всех функций.

Небольшая заметка для пользователей Mac:

Если команды для построения графиков не работают, выполните следующую команду:

setenv ("GNUTERM", "x11")

Упражнения[править]

  • Постройте график функции abs(x) для {displaystyle xin [-5,5]}.
  • Постройте круг единичного радиуcа с центром в начале координат (это не так легко)
  • Постройте графики функций, которые вам нравятся 🙂

Предупреждение[править]

Если вы попытаетесь (или уже попытались) построить что-нибудь вроде x^{2} или {displaystyle sin xtimes cos x} у вас возникнут некоторые проблемы. Скорее всего вы получите следующие сообщения:

В случае x^2:

error: for A^b, A must be square

В случае sin(x) * cos(x):

error: operator *: nonconformant arguments (op1 is 1x100, op2 is 1x100)

Эти две ошибки будут появляться, когда бы вы ни пытались умножить или разделить две векторные переменные (вспомните, ведь x и y — это векторы). На данный момент, чтобы исправить это вы можете сделать одну из двух вещей:

  • Использоваеть plot(sin(x).*cos(x)). Обратие внимание на точку между sin(x) и *. Для используйте plot(x.*x) или plot(x.^2)
  • Прочитайте раздел о векторах и матрицах.

Неочевидные проблемы[править]

Так как Octave — это математический пакет для численных (а не символических) вычислений, он тоже делает численные ошибки и не выполняет некоторые операции хорошо. Чтобы убедиться в этом, давайте построим график x для интервала [-π π]. Что же не так на получившемся рисунке? Он плохо смасштабирован из-за точек разрыва, которые тяжело обрабатывать численно.

Ваша задача заключается в том, чтобы сгенерировать (намного лучше выглядящий) график на рисунке ниже, используя всё то, что вы выучили до этого момента и функцию axis.

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

Возможно, придется немного подумать, как нарисовать правильные асимптотические линии {displaystyle x=pm pi /2}

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

octave:1> x_part_left  = linspace(-pi,  -pi/2-0.001, 100);
octave:2> x_part_mid   = linspace(-pi/2, pi/2, 100);
octave:3> x_part_right = linspace( pi/2+0.001, pi,   100);
octave:4> plot(x_part_left, tan(x_part_left));
octave:5> hold on;
octave:6> plot(x_part_mid, tan(x_part_mid));
octave:7> plot(x_part_right, tan(x_part_right));
octave:8> y_limit = 4;
octave:9> axis([-pi, pi, -y_limit, y_limit]);
octave:10> plot(linspace(-pi/2, -pi/2, 100), linspace(-y_limit, y_limit, 100), '.');
octave:11> plot(linspace( pi/2,  pi/2, 100), linspace(-y_limit, y_limit, 100), '.');
octave:12> hold off;

Горизонтальный диапазон [-π π] разбит на три части так, чтобы точки пропустить точки разрыва. В строках 4-7 строятся разные части функции тангенса. После этого, в строке 8, мы задаем ограничение оси Y, чтобы установить диапазон значений по вертикали (используя функцию axis в строке 9). В конце мы добавляем две пунктирные линии на позициях {displaystyle x=pm pi /2}

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

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

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

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

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

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


Вернуться в список уроков

Время на прочтение
6 мин

Количество просмотров 40K

Как я и обещал, перехожу от обзора программ замены калькулятора к более серьезным инструментам. Если помните схему из предыдущего поста, то во второй категории находились табличные: OpenOffice / LibreOffice сотоварищи. Эту партию мы можем смело пропустить, так как к командной строке она не относится, к тому же, среди читателей Хабра трудно найти человека, который бы в них не разбирался. Поэтому перехожу сразу к третьей категории.

Специализированные математические программы, уровень студент+

  1. GNU Octave.
  2. Scilab.
  3. Maxima.
  4. R.
  5. Sage.

На первом месте в этом списке находится Octave, и это не случайность. Исследователи из Университета Мэриленда в США провели сравнительный анализ математических вычислений, используя MATLAB, Octave, SciLab и FreeMat в простом сценарии и в сложном. В первом случае решали систему линейных уравнений а в втором — конечно-разностную дискретизацию уравнения Пуассона в двухмерном пространстве. Основной вывод — GNU Octave справляется с задачами лучше остальных открытых математических пакетов, демонстрируя результат (страницы 23 и 25) сопоставимый с матлабовским.

Но сначала немного исторического контекста, чтобы понять, как закалялись математические программы с открытыми исходниками.

Догнать и перегнать MATLAB

Так сложилось, что коммерческие программы прибежали и первыми застолбили поляну математических вычислений. Уже с конца 1970-х гг. создатель языка программирования Клив Моулер распространяет MATLAB в университетах США, а в 1984-м вместе с двумя компаньонами переписывают его с Фортрана на Си и создают компанию The MathWorks. Примечательно, что ранние версии распространялись с открытым исходным кодом.

Это было-было, а MATLAB, каким мы его знаем сегодня — это ЯП высокого уровня с поддержкой 2D / 3D графики, разнообразными математическими функциями, интерактивной средой программирования, численных расчетов и решения задач. Внешние интерфейсы позволяют ему интегрироваться со сторонними приложениями и языками программирования. Более 1 000 000 инженеров и ученых по всему миру используют MATLAB и платят за это солидную денежку.

С большим опозданием в игру включаются программы с открытыми исходниками. Только в 1990-х появляются математические пакеты GNU Octave, Scilab и вступают в конкуренцию с лидером вычислительного программирования.

Задуманный изначально как программное пособие для проектирования химического реактора и названный в честь профессора химии Октава Левеншпиля, преподававшего автору математического пакета, Octave призван был заменить студентам Техасского Университета сложный в отладке Fortran. Версия 1.0 вышла в свет 17 февраля 1994 г. Проект стабильно развивается, и в июле нынешнего года зарелизился Octave 4.0.3. Ждем ебилдов.

Основной миссией Octave была, и в обозримом будущем скорее всего так и останется, быть годной заменой MATLAB так же, как OpenOffice/LibreOffice замещает MS Office для тех, кто умеет считать копейку. Собственно, для этого Octave имеет совместимый с MATLAB синтаксис и набор функций. Более того, несовместимость с MATLAB считается багом, однако софтверная Фемида уже имеет подобный прецедент, и это не считается нарушением копирайта. В этой связи, можно считать Octave программным клоном. Правда о полной совместимости пока говорить не приходится, но работа в этом направлении не прекращается.

Octave написан на C++, используя стандартную библиотеку шаблонов, имеет интерактивный командный интерфейс, поддерживает расширения — динамически загружаемые модули на родном языке или на C, C++, Fortran и др. Так же как и MATLAB, в алгебраических вычислениях Octave использует библиотеки Basic Linear Algebra Subroutines (BLAS) и Linear Algebra Package (LAPACK).

Установка

Установка Octave в Linux ничем не отличается от установки других программ. На Gentoo Linux запускаем:

$ sudo emerge -av octave

Дебианщики делают то же самое с помощью apt.

$ sudo aptitude install octave

Для SUSE и Arch тоже все очень просто, а вот пользователям Красной Шапки и CentOS придется чуток повозиться. Попытка установить Octave легким движением кисти завершается ошибкой, пакет в репозитариях не найден.

[root@server ~]# yum install octave
Загружены модули: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
HighAvailability                                               | 4.1 kB  00:00:00
ResilientStorage                                               | 4.1 kB  00:00:00
server                                                         | 4.1 kB  00:00:00
vmware-tools                                                   |  951 B  00:00:00
Пакета с названием octave не найдено.
Ошибка: Выполнять нечего

Благо, есть обходной путь. Нужно сперва установить пакет epel-release.

[root@server ~]# wget https://dl.fedoraproject.org/pub/epel/7/x86_64/
[root@server ~]# yum localinstall epel-release-6-7.noarch.rpm

И только после этого yum install octave сработает.
Наконец, все готово и программа установлена.

[root@server ~]# octave
GNU Octave, version 3.8.2
Copyright (C) 2014 John W. Eaton and others.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  For details, type 'warranty'.

Octave was configured for "x86_64-redhat-linux-gnu".

Additional information about Octave is available at http://www.octave.org.

Please contribute if you find this software useful.
For more information, visit http://www.octave.org/get-involved.html

Read http://www.octave.org/bugs.html to learn how to submit bug reports.
For information about changes from previous versions, type 'news'.

octave:1> 

Операции с матрицами

Не будем терять время и делать операции, которые можно повторить с помощью bc и awk, о ктоторых речь шла в прошлый раз. Поиграемся немного с матрицами.

Сперва простое транспонирование матрицы:

octave:1> A=[1 3 5; 2 4 6]
A =
   1   3   5
   2   4   6

octave:2> A'
ans =
   1   2
   3   4
   5   6

Попробуем решить систему линейных уравнений:

x + y + z = 9
2x + 4y - 3z = 1
3x + 6y - 5z = 0

Вбиваем матрицу A, вектор b и решаем уравнение Ax = b в матричном виде

octave:1> A=[1 1 1; 2 4 -3; 3 6 -5]
A =
   1   1   1
   2   4  -3
   3   6  -5

octave:2> b=[9; 1; 0]
b =
   9
   1
   0

octave:3> x=Ab
x =
   7.00000
  -1.00000
   3.00000

Находим детерминант и собственные значения матрицы.

octave:4> det (A)
ans = -1.00000

octave:5> eig (A)
ans =
-2.88897
2.76372
0.12525

Комплексные числа тоже поддерживаются в вычислениях.

octave:6> A=[-3 0 2; 1 -1 0; -2 -1 0]
A =
  -3   0   2
   1  -1   0
  -2  -1   0

octave:7> x=det (A)
x = -6
octave:8> y=eig(A)
y =

  -1.00000 + 1.41421i
  -1.00000 - 1.41421i
  -2.00000 + 0.00000i

Функции и переменные

В Octave переменные и функции создавать гораздо проще, чем, к примеру, в Java или C. На примере матриц, мы уже видели как объявлять переменные. Создания новой функции имеет следующий синтаксис

function [res1, res2, ..., resM] = имя_функции (arg1, arg2, ..., argN)
тело функции
endfunction

Как правило, новую функцию создают либо в отдельном файле, либо в скрипт-файле Octave
до первого ее вызова. Если предполагается использовать пользовательскую функцию в разных скрипт-файлах, то, конечно, предпочтительно создать ее в отдельном файле. В GNU Octave файлы с функциями имеют расширение .m и загружаются автоматически. Имя файла должно строго совпадать с именем функции.

Напишем функцию для решения квадратичного уравнения ax² + bx + c = 0

octave:9> function [x1,x2] = quadr(a, b, c)
> D = sqrt(b^2-4*a*c);
> x1 = (-b-D)/(2*a);
> x2 = (-b+D)/(2*a);
> endfunction
octave:10> [y1,y2]=quadr(a, b, c)
y1 =  2
y2 =  3

Графический интерфейс

Вообще-то, мы тут за математику командной строки гутарим, но пока непонятно как вывести на экран график функции. Впрочем, никакого секрета тут нет — для этих целей используется Gnuplot. Так можно изобразить Аттрактор Лоренца, установив дополнительный пакет odepkg.

 function [vyd] = froessler (vt, vx)
   vyd = [- ( vx(2) + vx(3) );
          vx(1) + 0.2 * vx(2);
          0.2 + vx(1) * vx(3) - 5.7 * vx(3)];
 endfunction

 A = odeset ('MaxStep', 1e-1);
 [t, y] = ode78 (@froessler, [0 70], [0.1 0.3 0.1], A);

 subplot (2, 2, 1); grid ('on'); 
   plot (t, y(:,1), '-b;f_x(t);', t, y(:,2), '-g;f_y(t);', 
         t, y(:,3), '-r;f_z(t);');
 subplot (2, 2, 2); grid ('on'); 
   plot (y(:,1), y(:,2), '-b;f_{xyz}(x, y);');
 subplot (2, 2, 3); grid ('on'); 
   plot (y(:,2), y(:,3), '-b;f_{xyz}(y, z);');
 subplot (2, 2, 4); grid ('on'); 
   plot3 (y(:,1), y(:,2), y(:,3), '-b;f_{xyz}(x, y, z);');

Наиболее удобной графической оболочкой для работы с Octave является программа QtOctave. Последняя уже стабилизировалась и включена в состав пакета с момента выхода Octave 4.0.

Что-же дальше?

Может возникнуть вопрос: а зачем вообще нужны открытые математические пакеты? Офисные приложения нужны всем, но ведь далеко не каждому необходимо сидя дома решать уравнения Пуассона, с помощью преобразования Лапласа. Для ВУЗ-ов MATLAB стоит значительно дешевле, нежели для физических лиц и коммерческих организаций. Коммерческие организации, если будет нужно, найдут денежные средства, а обычные люди пусть занимаются математикой в университетах или считают столбиком.

Конечно же, это ошибочное мнение. Научные расчеты, выполненные с использованием открытого ПО имеют дополнительный «уровень защиты», ведь при желании любой может повторить прогнать те же самые расчеты и проверить валидность результатов. Те же самые вычисления, выполненные на дорогущем ПО, частично отсекают возможность проверки результатов. Проблема на самом деле гораздо шире (английский текст) и дело не только в открытых или проприетарных математических программах. Не секрет, что научные журналы как правило не требуют от авторов предоставить данные и методику, достаточные для гарантированного повтора результатов эксперимента, проверки модели. Особенно часто этим грешат экономисты и финансисты, попросту засекречивая свои данные. Проверка расчетов и выводов среди выборки из массива статей с «засекреченными» данными дала неожиданные результаты (английский текст). Наука, как и софт, должна быть открытой, вот почему открытые математические пакеты имеют ценность для всего общества.

Рекомендуется к прочтению

Кроме последней книги, остальные материалы, использованные в статье, можно без труда найти в интернете. Половина из приведенных выше ссылок ведут на английские страницы. Буду рад вкратце сообщить о чем идет там речь или помочь с переводом.

  • GNU Octave 4.0.1 Manual
  • Алексеев Е.Р., Чеснокова О.В GNU Octave для студентов и преподавателей, 2011
  • Н. Б. Шамрай Краткое руководство по работе с пакетами GNU Octave и Gnuplot, 2011
  • Jesper Schmidt Hansen GNU Octave

gnu-octave-tutorial

A tutorial for those wanting to learn GNU Octave.

References

  • GNU Octave Beginners Guide by Jesper Schmidt Hansen (https://www.amazon.com/Octave-Beginners-Jesper-Schmidt-Hansen/dp/1849513325)

Introduction

GNU Octave is a high-level, multi-functional scientific tool used for numerical analysis. In the broad sense, it is a numerical computing environment and programming language similar to MATLAB. In fact, it’s so similar that some call GNU Octave a MATLAB «clone» because most MATLAB scripts can be ran by GNU Octave. One key difference to note right off the bat is unlike MATLAB, GNU Octave is free, so it makes for a great alternative. MATLAB liscenses typically cost around $50 if you are a student or $150 if you are a home user, so if you don’t want to spend money but still be able to do scientific computing and data analysis, read on!

What to Expect from this Tutorial

We will assume that you haven’t done very much programming, and we will refer to GNU Octave as just «Octave».

Installing Octave

Octave is availabe for most platforms (Windows, Mac OS X, Linux). I will be showing you instructions on how to install Octave on a Debian-based Linux machine, so if you are not working on Linux, you may have to Google how to set it up.

As root, type: apt-get install octave in your console.

After a few short lines of text from the console, with any luck Octave should be installed. To see if it is installed, type: octave in the console, and the octave interpreter (program) should be running and you should see something similar to the following below:

GNU Octave, version 3.8.2
Copyright (C) 2014 John W. Eaton and others.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  For details, type 'warranty'.

Octave was configured for "x86_64-pc-linux-gnu".

Additional information about Octave is available at http://www.octave.org.

Please contribute if you find this software useful.
For more information, visit http://www.octave.org/get-involved.html

Read http://www.octave.org/bugs.html to learn how to submit bug reports.
For information about changes from previous versions, type 'news'.

octave:1>

At the prompt, you can type exit then press enter, or do CTRL + D to quit the interpreter. Great! We are ready to move on.

First Execution

Let’s test out Octave and do something cool! Let’s try making some plots to see what Octave is capable of. Get back into Octave by typing octave in your console, then at the prompt, type the following below (don’t type octave:1>, that’s just part of the program):

octave:1> surf(peaks)

alt text

You should see a 3-D surface plot graphical window come up. Cool, right!? Don’t worry if you don’t know much about graphing or plotting stuff, we just wanted to make sure this worked. Let’s try another one! (Remember, just type: «contourf(peaks)» at the prompt)

octave:2> contourf(peaks)

alt text

Pretty neat, huh? As you may have noticed, every time you enter a valid command or function, the number within the prompt increments by 1. This isn’t really importnat, but just thought I would point it out. You can also hit the up arrow key while in the program to see past commands you ran. Pretty nifty!

Basic Programming

In order to tell Octave what we want it to do, we need to do some programming. Later on, we will learn how to make scripts (a file used to help automate programming tasks) but for now, we are just going to keep typing things into the console.

Variables

Just like in Mathematics, if we want to store some sort of value, we need container called a «variable». In Octave, a variable has two properties, a name and a value. For example, If we wanted to store the number 10 in ‘x’, then our variable name is ‘x’ and our value is 10. In Octave, it would look something like this:

What this did is store 10 into ‘x’. When we typed x=10 in the prompt and hit enter, the program evaluated it and outputted what ‘x’ holds. Now if you return to the prompt and type ‘x’ then press enter like so:

It will give back what ‘x’ holds. Nifty!

Variables can hold lots of different things, including but not limited to scalers, vectors, characters, strings, and matrices (linear algebra-type stuff). We can have a variable hold an array (a group of values that are similar to each other), a row vector, or a column vector.

octave:1> array = [1 2 3]
array =

   1   2   3

octave:2> row_vector = [1, 2, 3]
row_vector =

   1   2   3

octave:3> column_vector = [1;2;3]
column_vector =

   1
   2
   3

We could even create a 2 x 3 matrix with two rows and three columns:

octave:1> two_by_three_matrix = [1 2 3; 4 5 6]
two_by_three_matrix =

   1   2   3
   4   5   6

Notice how I have underscores between my variable names? You can’t have spaces in a variable name otherwise you will get errors.

We can also access a single element, or number within an array. If we wanted to access the second element:

octave:1> a = [2 4 6 8 10]
a =

    2    4    6    8   10

octave:2> a(2)
ans =  4

we do a(2) and it gives us the number 4 because that was the second element in the array (from left to right). If we look back at our two_by_three_matrix variable and we wanted to get the number that lies in the second row, third column, we would do something like this:

two_by_three_matrix(2,3) and it would give us an ans = 6

If we wanted to get the entire second column, we would do two_by_three_matrix(:,2), and if we wanted the entire 1st row, we would do two_by_three_matrix(1,:)

If we want to change a value in an array or matrix, simply use the parenthesis and use an equal sign. For example, looking back at our ‘a’ variable/array, we can say a(2) = 10 and it would make the second element hold 10!

The takaway from this is that by using the parenthesis «()» you can access elements, and by using an equals sign ‘=’ you can set or change what a particular variable is holding.

We can also store strings (characters that make up a word).

octave:1> text = "Hello, World!"
text = Hello, World!

and we can access a single letter:

octave:2> text(2)
ans = e

or get a few letters:

octave:3> text(2:4)
ans = ell

Cool!

Scripts

Earlier on I mentioned scripts and how they can help automate programming tasks. It very quickly becomes menotinous to type commands into the Octave console and have it spit-out output. By using scripts, we can write some commands in the script, then have Octave run the commands saving us some typing.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *