% 1. Seznámení s matlabem

% nápověda ke konkrétnímu tématu
help plot

% vyhledávání v nápovědě
lookfor plot

% smazání obrazovky
clc

% použití Matlabu jako kalkulačky, výslede přiřazen do proměnné ans
(5 - 3/5) / 2

% předdefinované hodnoty

ans % poslední výsledek, u kterehé nebyla učena proměná pro
    % přiřazení

pi % Ludolfovo číslo

i % komplexní jednotka
j % komplexní jednotka
1+2i
3j

inf % symbol nekonečno, použití u výpočtů limit
1/0
-1/0
1/inf

nan % "Not a Number", výsledek operace 0/0, možno použít při
    % vykreslování grafů pro nespojitosti

% proměnné
%  - v názvu nesmí být použity operátory +, -, *, /, ...
%  - rozlišují se velká a malá písmena
a = 5
A = 15
%  - název nesmí začínat číslicí
jb007 = inf

b = a/2
c = 2 +3j

% výpis proměnných
who

% detailní výpis proměnných
whos

% mazání proměnných
clear a b % smaže proměnné a, b
clear % smaže všechny uživatelem definované proměnné
clear a* % smaže proměnné začínající a

%!!! lze předefinovat předdefinované proměnné !!!
pi = 4 % definice nové lokální proměnné pi, pi ma nyni hodnotu 4
clear pi % smaže uživatelem definovanou proměnnou pi
pi % pi ma nyni opět hodnotu 3.1415...

% skalár, vektor, matice - vše jeden datový typ
a = 5 % skalární hodnota - matice 1x1
b = [2, 3, 5] % definice vektoru - matice 1x3
X = [1, 2, 3; 4 5 6] % definice matice 2x3 (řádek x sloupec)

% doporučení: velkým písmenem označovat matice (objekt NxN),
% malým písmenem vektory a skaláry

% speciální matice a vektory
zeros(2, 3) % nulová matice 2x3
zeros(3) % nulová matice 3x3
ones(4) % matice 4x4 - pole jedniček
rand(3, 5) % matice 3x5 (pseudo)náhodných čísel z intarvalu <0; 1>,
           % rovnoměrné rozdělení
eye(5) % jednotková matice 5x5, "1" na diagonále
diag([3, 1, 5, 7]) % matice 4x4 s daným vektorem na diagonále

1:10 % vytvoří vektor [1, 2, 3, ..., 10]
1:2:10 % = [1, 3, 5, 7, 9]
12:-3:0 % = [12, 9, 6, 3, 0]

linspace(0, 1) % = 1:1/99:1
linspace(0, 1, 20) % = 0:1/19:1
logspace(0, 2, 20) % 20 "logaritmicky stejně vzdálených" čísel z intervalu <10^0, 10^1>

% velikost matice/vektoru
s = size(X) % rozměry matice přiřazeny vektoru s
[m, n] = size(X) % m - počet řídek, n - počet sloupců
length(b) % délka vektoru; length(x) = size(max(x))

% idexování vektorů a matic
c = 10:30 % c = [10, 11, ..., 30]
c([5, 6, 7, 8, 9, 10]) % odkaz na prvky vektoru; = [14    15    16    17    18    19]
c(5:10) % = [14    15    16    17    18    19]
c(1:2:end) % vyber prvku na lichých pozicích až do konce ("end");
           % = c(1:2:length(c))
c([1:5, 15:end]) % 5 prvních a 5 posledních prvků vektoru

X(1,[1, 2, 3]) % první řídek, všechny sloupce
X(1,1:3) % první řídek, všechny sloupce
X(1,:) % první řídek, všechny sloupce

X(2,3) = 9 % změna hodnoty na pozici (2,3)
X(:, [1, 3]) = zeros(2)

% maticové operace
A = [1, 2, 3; 4, 5 6]
B = [2, 2, 2; 3, 3, 3]
A + B
A - B
%A * B % nesouhlasí rozměry matic
A .* B % prvková operace nísobení
A * B' % maticová operace nísobení
A' % Hermitovská transpozice A^(H) - změna znaménka u imaginární složky
A.' % "normální" transpozice A^(T)
A ./ B % prvková operace dělení

% řešení soustavy rovnic
%  3x -  y      = 3
%   x + 3y - 2z = 9
% -2x +  y + 4z = -5
A = [3 -1 0; 1 3 2; -2 1 4]
b = [3 9 -5]'

x = A \ b % = inv(A) * b

% A / B  =  A * inv(B)
% A \ B  =  inv(A) * B

% N-rozměrné matice
zeros(3,3,4) % vytvoří nulové pole 3x3x4
             % obecně lze vytvořit N-rozměrné pole

% buňkové pole
cell(2,3) % vytvoří buňkové pole 2x3
          % každá buňka obsahuje prázdnou matici
cell{1,1} = ones(3)
cell{1,2} = eye(2)
cell{1,3} = zeros(3,4)
cell{2,1} = rand(2,3,4)
cell{2,2} = 'toto je retezec'
cell{2,3} = cell(2,2)

cell{2,1}(:,1,1)

% load save
save 'moje_data' % uloží proměnné ve workspace do souboru
                 % 'moje_data.mat'
save 'moje_data' x A b % uloží proměnné 'x', 'A', 'b' do souboru
                       % 'moje_data.mat'

save 'moje_data.txt' x A b -ASCII % uloží proměnné v textovém formátu

load 'moje_data' % načte datový soubor

% příklady na procvičení

% 1) vygenerujte matici náhodných čísel 3x4 z intervalu <-5, 5>
10 * rand(3, 4) - 5

% 2) pomocí speciálních matice (ones, ...) vygenerujte matici
%    15     3     3     3     3
%     3    15     3     3     3
%     3     3    15     3     3
%     3     3     3    15     3
%     3     3     3     3    15
3 * ones(5) + 12*eye(5)

% 3) vyřešte soustavu rovnic
% a + c = 6
% -a + b + d = 9
% b - c + d = 5
% a - b + c + d = 10
A = [1 0 1 0; -1 1 0 1; 0 1 -1 1; 1 -1 1 1]
b = [6 9 5 10]'

x = A \ b