% ******************* MATEMATICKÝ SEMINÁŘ č. 11 ************************
% NOVÉ DATOVÉ FORMÁTY OD VERZE 5.0 (viz online manuál USING MATLAB):
% 11.1. VÍCEROZMĚRNÁ POLE
% 11.2. BUNĚČNÁ POLE (Cell Arrays)
% 11.3. STRUKTURY
% 11.4. OBJEKTY
%
% Copyright (C) 1998 by V. Veselý (Masaryk University Brno, Czech Republic)


echo on
more on
format compact
clc
%======================================================================
% 11.1. VÍCEROZMĚRNÁ POLE (viz manuál USING MATLAB, kap. 12)
%----------------------------------------------------------------------
%% Vícerozměrné pole představuje zobecnění pojmu matice ze dvou na 
%% libovolný počet dimenzí m:
%% - metody indexování prvků a podpolí jsou přirozenou analogií k případu
%%   matic, která představuje 2-rozměrné pole,
%% - prvky polí A(i_1,i_2,...,i_m) jsou v paměti uspořádány opět lineárně
%%   tak, že nejrychleji se mění index i_1, pak i_2, atd., což odpovídá
%%   lexikografickému uspořádání dle obráceného multiindexu i_m,...,i_2,i_1.
%% - funkce 'size', 'zeros', 'ones', 'rand' a další jim podobné fungují 
%%   obdobně i pro vícerozměrná pole.
%%
%% Existují další speciální příkazy usnadňující práci s vícerozměrnými
%% poli (užijte help pro získání podrobnějších informací):
%%
%% B = repmat(A,[n_1,n_2,...,n_m]) ... replikace pole A do pole B blokového 
%%                                     rozměru n_1 x n_2 x...x n_m. 
%%
%% B = cat(d,A_1,A_2,...) ... konkatenace (zřetězení) polí téže dimenze 
%%                            A_1,A_2,... podél zvolené dimenze 1<=d.
%%
%% flipdim ... překlopení pole podél žádané dimenze (viz též analogické 
%%             příkazy 'fliplr' a 'flipud' pro matice). 
%%
%% ndgrid  ... generování polí pro vícerozměrné funkce a interpolaci.
%%
%% ndims   ... zjištění počtu dimenzí zadaného pole.   
%%                          
%% permute, ipermute ... permutace dimenzí zadaného pole.
%%
%% reshape  ... změna rozsahu dimenzí.
%%
%% shiftdim ... posunutí dimenzí.
%%
%% squeeze  ... odstranění dimenzí rozsahu 1.
%%
%% sub2ind  ... výpočet lineárního indexu z multiindexu.
%%
%% ind2sub  ... výpočet multiindexu z lineárního indexu.

keyboard;

%======================================================================
% 11.2. BUNĚČNÁ POLE (Cell Arrays) (viz manuál USING MATLAB, kap. 13)
%----------------------------------------------------------------------
%% Buněčné pole = speciální vícerozměrné pole, jehož prvky mohou být 
%%                nejen skaláry jako v 11.1., ale obecně data libovolného
%%                formátu i velikosti (i samotná buněčná pole). 
%% - Konstrukce buněčných polí dimenze 1 nebo 2 výčtem prvků se provádí
%%   analogicky jako u matic, pouze místo [] používáme složené závorky {}.
%% - PRVKY (buňky) buněčného pole, resp. podpole, se indexují rovněž
%%   obdobně jako u matice nebo vícerozměrných polí, 
%%   pouze místo () užíváme opět složených závorek {}. 
%%
%% Existují další speciální příkazy pro práci s buněčnými poli
%% (užijte help pro získání podrobnějších informací):
%%
%% cell        ... vytvoření buněčného pole.
%%
%% cell2struct ... konverze buněčného pole na strukturu (viz dále 11.3.).
%%
%% celldisp    ... výpis struktury buněčného pole.
%% 
%% cellplot    ... grafické znázornění struktury buněčného pole. 
%%
%% num2cell    ... konverze matice na buněčné pole.

keyboard;    

%======================================================================
% 11.3. STRUKTURY (viz manuál USING MATLAB, kap. 13)
%----------------------------------------------------------------------
%% Struktura = vícepoložkový datový formát, jehož jednotlivé pojmenované
%%             položky mohou obsahovat data libovolného formátu.
%%
%% Konstruují se zpravidla přímými přiřazovacími příkazy tvaru: 
%% jméno_struktury.jméno_položky = hodnota.
%% Lze vytvářet i matice (resp. obecně vícerozměrná pole) struktur.
%%
%% Existují opět speciální příkazy pro práci se strukturami
%% (užijte help pro získání podrobnějších informací):
%%
%% fieldnames  ... jména položek struktury.
%%
%% getfield    ... získání hodnoty položky ve struktuře.
%%
%% rmfield     ... odstranění položky ze struktury.
%%
%% setfield    ... uložení hodnoty do položky ve struktuře.
%%
%% struct      ... vytvoření struktury.
%%
%% struct2cell ... konverze struktury na buněčné pole.
 
keyboard;    

%======================================================================
% 11.3. OBJEKTY (viz manuál USING MATLAB, kap. 14)
%----------------------------------------------------------------------
%% Objekt = typovaná struktura umožňující uživateli definovat jeho vlastní
%%          formát dát včetně metod (operací) pro práci s nimi (metody jsou
%%          svázány s datovou strukturou).
%%          Je užita metodika objektového programování, umožňující zavést
%%          vztahy dědičnosti, změnit funkci existujících operátorů
%%          při jejich použití na objekty daného typu (tzv. overloading), atd.
%%
%% Na rozdíl od běžných struktur jsou položky objektů skryté a přístup
%% k nim probíhá pouze prostřednictvím metod, což jsou m-soubory přiřazené
%% k dané typové třídě objektů (class).
%% Každá třída má přiřazen adresář téhož jména uvozený znakem @, do něhož
%% se ukládají metody této třídy jakožto m-soubory.
%% Funkce (m-soubor) pojmenovaná stejně jako třída funguje jako tzv.
%% konstruktor objektů při jeho vytváření.
%% Přitom overloading operátorů se realizuje pomocí m-funkcí, jejichž jména 
%% jsou pevně rezervovaná pro jednotlivé operátory. Například operátoru +
%% odpovídá funkce 'plus', kdy pro vyhodnocení výrazů a+b (a,b jsou objekty
%% daně třídy) bude automaticky volaná funkce plus(a,b).
%%  
%% Existují opět speciální příkazy pro práci s objekty
%% (užijte help pro získání podrobnějších informací):
%% 
%% class ... vytvoření objektů žádané třídy, resp. zjištění třídy 
%%           existujícího objektu. 
%%
%% isa   ... logická funkce pro zjištění, zda nějaký objekt je z určité 
%%           třídy.
%%
%% inferiorto ... třída, jejíž konstruktor obsahuje tento příkaz
%%                bude mít nižší prioritu než třída uvedená jako
%%                argument tohoto příkazu.
%%
%% superiorto ... třída, jejíž konstruktor obsahuje tento příkaz
%%                bude mít vyšší prioritu než třída uvedená jako
%%                argument tohoto příkazu.
%%
%% Priorita se týká operací s objekty těchto dvou (různých) tříd. 
%% Pro provedení operace se použije funkce patřící do třídy s vyšší 
%% prioritou.
%% Pokud priorita nebyla specifikována, použije se funkce ze třídy, 
%% do níž náleží prvý argument.

keyboard;    

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