% Lineární algebra

%
% Operace s maticemi
%

%
% základní operace
%
A = rand(4);
B = rand(4);

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

%transpozice, pro reálné hodnoty A^T = A^H
A.' % A^T
A' % A^H

% determinant, hodnost, podmíněnost, ...

% determinant matice
det(A)
% hodnost - počet lineárně nezávislých řádků a sloupců
rank(A)
% podmíněnost matice
cond(A)
% stopa matice: sum(A_ii)
trace(A)

% norma vektoru
v = rand(1, 10)
norm(v)
norm(v, 2) % = norm(v)
norm(v, inf) % = max(abs(v))

% norma matice
norm(A) % = max(svd(A))
norm(A, inf) % max(sum(abs(A)))

% inverzní matice: A * inv(A) = I
inv(A)

%
%rozklady
%

% LU rozklad - A = L*U: L - lower, U -upper, P - permutation
% P*A = L*U
[L, U, P] = lu(A)

% QR rozklad - A = Q*R: Q - unitarní matice, R - horní trojúhelníková
[Q, R, P] = qr(A)

%
% vlastní hodnoty: det(A - lambda * I) = 0
%

% vlastní čísla
s = eig(A)

% vlastní čísla + vlastní vektory
[v, s] = eig(A)

%
% Polynomy
%

% kořeny polynomu: p(x) = 3x^2 + 5x + 2
p = [3, 5, 2]
r = roots(p)

% koeficienty polynomu k daným kořenům
poly(r)

% rozklad na parciální zlomky

% (-x + 5) / (x^2 - 4)
a = [-1, 5] % (-x + 5)
b = [1, 0, -4] % (x^2 - 4)
[r, p, k] = residue(a, b) % --> = 0.7500 / (x - 2) - 1.7500 / (x + 2) + 0

% (2x^5 + x^3 - 1) / (x^7 + 2x^5 + x^3)
a = [2, 0, 1, 0, 0, -1] % (2x^5 + x^3 - 1)
b = [1, 0, 2, 0, 1, 0, 0, 0] % (x^7 + 2x^5 + x^3)
[r, p, k] = residue(a, b)
% --> = 2 / x - 1 / x^3 - (2x - 2) / (x^2 + 1) - (x + 1) / (x^2 + 1)^2

%
% Interpolace
%

% proložení bodů polynomem
x = [1, 2, 3, 5]
y = [1, 3, 2.5, 1.4]
p = polyfit(x, y, 2) % vrací kořeny polynomu řádu 2
xi = 0:0.2:5
yi = polyval(p, xi)

figure
hold on
plot(x, y, 'ro')
plot(xi, yi, 'b-')

% spline
yi = spline(x, y, xi)
plot(xi, yi, 'k:')

% interpolace
figure
hold on
plot(x, y, 'ro')
yi = interp1(x, y, xi, 'linear')
plot(xi, yi, 'b')
yi = interp1(x, y, xi, 'cubic')
plot(xi, yi, 'm')
yi = interp1(x, y, xi, 'nearest')
plot(xi, yi, 'g')
yi = interp1(x, y, xi, 'spline')
plot(xi, yi, 'k')