% CVICENI - 2

% ----------------------- Matice a vektory ------------------- %
A = [1   2  3;
     4   5  6;
     7   8  9;
     10 11 12];

D = [1 2;
     4 5];

b = [1,2,8,7,3,9];

e = [11;12; 13; 14; 15; 16];

% tisk matice A
A

A(2,1);      % tisk prvku matice A, 2-radek, 1-sloupec
A(1:2,2:3);  % vyrobi sub-matici, 1->2 radek, 2->3 sloupec
A(end,end);  % tisk prvku v poslednim radku, poslednim sloupci
A(:,3);      % tisk 3-sloupce matice A
A(3,:);      % tisk 3-radku matice A


% slouci radky radkoveho vektoru b a transponovaneho sloupco vektoru e
x = [b,e'];
% matice z 2+3 sloupce maice A a prvnich 4 radku transponovaneho vektoru b
x = [A(:,2:3) b(1:4)']

R = rank(A) % hodnost matice A
D = det(A(1:3,1:3))  % determinant matice D

A
B = reshape(A,2,6)  % pretvori vektor b (6 prvku) do matice 2x3
x = [0.01:0.01:10]; % vytvori vektor s prvky od -32 s inkrementem 2, -1 urcuje konec

% Funkce plot
% y = sin(x);
% plot(x,y);

size(A)            % rozmery matice A
size(x)            % rozmery vektoru (matice) x

% vyzkouset take numel,length,ndims!

B = reshape(x,25,40) % pretvori vektor x na matici 4x4
A(2,3) = 17        % zmeni prvek na pozici 2,3 na hodnotu 17
A(4,1) = 50        % zmeni prvek na pozici 4,1 na hodnotu 50
rank(B);   % hodnost B


B =A(1:3,:)
inv(B)              % inverzni matice k B

B2   = B*B;          % nasobeni matice matici (B*B)
B2   = B^2;          % umocneni matice B na 2
B2el = B.^2;         % mocneni matice 'po prvcich'
B2_  = B.*B;         % nasobeni matice 'po prvcich'

C = rand(4)         % ctvercova matice nahodnych cisel od 0 do 1
E = eye(4)          % jednotkova matice 4x4
I = ones(4)         % matice 4x4, same jednicky
Z = zeros(4)        % matice 4x4, same nuly (napr. inicializace uloh v num. mat)
D = diag([1,2,3,4,5]) % diagonalni matice s diagonalou [1,2,3,4,5]

D = 6*ones(4) + 4*rand(4) % matice nahodnych cisel od 6 do 10

A = [1 -5 6; 5 4 2; -8 9 14]
R = eig(A) % vektor vlastnich cisel matice A
 
% priradi matici R sloupcove vlastni vektory,
% matice D je diagonalni, vlastni cisla prislusna vl. vektorum
% problem vl .cisel: A*R = R*D
[R,D] = eig(A);
R
D

U = A*R - R*D

% Frobeniova norma matice U, ... = sqrt(U11^2 + U12^ + ... + U33^2),
% viz napr wikipedia
norm(U,'fro')

% mocneni matic
AA = A^5
AA = R * D^5 * inv(R)
AA = real(AA)

% ----------------------- Prirazovani prvku ------------------- %
T=['A','B','C','D','E','F','G','H',' ','!'];
ind=[8,1,6,10,9,2,1,3];
v=[T(8) T(1) T(6) T(10)];    % vektor z prvku vektoru T s indexy
w=T(ind);                    % vektor z prvku T, cely indexovy vektor ind

% ----------------------- Soustavy lin. rovnic ---------------- %
% soustava: Ax = b
A = [1 -5 6; 5 4 2; -8 9 14]
b = [1;5;6]

% zpetne lomitko - provede reseni lin rovnic 
% (pomoci ruznych technik, na zaklade velikosti a charakteru matice)
x = A\b   
%  jina varianta reseni (vetsinou vice zdlouhava...)
x = inv(A) * b


% mereni casu:
A = rand(100);   % matice soustavy 10 000 x 10 000
b = rand(100,1); % vektor prave strany
det(A)

t_start = tic;
x = A\b;
t_end   = toc(t_start)

t_start = tic;
x = inv(A)*b;
t_end   = toc(t_start)


% % -------------------- Vstup a vystup do souboru ---------------- %
A = csvread('data.csv',1,0)

 file = fopen('data_out.txt','w');
 fprintf(file,'Matice 3x3 \n');
 fprintf(file,'%6.2f %12.8f %5.8f\n',A);
 fclose(file);

 % -------------------- Numericke reseni Ax=b ------------------- %
 % Rovnici Ax=b prepiseme do tvaru: Ax + Ex -Ex = b
 % tedy x = (E-A)x + b
 % iterujeme: x(n+1) = (E-A) * x(n) + b
 % dokud neni rozdil x(n+1) - x(n) 'dostatecne maly'

 % A = [ 1 5 8 9 7;
 %       4 7 1 9 7;
 %       4 7 1 2 3;
 %       7 9 4 5 6;
 %       7 8 9 4 5]
 % 
 % E = eye(5);
 % 
 % b = [1;7;8;9;4]
 % 
 % RRR = rank(A)
 % A\b
 % 
 % 
 % err = 1;
 % errs  = [];
 % xn     = zeros(5,1);
 % xn1    = zeros(5,1);
 % i=1;
 % w = 0.0000001;
 % while(err > 1e-05)
 %     xn1 = (E-w*A)*xn + w*b;
 %     err = norm(xn1-xn,2)
 %     errs(i) = err;
 %     i++1;
 %     xn =xn1;
 % end
 % ------------------------------------------------------------ %
