Основни нумерички типови података

Под основним нумеричким типовима података сматрамо скаларе, векторе и матрице. На пример, скаларној променљивој имена a можемо доделити вредност 1 на следећи начин:

>> a=1 
a =  1

У програмском језику Octave није потребно наводити тип података при инстанцирању, као што је случај у програмском језику "C" и другим језицима нижег нивоа. Подразумевани тип бројчаних вредности је реалан број.

Вредност променљиве можемо видети куцањем њеног назива у терминалу:

>> a 
a =  1

Низ бројевва можемо задати на следећи начин:

>> b = [1 2 3] 
b =

   1   2   3

Овако задати низ програмски језик Octave посматра као једну вектор врсте. Елементи се такође могу задати раздвојени запетом на следећи начин:

>> b = [1, 2, 3] 
b =

    1   2   3

Уколико желимо да задамо вектор колоне, то можемо урадити на следећи начин:

>> c = [1; 2; 3] 
c =

    1   
    2   
    3

Матрицу задајемо навођењем колона реодом раздвојене знаком ;

>> A = [1 2 3; 4 5 6; 7 8 9] 
A =

    1   2   3   
    4   5   6   
    7   8   9

У раду са матрицама често су нам потребне матрица која има све нуле, матрица која има све јединице и јединична матрица, односно матрица која има јединице на дијагонали а нула на осталим местима. У програмском језику Octave њих можемо добити редом функцијама zeros, ones и eye постављајући као аргументе димензију жељене матрице као у примеру:

>> zeros(2,5)
ans =

    0   0   0   0   0
    0   0   0   0   0

>> ones(4,1)
ans =

    1
    1
    1
    1

>> eye(4)
ans =

Diagonal Matrix

    1   0   0   0
    0   1   0   0
    0   0   1   0
    0   0   0   1

Такође нам је често потребан низ еквидистантних тачака на неком интервалу што можемо добити коришћењем функције linspace:

>> linspace(1,2,5)
ans =

    1.0000   1.2500   1.5000   1.7500   2.0000

Комплексни бројеви

У програмском језику Octave подржан је рад са комплексним бројевима. Комплексан број пишемо у облику z = a + bi, где је * реалан део, а * имагинарни део броја * и * имагинарна јединица. При задавању комплексног броја, за обележавање имагинарне јединице могу се користити симболи i, j, I i J, а при испису то ће увек бити i као у примеру:

>> z = 1+2I
z =  1 + 2i

Уколико нас занима реални или имагинарни део броја, то можемо добити редом функцијама real и imag:

>> real(z)
ans =  1
>> imag(z)
ans =  2

На исти начин као матрице реалних бројева задају се матрице комплексних бројева. Уколико је барем један број у матрици комплексан, цела матрица се сматра комплексном. Уколико низ задајемо тако што елементе раздвајамо размаком, битно је обратити пажњу да нема размака између реалног и имагинарног дела како они не би били протумачени као два одвојена комплексна броја:

>> Z = [1+2i 3 -4i]
Z =

    1 + 2i   3 + 0i  -0 - 4i

Приступање и измена елемената

Да бисмо приступили одређеном елементу вектора врсте, наводимо њен редни број у заградама:

>> b(2)
ans =  2

Приметимо да се, за разлику од неких других програмских језика, индексирање врши од броја 1.

На сличан начин приступамо елементима матрице. На пример, елементу у другој врсти и трећој колони матрице А приступамо на следећи начин:

>> A(2,3)
ans =  6

У програмском језику Octave могуће је приступити и делу матрице, на пример елементи који се налазе у прве две колоне и друге две врсте матрице А добијамо на следећи начин:

>> A(1:2,2:3)
ans =  

    2   3
    5   6

На сличан начин можемо и мењати вредности елемтима матрице. На пример, уколико желимо да поставимо елемент у другом реду и трећој колони матрице А на -10.1 то можемо урадити на следећи начин:

>> A(2,3) = -10.1
A =  
  
    1.0000    2.0000    3.0000
    4.0000    5.0000  -10.1000
    7.0000    8.0000    9.0000 

Када барем један од елемената матрице није цео број, матрица се цела исписује у подешеном формату исписа реалног бројева. Без обзира на начин исписа, програмски језик Octave све рачунске операције обавља као да су у питању реални бројеви двоструке прецизности. Подразумеван је скраћени запис реалних бвројева, али то се може променити наредбом format long, као и вратити назад на краћи запис наредбом format short

Осим постављања вредности једном елементу, могуће је поставити вредност одређених елемената матрице на следеће начине:

>> A(1:2,2:3) = 100
A =

    1   100   100
    4   100   100
    7     8     9 
    
>> A(1:2,2:3) = [-2 -3; -5 -6]
A =
  
    1  -2  -3
    4  -5  -6
    7   8   9 

>> A(2,:) = b
A =
  
    1  -2  -3
    1   2   3
    7   8   9

Рад са низовима

Брисањем колоне матрице А добијамо матрицу која има 2 колоне и 3 врсте на следећи начин:

>> A(:,2) = []
A =
  
    1  -3
    1   3
    7   9 

Конкатенацију низова вршимо на следећи начин:

>> b = [b 4 5]
b =

    1   2   3   4   5 

Низове можемо индексирати и са одређеним кораком навођењем (почетак : корак : крај), на пример уколико желимо да добијемо све елементе низа b на непарним позицијама то можемо урадити овако:

>> b(1:2:5)
ans =
  
    1   3   5

Још један начин индексирања низа је низом индекаса:

>> c = [2 4 6 8 10];
>> i = [3 2 1 4];
>> c(i)
ans =

6   4   2   8

Информације о променљивама

Листу свих променљивих које су тренутно активне и информације о њима добијамо наредбом whos :

>> whos
Variables in the current scope:

    Attr Name        Size                     Bytes  Class
    ==== ====        ====                     =====  =====
         A           3x2                         48  double
         a           1x1                          8  double
         b           1x5                         40  double
         c           3x1                         24  double

Total is 15 elements using 120 bytes

Уколико желимо да сазнамо димензије једне променљиве, то можемо коришћењем функције size:

>> size(A)
ans =

    3   2

Први број представља број редова, а други број колони, што смо појединачно могли добити редом функцијама rows и columns:

>> rows(A)
ans =  3
>> columns(A)
ans =  2

Основне операције над променљицама

Оператор + у програмском језику Octave може се користити на више начина:

Исто важи за оператор -

>> A = [1 2 3; 4 5 6], B = ones(2,3), C = [1 2; 2 1], a = [1 2 3], b = [2;4], c = 5;
>> A+B
ans =

    2   3   4
    5   6   7

>> B+a
ans =

   2   3   4
   2   3   4

>> B-b
ans =

  -1  -1  -1
  -3  -3  -3

>> a+b
ans =

    3   4   5
    5   6   7
    
>> A+c
ans =

    6    7    8
    9   10   11

Оператор * у програмском језику Octave представља матрично множење, као и множење матрице скаларом. Да бисмо могли да их помножимо, матрице морају бити одговарајућих димензија, односно број колона прве матрице мора одговарати броју редова друге матрице. Множењем матрица димензија nxk и kxm добијамо матрицу димензије nxm. Степеновање квадратне матрице вршимо оператором ^ као у примеру

>> C*A
ans =

    9   12   15
    6    9   12 

>> c*A
ans =

    5   10   15
    20   25   30

>> A*B
error: operator *: nonconformant arguments (op1 is 2x3, op2 is 2x3)

>> C^3
ans =

   13   14
   14   13

Коришћењем симбола . испред операције означавамо да желимо да извршимо операцију елемент по елемент.

>> A.*A
ans =

    1    4    9
    16   25   36

>> A.^2
ans =

    1    4    9
    16   25   36  
  
>> A.^A
ans =

        1       4      27
      256    3125   46656

Конјунгцију комплексне матрица вршимо оператором '. За реалне матрице то одговара транспоновању:

>> A'
ans =

    1   4
    2   5
    3   6

>> [1+2i 1-2i; 2-i 2+i]'
ans =

    1 - 2i   2 + 1i
    1 + 2i   2 - 1i

Логичке операције

Логичке операције у програмском језику Octave користимо на сличан начин као у већини програмских језика. Вредност нетачно означава број 0 док сви остали бројеви означавају вредност тачно. Као и друге операције, може се применити на низовима и матрицама. Тада за резултат добијам низ, односно матрицу логичких вредности које одговарају датом изразу рачунато елемент по елемент, као у примерима:

>> A = [1 2 3; 4 5 6];
>> B = [1 1 1; 5 6 7];
>> A <= B
ans =

  1  0  0
  1  1  1
  
>> (A > 4 & A <= B)
ans =

  0  0  0
  0  1  1