echo on
more on
format compact
clc

% 1.1. ZAKLADNI INFORAMACE O SYSTEMU MATLAB
%      SPUSTENI: matlab (nejlepe pod X-windows)             %#
%                kliknutim na ikonu MATLABu (pod Windows)  %#
%      UKONCENI: exit | quit
% info   ... firemni informace
% hostid ... identifikacni cislo hostitelskeho serveru
            % klavesnicovy rezim pro procviceni prikazu:
keyboard;   % UKONCETE VYPSANIM prikazu return
clc
%----------------------------------------------------------------------
% demo   ... demonstracni ukazky
keyboard
clc
%----------------------------------------------------------------------
% doc | helpdesk ... hypertextovy manual k MATLABu    %#
% helpwin        ... okenkovy manual k MATLABu        %# 
% help           ... vypis toolboxu pripojenych dle MATLABPATH
%                    toolbox=tematicky zamerena knihovna prikazu (m-souboru)
% help toolbox   ... seznam prikazu v toolboxu podle souboru Contents.m
%                    (lze zadat i adresarovou.cestou)
% help prikaz    ... napoveda k prikazu (m-soubor)
% help help      ... napoveda k prikazu help
% help operator  ... napoveda k maticovemu operatoru, napr. help * nebo    %#
%                    lepe help mtimes                                      %#
% Pod Windows je ucelne pouzit menu Help                                   %#
keyboard
clc
%----------------------------------------------------------------------
% what          ... vypis seznamu souboru .m, .mex a .mat v beznem adresari
% what toolbox  ... vypis seznamu souboru .m, .mex a .mat v toolboxu
% type prikaz   ... vypis m-souboru tohoto prikazu
%                   (textovy soubor s priponou .m)
% type soubor   ... vypis libovolneho textoveho souboru (implic. pripona .m)
keyboard
clc
%----------------------------------------------------------------------
% more on | more off | more ... zapne | vypne | prepne  strankovani na displej
% more(n)    ... nastavi pocet radku stranky na n
% format typ ... nastavi format vystupu na displej  
help format
% pod WINDOWS lze pouzit menu File>Preferences>General               %#
keyboard
clc
%----------------------------------------------------------------------
% ver              ... informace o instalovane verzi MATLABu
% ver toolbox      ... informace o instalovane verzi toolboxu
%                      (viz prislusny soubor Contents.m)
% whatsnew         ... aktualni informace o MATLABu
% whatsnew toolbox ... aktualni novinky o toolboxu
% Readme           ... co je noveho v posledni verzi MATLABu        %#
keyboard;
clc
%----------------------------------------------------------------------
koradr=matlabroot,      % korenovy adresar MATLABu          %#
pause;
eval(['type ',koradr,'/toolbox/matlab/elmat/Contents.m'])   %#   
pause;
eval(['type ',koradr,'/toolbox/matlab/lang/Contents.m'])    %#   
keyboard
clc
%----------------------------------------------------------------------
% lookfor heslo ... vyhleda vsechny m-soubory, jejichz 1.radek napovedy
%                   obsahuje uvedene heslo
lookfor inverse
keyboard
clc
%----------------------------------------------------------------------
% which prikaz  ... vypise celou cestu do toolboxu obsahujiciho prikaz
which poly
which inv
keyboard
clc
%======================================================================
% 1.2. PRIKAZOVA SYNTAXE SYSTEMU MATLAB

% * Prikazova radka:
%   prikaz_1, prikaz_2, prikaz_3, ... ,prikaz_n[,] % Komentarovy text
%           ;         ;         ;     ;         ;
%   Prikazy se postupne provadi zleva doprava.
%   Oddelovac za prikazem: carka    (,) => vypis vystupu prikazu na obrazovku
%                          strednik (;) => vypis vystupu je potlacen

% * Dlouhy prikaz muze pokracovat na dalsim radku na rozhrani syntakticke
%   jednotky, kde vlozime tri tecky (...) - v interaktivnim rezimu se mohou
%   vynechat.    % tecky nelze vynechat! %#
%
% * Typy prikazu: !prikaz OS
%                 v=maticovy vyraz
%                 [v1,v2,...]=jmeno_funkce(p1,p2,...)
%                 jmeno_davky
%
%   jmeno_funkce (tzv. funkcni m-soubor) i jmeno_davky (tzv. script m-soubor)
%   jsou textove soubory s povinnou priponou .m.
%   Funkce na rozdil od davky umoznuji predavat vstupni a vystupni parametry.
%   Vynechame-li levou stranu prirazovaciho prikazu (vcetne =), pak
%   vysledek v, resp. v1 se automaticky ulozi do promenne ans (answer).
%
% * Vystupem muze byt i textova matice. Jeji prvky se chapou jako ascii kody
%   odpovidajcich znaku.
%   Zejmena textovy retezec 'nejaky text' je radkovy vektor obsahujici kody
%   znaku uvedenych mezi ohranicujicimi apostrofy.
%   Prikladem takovych vystupu mohou slouzit nektere prikazy z nasledujici
%   casti.
%
% * Jestlize chybi leva strana a vsechny vstupni parametry p1,p2,... jsou
%   textove retezce, je mozno funkci volat v tzv. prikazove forme, kdy
%   zavorky vynechame a parametry oddelujeme mezerami:
%   jmeno_funkce p1 p2 ...,
%   pricemz apostrofy v zapisu p1, p2, ... lze vynechat, pokud retezce
%   neobsahuji mezeru, carku, strednik ani levou zavorku.
pause;
clc

% =====================================================================
% 2.1 ZAKLADY TVORBY MATIC
%----------------------------------------------------------------------
% Jmeno matice=posloupnost pismen a cislic (vcetne znaku podtrh) zacinajici
% pismenem.
% Matice se deklaruji automaticky pri prirazeni
% Typy matic:
% - ciselna - realna
%           - komplexni
% - logicka
% - textova

%----------------------------------------------------------------------
% Nektera jmena jsou rezervovana pro preddefinovane matice:
% viz help matlab\elmat                                                        %#
  format long
  i,j   % imaginarni jednotka (POZOR NA PREPSANI!)
  pi    % Ludolfovo cislo pi 
  eps   % strojova presnost realnych cisel v pohyblive radove carce
        % definovana jako rozdil mezi 1 a nejblizsim vetsim cislem
  realmax % maximalni cislo v pohyblive radove carce
  realmin % minimalni cislo v pohyblive radove carce
  ans   % promenna answer pro ukladani implicitnich vysledku
%  Tyto matice jsou t.zv vestavene funkce. Sledujte nasledujici ukazku :        %#            
  format short
eps                                                                             %# 
eps=9                                                                           %#
% vytvori se promenna eps a vestavena funkce eps se stane nepristupnou          %#
clear eps       % promennou eps zrusim                                          %#
eps             % funkce eps je znovu pristupna                                 %#
pause;         
%----------------------------------------------------------------------
   Inf  % +nekonecno
   1/0
  -1/0
   NaN  % neurcita hodnota (Not-a-Number)
   0/0
keyboard;
clc;
%----------------------------------------------------------------------
  v=computer % jmeno pocitace, na nemz bezi MATLAB
pause;
%----------------------------------------------------------------------
% nargin  % pocet vstupnich parametru skutecne predanych pri volani funkce       %#
% nargout % pocet vystupnich parametru skutecne pozadovanych pri volani funkce   %#
          % Uplatni se jen v tele funkce (funkcniho m-souboru)                   %#
help nargin                                                                      %#
help nargout                                                                     %# 
% Dalsi funkce pro praci s argumenty funci, viz help matlab\lang                 %#
keyboard;
clc
%======================================================================
% 2.2. PRIME VYTVARENI MATIC VYCTEM PRVKU MEZI [  ]:
%----------------------------------------------------------------------
%    - prvky v radku oddelujeme mezerou nebo carkou (,)
%    - radky oddelujeme strednikem (;)
% prazdna matice:
   E=[];             %# 
%# Pri vypisu prazdne matice pod WINDOWS dojde k preruseni vypisu na obrazovku,
%# tedy jako by se provedlo echo off 
%# Proto si matici E prohlednete nyni. Nez napisete return, uvedte echo on !
  keyboard;
pause;
%----------------------------------------------------------------------
% realne skalary:
  r1=3, r2=3., r3=.3, r4=3.14, r5=0.314e1, r6=0.314E1,
pause;
%----------------------------------------------------------------------
% komplexni skalar:
  c=3.14+2*i,
keyboard;
clc
%----------------------------------------------------------------------
% matice realna:
  R1=[1 r1 r2+r3;2,3 4], R2=[1,r1,r2+r3;2 3 4],
%----------------------------------------------------------------------
pause;
  A = [1 2;3 4], B=[5 6 7;8 9 10], C=[11 12 13 14,...
      15;16 17 18 19 20]
pause;
%----------------------------------------------------------------------
% matice komplexni:
 c1=[1+j,2-i,3], c2=[c,1 2 3 4]
keyboard;
clc
%----------------------------------------------------------------------
% Prvky matic mohou byt maticove bloky i vypoctene maticovym vyrazem:
  D1 = [A,B;C], D2=[A,B+R1;C]
pause;
%----------------------------------------------------------------------
% Rovnez lze vkladat i pseudohodnoty Inf, -Inf nebo NaN:
  D3 = [1, -Inf, 3, Inf+3, NaN-1]
keyboard
clc
%----------------------------------------------------------------------
% matice textova:
  T1=['1.radek';'2.radek'], T2=[49 '.radek';'2.radek']
%----------------------------------------------------------------------
pause;
   d='Dobry den, pratele'           %#
pause;
%----------------------------------------------------------------------
% Prevod na ciselnou matici:
  abs(d)
  RT1=abs(T1)
% nebo noveji (doporucuje se):
  double(T1)
pause;
% a zpet:
  TRT1=setstr(RT1)
% nebo noveji (doporucuje se):
  char(RT1) 
keyboard
clc
%======================================================================
% 2.3. ZISKANI INFORMACI O DOSUD ALOKOVANYCH MATICICH
%----------------------------------------------------------------------
  who;    % jen seznam
pause;
  whos;   % podrobny vypis
pause;
%----------------------------------------------------------------------
% Rozmery matice:
  [m,n] = size(B)    % Rozmery matice: m radku a n sloupcu
      m = size(B,1)  % jen pocet radku
      n = size(B,2)  % jen pocet sloupcu
      l = length(B)  % =max(m,n), tj. u vektoru jeho delka
keyboard
clc
%----------------------------------------------------------------------
% Vypis matice na displej ve forme textove tabulky:
  disp(A) 
  disp(c1) 
  disp(T1) 
  disp('primy vypis textu')
keyboard
clc
%======================================================================
% 2.4. GENEROVANI MATIC S JEDNODUCHOU STRUKTUROU
%----------------------------------------------------------------------
% Ekvidistantni radkovy vektor  
% r=m:n   = [m,m+1,m+2 ,...,n]
% r=m:k:n = [m,m+k,m+2k,...,n]
  10:15
  10:-1:5
  3.4:2:10
   a=6:5;    % a je prazna matice          %#
%# Pri vypisu prazdne matice pod WINDOWS dojde k preruseni vypisu na obrazovku,
%# tedy jako by se provedlo echo off 
%# Proto si matici a prohlednete nyni. Nez napisete return, uvedte echo on !
  keyboard;
pause;
%----------------------------------------------------------------------
% r=linspace(a,b,N) ... N-bodove ekvidistantni deleni intervalu [a,b]
% r=linspace(a,b) = linspace(a,b,100)
  a=1; b=5; N=9; 
  linspace(a,b,N)
  a:(b-a)/(N-1):b
  linspace(b,a,N)
pause; 
%----------------------------------------------------------------------
% r=logspace(a,b,N) ... N-bodove logaritmicky ekvidistantni deleni 
%                       intervalu [10^a,10^b]   pro b~=pi            %#
%                       intervalu [10^a,pi]     pro b==pi            %# 
% r=logspace(a,b) = logspace(a,b,50)
  a=1; b=5; N=5; 
  logspace(a,b,N)
  10.^(a:(b-a)/(N-1):b)
  logspace(b,a,N)
pause;
  logspace(a,pi,N)
  logspace(a,log10(pi),N)
  logspace(a-1,pi,N)
  logspace(a-1,log10(pi),N)
keyboard;
clc;
%----------------------------------------------------------------------
% G=zeros ... nulova matice 
% G=ones  ... matice ze samych jednicek
% G=eye   ... jednotkova matice
% G=rand  ... matice pseudonahodnych cisel rovnomerne rozlozenymi 
%             v intervalu (0,1)
% G=randn ... matice pseudonahodnych cisel s normalnim rozlozenim N(0,1), tj.
%             nulovou stredni hodnotou a jednotkovou smerodatnou odchylkou
% Rozmer generovane matice je urcen parametry funkce, napr. pro zeros:
% G=zeros(n)      ... ctvercova matice n x n
% G=zeros(m,n)    ...
% G=zeros([m,n])  ... obdelnikova matice m x n, specielne
% G=zeros(size(A))... matice stejneho rozmeru jako A
  G=zeros(4)
  G=ones(2,5)
  G=eye([2,5])
pause
  G=rand(size(G))
  G=randn(size(G))
% Generovani nahodne matice s rozlozenim N(5,10)
  5+10*randn(2,5) 
pause
% U rand a randn lze zadavat jeste specialni parametry ovlivnujici zpusob
% generovani - viz help rand a help randn.
% V kombinaci rand s prikazem round pro zaokrouhlovani, je mozno pohodlne 
% generovat nahodnou celociselnou matici s cisly v zadanem intervalu,
% napr. matici 10 x 10 s cisly v intervalu [-3,12]: 
  round(15*rand(10))-3
keyboard; 
clc;  
%----------------------------------------------------------------------
% Diagonalni matice
% D=diag(d,p) ... diagonalni matice s vektorem d na vedlejsi diagonale
%               na p-te pozici relativne k hlavni diagonale
%               p=0 ... hlavni diagonala
%               p>0 ... p-ta pozice nad hlavni diagonalou
%               p<0 ..  p-ta pozice pod hlavni diagonalou
% D=diag(d)=diag(d,0) ... diagonalni matice s vektorem d v hlavni diagonale
% Podobne z existujici matice D lze extrahovat jeji diagonalu do sloupcoveho
% vektoru s:
% s=diag(D,p)           
% s=diag(D)=diag(D,0)
  D=diag(1:3)
  diag(D)
pause
  D=diag(1:3,1)
  diag(D,1)
pause;
  D=diag(1:3,-1)
  diag(D,-1)  
pause;
% Jednotkova matice 5 x 5 generovana pomoci diag:
  diag(ones(1,5))
%======================================================================
% 2.5. UDRZBA MATIC
%----------------------------------------------------------------------
% Ukladani matic v binarni forme a zpetne nacteni:
  save allsaved     % ulozi vsechny matice do souboru allsaved.mat
  save              % ulozi do implicitniho souboru matlab.mat
  clear             % odstrani z pameti vsechny matice
  who
pause
%----------------------------------------------------------------------
  load allsaved     % nacte zpet vsechny matice ze souboru allsaved.mat
  who
pause
%----------------------------------------------------------------------
  clear
  load              % nacte zpet z implicitniho souboru matlab.mat
  who
keyboard
clc
%----------------------------------------------------------------------
  save absaved A B  % ulozi jen matice A,B do souboru absaved.mat
  clear A B         % odstrani z pameti jen matice A,B
  who
pause
%----------------------------------------------------------------------
  load absaved      % nacte zpet vsechny matice ze souboru absaved.mat
  who
keyboard
clc
%----------------------------------------------------------------------
% Ukladani matic ve znakove forme a zpetne nacteni:
  save bsaved.txt B -ascii  % ulozi jen matici B do souboru bsaved.txt
  clear B                   % odstrani z pameti jen matici B
  who
pause
  type bsaved.txt
pause
%----------------------------------------------------------------------
  load bsaved.txt -ascii % nacte zpet matici ze souboru bsaved.txt
                         % do promenne se jmenem bsaved (nikoliv B)
% nebo
% load bsaved.txt        % pripona souboru neni .mat, takze soubor
                         % povazuje za textovy
  who
keyboard
clc
%----------------------------------------------------------------------
% Soubory s ulozenymi maticemi smazeme
  delete allsaved.mat
  delete absaved.mat
  delete matlab.mat
  delete bsaved.txt
% Existuji i dalsi moznosti zadavani parametru pro save, clear a load.
% Rovnez existuji dalsi prikazy pro dokonalejsi radkovy nebo formatovany
% vstup a vystup - viz help:
  help save
pause;
%----------------------------------------------------------------------
  help load
pause;
%----------------------------------------------------------------------
  help clear
pause;
%----------------------------------------------------------------------
% Pri opakovanem ruseni a vytvareni matic behem prace s MATLABem
% dochazi k fragmentaci pameti - volne diry, ktere nejsou dost velke
% pro alokaci dalsich vetsich matic (chybove hlaseni OUT OF MEMORY).
% Fragmentaci lze odstranit prikazem pack, ktery diry spoji do
% souvisleho volneho bloku, coz dava sanci pro dalsi alokace:
  help pack
keyboard
clc
%======================================================================
% 3.1 SUBMATICE A INDEXOVANI
%----------------------------------------------------------------------
% v(r)   ... subvektor vektoru v urceny vcetne poradi vektorem indexu r
% A(r,s) ... submatice v A
%            r=vektor radkovych indexu, s=vektor sloupcovych indexu
%            za r nebo s lze dosadit take indikatorovy vektor z 0 a 1
% A(r,:) ... radky r a vsechny sloupce
% A(:,s) ... vsechny radky a sloupce s
% A(:,:)=A
  A=(1:10)'*(1:8), %  A(r,s)=r*s
  S=A([1,3,5,7],[3,7,8])
pause;
% nebo take
  S=A(1:2:7,[3,7,8])
pause;
% nebo take
  S=A(logical([1 0 1 0 1 0 1 0 0 0]),logical([0 0 1 0 0 0 1 1]))      %#
% specialne r nebo s muze byt skalar:
  A(3,7),          %  jeden prvek matice A ve 3.radku a 7.sloupci
  r4=A(4,:)        %  4.radek   A
  s6=A(:,6)        %  6.sloupec A
  Aperm=A(10:-1:1,:) % Radkove permutovana matice (radky v obracenem poradi)
keyboard;
clc
%----------------------------------------------------------------------
% A(:)   ... sloupce matice A naskladane porade pod sebe do sl. vektoru
%            (matematicka operace obvykle znacena jako vec A)
%            odpovida ulozeni prvku matice v pameti
% A(r)   ... totez jako: v=A(:); v(r)
%            A rad./sl. vektor => vyber rad./sl. subvektoru na pozicich r
% A=reshape(v,m,n)
%   reshape(v,[m,n]) ... opak k A(:) - z rad. nebo sl. vektoru v delky m*n
%                        vytvori matici A typu m x n, pro niz v=A(:)
  u=1:30
  v=reshape(u,length(u),1)  % transponuje radkovy vektor u na sloupcovy
pause;
  u(1:2:length(u))          % subvektor s lichymi indexy
  u(2:2:length(u))          % subvektor se sudymi indexy
pause;
  A1=reshape(v,2,15)
  A1(:)
pause;
  A2=reshape(v,[3,10])
  A2=reshape(v,size(A2))
  A2(4)
pause;
  A=reshape(u,5,6)
  A([4,8])
keyboard;
clc;
%======================================================================
% 3.2 SUBMATICE NA LEVE STRANE PRIRAZOVACIHO PRIKAZU
%----------------------------------------------------------------------
% v(r)=b   ... prepis vektoru v vektorem b na pozicich indexu r 
% A(r,s)=B ... Submatice A na pozicich urcenych vektory indexu r a s
%              se prepise prvky matice B (B je typu length(r) x length(s))
%              Jestlize nektere pozice prvku jdou mimo stavajici rozmer
%              matice A, pak A se automaticky zvetsi na potrebnou
%              velikost a doplni nulami.
% Analogicky
% A(r,:)=B ... prepis na radcich r a ve vsech sloupcich
%              B=[] => odstrani radky r
% A(:,s)=B ... prepis ve vsech radcich a ve sloupcich s
%              B=[] => odstrani sloupce s
% A(r)=b   ... prepis prvku na libovolnych pozicich v usporadani A(:)
%              A(r)=b, b neprazdna <=> v=A(:); v(r)=b; A=reshape(v,size(A));
%              A(r)=[]             <=> v=A(:); v(r)=[]; A=v
  A
  A(5,:)=[]    % Smazeme 5.radek
  A(:,6)=[]    % a 6.sloupec
pause;
  A([1,3],[2,3])=zeros(2)
% nebo take jednoduseji lze uvest na prave strane jen skalar 0:
  A([1,3],[2,3])=0
pause;
  A(5,6)=-1
pause;
  A(logical([1 0 1 0 0]),logical([0 1 1 0 0 0]))=-ones(2)       %#
% specialne r nebo s muze byt skalar:
  A(3,5)=1000,             %  prepis prvku matice A ve 3.radku a 5.sloupci
pause;
  A(4,:)=100*ones(1,size(A,2)) %  prepis 4.radku A
pause;
  A(:,6)=100                   %  prepis 6.sloupce A jednoduseji skalarem
pause;
clc;
%----------------------------------------------------------------------
% Priklad na prepis prvku na libovolnych pozicich
% Chceme obratit znamenka prvku A(2,1) a A(1,2):
  A=reshape(1:6,2,3)
  P(2,1)=1, P(1,2)=1, P(1,3)=0
% Predchozi 3 prikazy trikrat realokuji matici na vetsi rozmer,
% proto lepsi postup je:
  P=zeros(size(A)); P(2,1)=1, P(1,2)=1, P=logical(P)                  %#
  A(P(:))=-A(P(:))      % Obraceni znamenka prvku A(2,1) a A(1,2)
keyboard;
clc

%----------------------------------------------------------------------
%================================= KONEC ==============================
more off
echo off

