Change prompt

from octave:1> to >>

octave:1> PS1('>> ');
>> 

Help command

>> help help
'help' is a function from the file C:\Octave\OCTAVE~1.0\mingw64\share\octave\5.2.0\m\help\help.m

-- help NAME
-- help --list
-- help .
-- help
Display the help text for NAME.

For example, the command 'help help' prints a short message
describing the 'help' command.

Given the single argument '--list', list all operators, keywords,
built-in functions, and loadable functions available in the current
session of Octave.

Given the single argument '.', list all operators available in the
current session of Octave.

If invoked without any arguments, 'help' displays instructions on
how to access help from the command line.

The help command can provide information about most operators, but
NAME must be enclosed by single or double quotes to prevent the
Octave interpreter from acting on NAME.  For example, 'help "+"'
displays help on the addition operator.

Additional help for built-in functions and operators is
available in the online version of the manual.  Use the command
'doc <topic>' to search the manual index.

Help and information about Octave is also available on the WWW
at https://www.octave.org and via the help@octave.org
mailing list.

Basic Operations

Math Operations

>> 5+6
ans = 11

Subtraction

>> 3-2
ans = 1

Multiplication

>> 5*8
ans = 40

Division

>> 1/2
ans = 0.50000

Exponent

>> 2^6
ans = 64

Logic operations

Equality

>> 1 == 2
ans = 0

Inequality

>> 1 ~= 2
ans = 1

Logical AND

>> 1 && 0
ans = 0

Logical OR

>> 1 || 0
ans = 1

Logical XOR

>> xor(1,0)
ans = 1 

Variables

Assignments

numbers

>> a =3;
>> a
a = 3

strings

>> b = 'hi';
>> b
b = 'hi'

calculations

>> c = (3>=1);
>> c
c = 1

$\pi$

>> a = pi;
>> a
>> a = 3.1416

Displaying Variables

numbers

>> a = pi;
>> disp(a)
3.1416

strings

>> a = pi;
>> disp(sprintf('2 decimals: %0.2f', a));
2 decimals: 3.14
>> disp(sprintf('6 decimals: %0.6f', a));
6 decimals: 3.141593

format

>> a = pi;
>> format long
>> a
a = 3.14159165358979
>> format short
>> a
a = 3.1416

Matrices

3×2 matrix

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

or

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

1×3 Matrix

>> V = [1 2 3 ]
V =
1   2   3

3×1 Vector

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

Creating vector from 1 to 2 increasing next element by 0.1

>> V = 1:0.1:2
V =
1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000    1.9000    2.0000

Creating vector from 1 to 6 increasing next element by 1

>> V = 1:6
V =
1   2   3   4   5   6

Matrix 2×3 with all values eqauls 1

>> ones(2,3)
ans =
1   1   1
1   1   1

Matrix 2×3 with all values eqauls 2

>> C = 2*ones(2,3)
C =
2   2   2
2   2   2

Row vector with 1

>> w = ones(1,3)
w =
1   1   1

Row vector with 0

>> w = zeros(1,3)
w =
0   0   0

Random matrix (numbers between 0 and 1)

>> rand(1,3)
ans =
0.32784   0.49321   0.17449
>> rand(3,3)
ans =
0.60369   0.15891   0.75957
0.47148   0.11786   0.86370
0.46272   0.51486   0.71124

Gaussian random variables

>> randn(1,3)
ans =
-0.67605  -0.54028   0.42763


More complicated

>> w = -6 + sqrt(10)*randn(1,100)
w =
Columns 1 through 8:
-4.5865653   -8.8356479   -8.1333614   -2.3439273   -7.3621630   -9.0450181   -2.1489934   -4.2785162
Columns 9 through 16:
-10.7109066   -7.5124041   -6.6674847  -14.4887638   -0.4808289   -2.1354753   -7.8977581   -8.9314986
Columns 17 through 24:
-8.9893458   -1.5510572  -10.3796268  -10.2004881   -1.9258233  -10.7401729   -1.4114864  -11.9918739
Columns 25 through 32:
-1.4288672   -9.1350859   -4.0339111   -7.1057222   -5.5066692   -5.3943613   -9.9372854  -12.3273985
Columns 33 through 40:
-9.1448272   -3.5632437   -9.8825123   -3.6862963   -0.9314631   -7.1585643   -7.5249914   -6.7338681
Columns 41 through 48:
-4.0692604   -3.1736484   -7.1340077   -5.6141781   -7.1375287  -10.1554003   -7.3884758   -8.2993959
Columns 49 through 56:
-7.9971092   -3.7486347   -4.9565946  -10.1077235   -3.7186839   -7.6239998   -9.3567788   -7.0285528
Columns 57 through 64:
-5.7498064   -5.1235503    2.6385315   -7.0795552   -5.1845500   -2.7447164   -7.7785950    0.8816560
Columns 65 through 72:
-6.5335031    0.0066014   -3.9586199   -2.1445580   -3.4484948  -12.8979017   -1.5233025   -4.4102424
Columns 73 through 80:
0.9831482   -4.7574813   -2.7595514  -11.2178766   -5.3229671   -1.8543523   -3.7577500   -3.8678680
Columns 81 through 88:
-3.8637871   -7.2037168  -11.7877396   -7.1542280   -7.5999564    0.2206099   -6.7140798   -1.3302397
Columns 89 through 96:
-3.6058713   -5.5103303   -5.8951690   -1.6396029   -8.2389941   -4.5821969   -4.4162341   -6.9883700
Columns 97 through 100:
-3.4562746   -3.8389149   -0.8080181   -4.6449049


#### Histagram
r
>> hist(w)

>> hist(w,50)

>> eye(4)
ans =
Diagonal Matrix
1   0   0   0
0   1   0   0
0   0   1   0
0   0   0   1


Moving Data Around

Matrices size

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

>> size(A)
ans =
3   2

Get dimensions (rows) of Matrix

>> size(A,1)
ans =  3

Get number of columns

>> size(A,2)
ans =  2

Length of Vector

V =
4   3   1   5
>> length(V)
ans =  4

It can be applied as well to Matrices, but then the result will be only for the longest dimension

>> length(A)
ans =  3

Show the current directory

>> pwd
ans = C:\Users\Gosia

Changing directory

>> cd 'D:\Projects'
>> pwd
ans = D:\Projects

>> load data.txt

display data from the file


>> data
data =
6.11010   17.59200
5.52770    9.13020
8.51860   13.66200
7.00320   11.85400
5.85980    6.82330
8.38290   11.88600
7.47640    4.34830
8.57810   12.00000
6.48620    6.59870
5.05460    3.81660
5.71070    3.25220
14.16400   15.50500
5.73400    3.15510
8.40840    7.22580
5.64070    0.71618
5.37940    3.51290
6.36540    5.30480
5.13010    0.56077
6.42960    3.65180
7.07080    5.38930
6.18910    3.13860

check the size of data (file)

>> size(data)
ans =
97    2

check variables that Octave has in memory

>> who
Variables in the current scope:
A     V     a     ans   b     c     data  w

check variables with details that Octave has in memory

>> whos
Variables in the current scope:

Attr Name        Size                     Bytes  Class
==== ====        ====                     =====  =====
A           3x2                         48  double
V           1x4                         32  double
a           1x1                          8  double
ans         1x2                         16  double
b           1x2                          2  char
c           1x1                          1  logical
data       97x2                       1552  double
w           1x100                      800  double

Total is 310 elements using 2459 bytes

assign only selected data from one variable to another

>> m = data(1:10)
m =

6.1101   5.5277   8.5186   7.0032   5.8598   8.3829   7.4764   8.5781   6.4862   5.0546

>> whos
Variables in the current scope:

Attr Name        Size                     Bytes  Class
==== ====        ====                     =====  =====
A           3x2                         48  double
V           1x4                         32  double
a           1x1                          8  double
ans         1x2                         16  double
b           1x2                          2  char
c           1x1                          1  logical
data       97x2                       1552  double
m           1x10                        80  double
w           1x100                      800  double

Total is 320 elements using 2539 bytes

save a variable to a file (in binary format)

>> save hello.mat m;
>> ls
Volume in drive D is Data
Volume Serial Number is 9C15-10B4

Directory of D:\machine-learning-ex\test

[.]         [..]        data.txt    hello.mat
2 File(s)          1,691 bytes
2 Dir(s)  88,129,142,784 bytes free

save a variable to a file (in ascii format)

>> save hello.txt m -ascii

hello.txt

 6.11010000e+00 5.52770000e+00 8.51860000e+00 7.00320000e+00 5.85980000e+00 8.38290000e+00 7.47640000e+00 8.57810000e+00 6.48620000e+00 5.05460000e+00

clear selected variable

>> clear data
>> whos
Variables in the current scope:

Attr Name        Size                     Bytes  Class
==== ====        ====                     =====  =====
A           3x2                         48  double
V           1x4                         32  double
a           1x1                          8  double
ans         1x2                         16  double
b           1x2                          2  char
c           1x1                          1  logical
w           1x100                      800  double

Total is 116 elements using 907 bytes

clear all variables

>> clear
>> whos
>>

>> load hello.mat
>> whos
Variables in the current scope:

Attr Name        Size                     Bytes  Class
==== ====        ====                     =====  =====
m           1x10                        80  double

Total is 10 elements using 80 bytes

Get specific element from the variable (example: 3rd column and 2nd row)

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

1   2
3   4
5   6

>> A(3,2)
ans =  6

Get everything in a second row

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

Get everything in a second column

>> A(:,2)
ans =

2
4
6


Get all elements from specific columns

>> A([1 3],:)
ans =

1   2
5   6

>> A([2 3],:)
ans =

3   4
5   6

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

1   2
3   4
5   6

Change data in matrix

>> A
A =

1   2
3   4
5   6

>> A(:,2) = [10;11;12]
A =

1   10
3   11
5   12

Add (append) another column vector data to the right

>> A = [A, [100; 101; 102]];
>> A
A =

1    10   100
3    11   101
5    12   102


Put all element of matrix into single column vector

>> A(:)
ans =

1
3
5
10
11
12
100
101
102


Combine two matrices

>> A = [1 2; 3 4; 5 6];
>> B = [11 12; 13 14; 15 16];
>> C = [A B]
C =

1    2   11   12
3    4   13   14
5    6   15   16

or

>> A = [1 2; 3 4; 5 6];
>> B = [11 12; 13 14; 15 16];
>> C = [A; B]
C =

1    2
3    4
5    6
11   12
13   14
15   16


Computing on Data

Multiply

>> A = [1 2; 3 4; 5 6];
>> C = [1 1; 2 2];
>> A*C
ans =

5    5
11   11
17   17


Element-wise multiplication

>> A = [1 2; 3 4; 5 6];
>> B = [11 12; 13 14; 15 16];
>> A .*B
ans =

11   24
39   56
75   96


Element-wise squaring

>> A = [1 2; 3 4; 5 6];
>> A .^ 2
ans =

1    4
9   16
25   36


Element-wise Reciprocal

>> V = [1; 2; 3];
>> 1 ./ V
ans =

1.00000
0.50000
0.33333


Element-wise inverse of A (matrix)

>> A = [1 2; 3 4; 5 6];
>> 1 ./A
ans =

1.00000   0.50000
0.33333   0.25000
0.20000   0.16667

Element-wise logarithm

>> V = [1; 2; 3];
>> log(V)
ans =

0.00000
0.69315
1.09861

Exponentiation

>> V = [1; 2; 3];
>> exp(V)
ans =

2.7183
7.3891
20.0855

Element-wise absolute value

>> V = [1; 2; 3];
>> abs(V)
ans =

1
2
3

>> abs([-1; -3; -10])
ans =

1
3
10


negative

>> V = [1; 2; 3];
>> -V
ans =

-1
-2
-3


or

>> V = [1; 2; 3];
>> -1*V
ans =

-1
-2
-3

Increment all values by one

>> V = [1; 2; 3];
>> V + ones(length(V),1)
ans =

2
3
4


or

>> V = [1; 2; 3];
>> V + 1
ans =

2
3
4


Matrix transport

>> A = [1 2; 3 4; 5 6];
>> A'
ans =

1   3   5
2   4   6

Max value

>> a = [1 15 2 0.5];
>> max(a)
ans =  15

Max value and index of this max value

>> val = max(a)
val =  15
>> [val, ind] = max(a)
val =  15
ind =  2

Column-wise maximum (on matrices)

>> A = [1 2; 3 4; 5 6];
>> max(A)
ans =

5   6


or

>> A = [1 2; 3 4; 5 6];
>> max(A,[],1)
ans =

5   6


Row-wise maximum (on matrices)

>> A = [1 2; 3 4; 5 6];
>> max(A,[],2)
ans =

2
4
6


The max element in whole matrix

>> A = [1 2; 3 4; 5 6];
>> max(max(A))
ans =  6


or turn into vector

>> A = [1 2; 3 4; 5 6];
>> max(A(:))
ans =  6

Element-wise comparison (showing true/false)

>> a = [1 15 2 0.5];
>> a < 3
ans =

1  0  1  1

Element-wise comparison (showing with element)

>> a = [1 15 2 0.5];
>> find(a < 3)
ans =

1   3   4

Magic (N-by-N magic square)

>> A = magic(3)
A =

8   1   6
3   5   7
4   9   2
>> A = magic(9)
A =

47   58   69   80    1   12   23   34   45
57   68   79    9   11   22   33   44   46
67   78    8   10   21   32   43   54   56
77    7   18   20   31   42   53   55   66
6   17   19   30   41   52   63   65   76
16   27   29   40   51   62   64   75    5
26   28   39   50   61   72   74    4   15
36   38   49   60   71   73    3   14   25
37   48   59   70   81    2   13   24   35

sum columns

>> sum(A,1)
ans =

369   369   369   369   369   369   369   369   369

sum rows

>> sum(A,2)
ans =

369
369
369
369
369
369
369
369
369

sum diagonal

>> eye(9)
ans =

Diagonal Matrix

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

>> A .* eye(9)
ans =

47    0    0    0    0    0    0    0    0
0   68    0    0    0    0    0    0    0
0    0    8    0    0    0    0    0    0
0    0    0   20    0    0    0    0    0
0    0    0    0   41    0    0    0    0
0    0    0    0    0   62    0    0    0
0    0    0    0    0    0   74    0    0
0    0    0    0    0    0    0   14    0
0    0    0    0    0    0    0    0   35

>> sum(sum(A.*eye(9)))
ans =  369

>> flipud(eye(9))
ans =

Permutation Matrix

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

>> sum(sum(A.*flipud(eye(9))))
ans =  369

finding by row and column

>> A = magic(3);
>> [r,c] = find(A >= 7)
r =

1
3
2

c =

1
2
3

>> [row,column] = find(A >= 7)
row =

1
3
2

column =

1
2
3

Pseudo-inverse

>> A = magic(3)
A =

8   1   6
3   5   7
4   9   2

>> pinv(A)
ans =

0.147222  -0.144444   0.063889
-0.061111   0.022222   0.105556
-0.019444   0.188889  -0.102778

>> a = [1 15 2 0.5];
>> sum(a)
ans =  18.500

Multiply all elements

>> a = [1 15 2 0.5];
>> prod(a)
ans =  15

Rounds down elements ( Return the largest integer not greater than X)

>> a = [1 15 2 0.5];
>> floor(a)
ans =

1   15    2    0

Rounds up elements ( Return the smallest integer not less than X)

>> a = [1 15 2 0.5];
>> ceil(a)
ans =

1   15    2    1

Plotting Data

Sample generated data for the plot (numbers from 0 to up 0.98) and sin function

>> t=[0:0.01:0.98];
>> y1 = sin(2*pi*4*t);

Generating plot, where horizontal axis = t and verical axis = y1:

>> plot(t,y1);

When run once again the plot with different argument, it will be replaced with new plot:

>> y2 = cos(2*pi*4*t);
>> plot(t,y2);

To have both (or more) plots on one designer it's needed to use the hold on; function:

>> plot(t,y1);
>> hold on;
>> plot(t,y2);

>> xlabel('time');
>> ylabel('value');
>> legend('sin','cos');
>> title('my plot');

Saving the figure

>> cd D:\; print -dpng 'myPlot.png'

To close figure

>> close;

To open two figures in seperate windows:

>> figure(1); plot(t,y1);
>> figure(2); plot(t,y2);

Dividing plot by 1x2 grid and access first element and next second element

>> subplot(1,2,1);
>> plot(t,y1);

Clear figure

>> clf;

Visualize matrix

>> A = magic(5)
A =

17   24    1    8   15
23    5    7   14   16
4    6   13   20   22
10   12   19   21    3
11   18   25    2    9

>> imagesc(A)

To show with grey colour with colour bar

>> imagesc(A), colorbar, colormap gray;