Коришћење математичких функција

У програмском језику Octave постоји пуно уграђених математичких функција које можемо користити. Њих можемо примењивати на скаларе, али и на векторе и матрице, када добијамо вектор, односно матрицу, исте димензије као почетна чији су елементи добијени применом дате функције на одговарајући елемент. Можемо користити и математичке константе као што су е и pi. Примери неких од функција:

>> cos(pi)
ans = -1
>> sin(pi/2)
ans =  1
>> exp([1 2 3 4])
ans =

    2.7183    7.3891   20.0855   54.5982

>> sqrt([4 9 16 25]')
ans =

    2
    3
    4
    5

>> log([e^2 e^3 e^4 e^5])
ans =

    2   3   4   5

>> power(2,[1,2;3,4])
ans =

    2    4
    8   16

Полиноми

У програмском језику Octave подржан је рад са полиномима. Полином се представља низом својих коеифицијената. На пример полином f(x) = x4 + 2x3 - x + 5 представља се низом c = [1 2 0 -1 5]. Први елемент низа одговара коенфицијенту уз члан највећег степена, а последњи константи члан. Како у полиному немамо члан степена 2 то посматрамо као да је коефицијент на том месту 0. Вредност полинома у некој тачки добијамо коришћењем функције polyval:

>> c = [1 2 0 -1 5];
>> polyval(c,0)
ans =  5
>> polyval(c,[0 0.1 0.2 0.3])
ans =

   5.0000   4.9021   4.8176   4.7621

Корене полинома добијамо коришћењем функције roots

>> roots(c)
ans =

    -1.73590 + 0.88173i
    -1.73590 - 0.88173i
    0.73590 + 0.88173i
    0.73590 - 0.88173i

Коефицијенте извода и интеграла полинома добијамо редом функцијама polyder и polyint.

>> polyder(c)
ans =

    4   6   0  -1

>> polyint(c)
ans =

    0.20000   0.50000   0.00000  -0.50000   5.00000   0.00000

Генерисање насумичних бројева

Функцијом rand генерише се матрица униформно расподељених насумичних бројева на отвореном интервалу (0,1). За аргументе функције задајемо димензије жељене матрице. Уколико се аргументи не наведу, подразумева се генерисање једног насумичног броја.

>> A = rand(3,4)
A =

    0.34480   0.93419   0.41659   0.46778
    0.68106   0.77960   0.14562   0.55920
    0.65343   0.40879   0.48002   0.70597
Уколико нам је потребна другачија расподела, можемо користити:

Користећи ове функције аритметиком низова се могу добити друге расподеле истог типа, на пример 7 униформно расподељених елементе на интервалу (2,6) добијамо:

>> B = (rand(1,7)*4)+2
B =

    4.0927   2.9322   3.3846   5.3086   3.0378   5.5052   4.2000

Сортирање низова

Низови се у програмском језику Octave могу сортирати функцијом sort. Уколико за аргумент функције sort(a) наведемо матрицу, то се посматра као низ вектора колона који ће сваки за себе бити сортиран:

>> sort(A)
ans =

    0.34480   0.40879   0.14562   0.46778
    0.65343   0.77960   0.41659   0.55920
    0.68106   0.93419   0.48002   0.70597

Уколико не желимо да сортирамо по колонама него по редовима, то можемо учинити додавањем броја 2 као други аргумент. Број 1 на том месту означавао би да желимо сортирање по колонама, но како је то подразумевано понашање не мора се наводити.
Ако желимо да се сортирање врши у опадајућем поретку потребно је да додамо аргумент 'descend'.

Осим сортираног низа, односно низа низова, повратна вредност сортирања може бити и низ индекса који одговарају елементу на датој локацији у оригиналном низу, односно низу низова

Све поменуто можемо видети на следећем примеру:

Наредба sort(a) за повратну вредност имаће сортиран низ a, али треба имати у виду да је низ a непромењен. Уколико желимо да га променимо потребно је да наведемо наредбу доделе a = sort(a).

>> [S i] = sort(A, 2, 'descend')
S =

    0.93419   0.46778   0.41659   0.34480
    0.77960   0.68106   0.55920   0.14562
    0.70597   0.65343   0.48002   0.40879

i =

    2   4   3   1
    2   1   4   3
    4   1   3   2

У примеру сортирали смо редове матрице A у опадајућем редоследу. Матрица i представља редне бројеве колона у којој се у матрици A налази одговарајући елемент тог реда.

Логичке функције

Често нам је потребно да у низу или матрици пронађемо све елементе који имају одређено својство. За то се може користити функција find.
Функција find проналази све ненула елементе у низу или матрици и враћа њихове локације.

>> [i,j] = find([0 1; 1 0])
i =

    2
    1

j =

    1
    2

Добијени вектори i и j представљају редом број колоне и број реда одговарајућег ненула елемента матрице.

Упарено са логичким оператором, о чему више пише у секцији Променљиве и операције, функцију find можемо користити на следећи начин:

>> [i,j] = find(A>0.5)
i =

    2
    3
    1
    2
    2
    3

j =

    1
    1
    2
    2
    4
    4

Функција any примењена на низ враћа тачну вредност ако у том низу постоји барем једна ненула вредност. Матрица се посматра као низ вектора колона, тако да ће повратна вредност означавати у којим се све колонама налази барем једна ненула вредност. Слично ради и функција all осим што она проверава да ли су све вредности у датој колони, односно низу ненула вредности:

>> any([0 1; 0 0])
ans =

    0  1

>> all([0 1; 0 0])
ans =

    0  0

Цртање графика

У програмском језику Octave подаци се могу визуелно приказати користећи уграђену функцију plot. За први аргумент наводимо растући низ тачака на x-оси, а други низ вредности функције у одговарајућим тачкама

>> c = [1 3 3 1]; x = [-20:5:20]; y = polyval(c,x); plot(x,y)
    grafik kubnog polinoma 

Подразумевано тачке су на графику повезане правим линијама. Повећањем броја тачака график постаје детаљнији. Својства графика можемо мењати навођењем аргумената функције plot- назив својства и жељене вредности што можемо видети у табели:

plot својство вредности
linewidth Број који представља жењену дебљину линије
linestyle Стил линије може бити "-", "--", ":", "-." или "none" и представља редом пуну линију, испрекидану, тачкасту, црта-тачка-црта и неповезане тачке
markersize Величина тачака на графику
color Боја графика задаје се називом или као низ од три броја који представљају интензитет црвене, зелене и плаве боје у тој боји на скали 0 до 1
marker Стил исцртавања познатих тачака на графику, што може бити директно задат карактер ('+', 'o', '*', '>' ...), или назив облика ('square', 'diamond', 'pentagram', 'hexagram')

Још нека својства могу се подесити функцијом set која за аргументе има парове својство и вредност из табеле:

set својство вредности
xlim, ylim Границе графика на x-оси, односно на y-оси. Двочлани низ који садржи доњу и горњу границу интервала.
fontsize Величина фонта ознака на осама.
xlabel, ylabel Ознаке оса
linewidth Број који представља дебљину оквира графика
xticks, yticks Монотони низ бројева који представља обележене тачке на оси.
title Назив графика

Наредбама grid on и grid off може се укључити и укључити координатна мрежа. Наредбама hold on и hold off може се укључити и искључити останак старог графика на слици приликом исцртавања новог, и на тај начин се може цртати више графика на истом простору. Неке од наведених опција можемо видети на примеру:

>> c1 = [2 10 0 6]; c2 = [2 10  -10 6];
>> x = [-5:0.1:2]; y1 = polyval(c1,x ); plot(x,y1 ,"color","red","linestyle","-.", "linewidth", 3); grid on; hold on;
>> y2 = polyval(c2,x ); plot(x,y2 ,"color",[1 0.7 0],"diamond");
>> set(gca, "ylabel", text("string", "f(x)", "fontsize", 25))
>> set(gca, "xlabel", text("string", "x", "fontsize", 25))
>> set(gca, "ylim", [0 90])
>> set(gca, "ytick", [0:15:90])

primer dva grafika

Вишедимензиони график

За дефинисање вишедимензионог домена функције корисна нам је уграђена функција meshgrid. На примеру видимо како можемо добити матрице x и y координата чворова на мрежи димензије 4x3:

>> x = [1 2 3]; y = [1 2 3 4]; [X Y] = meshgrid(x,y)
X =

    1   2   3
    1   2   3
    1   2   3
    1   2   3

Y =

    1   1   1
    2   2   2
    3   3   3
    4   4   4

Постоји више начина исцртавање тродимензионих графика. Уколико желимо да нацртамо површ у простору користе се функције surface и mesh што ћемо показати на примеру функције z(x,y) = x2 - y2 на домену [-2,2]x[-2,2]:

x = [-2:0.1:2]; y = x;
>> [X Y] = meshgrid(x,y);
>> Z = X.^2 - Y.^2;
>> mesh(X,Y,Z)
koriscenje funkcije mesh
>> surface(X,Y,Z)
koriscenje funkcije mesh

Угао гледања ових површи можемо мењати коришћењем функције view задавањем азимута и висине тачке гледања у степенима

ugao gledanja

Приказ исте површи посматране из тачака (20,20) и (-20,-20) редом:

koriscenje funkcije view +
koriscenje funkcije view -

Параметарски задате криве у простору цртамо функцијом plot3 као у примеру:

t = 0:0.1:10*pi;
r = linspace (0, 1, numel (t));
z = linspace (0, 1, numel (t));
plot3 (r.*sin(t), r.*cos(t), z)
kriva u prostoru