Основни нумерички типови података
Под основним нумеричким типовима података сматрамо скаларе, векторе и матрице. На пример, скаларној променљивој имена 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 може се користити на више начина:
- Сабирањем две матрице исте димензије оне се сабирају елемент по елемент.
- Матрица која има
n
редова иm
колона може се сабирати са векторима димензијаnx1
и1xm
, где се свака од колона, односно редова, сабира са датим вектором. - Сабирањем вектора димензија
nx1
и1xm
матрицу димензијеnxm
такву да елемент на позицији(i,j)
представља збир одговарајућих елемената првог и другог вектора. - Произвољна матрица може се сабрати са скаларом, када се сваки од њених елемената сабира са тим скаларом.
Исто важи за оператор -
>> 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