\section{Charakteristika systému MATLAB}                \label{sec:2}

\subsection{Základní fakta}                             \label{ssec:2.1}

Název systému je odvozen z~angličtiny: MATLAB=MATrix LABoratory.
Systém produkuje americká společnost {\em MathWorks,~Inc.\/}
(\url{http://www.mathworks.com}) a jejím výhradním
distributorem pro Českou republiku je pražská firma {\em Humusoft,~s.r.o.\/}
(\url{http://www.humusoft.cz}).
Systém MATLAB představuje maticově orientované výpočetní prostředí s~vlastním
programovacím jazykem vhodným pro efektivní implementaci, provádění a
vizualizaci numerických výpočtů vyžadujících náročný aparát z~nejrůznějších
oblastí matematiky.
Je dostupný na všech běžných platformách (WINDOWS, LINUX, UNIX, atd.) při
zachování takřka stoprocentní přenositelnosti vytvořených programů a datových
souborů.

\subsection{Programovací jazyk}                             \label{ssec:2.2}

\begin{itemize}
  \item Programovací jazyk vyšší generace umožňuje automatické deklarování a
  přetypování používaných proměnných.
  Podporované datové typy jsou tyto:
  \begin{description}
    \item[Základním datovým typem] je {\em matice\/} nebo obecnější
     {\em vícerozměrné pole \linebreak
     (\mbox{N-D array})\/}, jehož prvky mohou být jakékoliv reálné
     nebo komplexní skalární veličiny.
    \item[Odvozené datové typy] jsou {\em buněčná pole (cell arrays)\/} svojí
     strukturou podobné základnímu datovému typu s~tím rozdílem, že za prvky
     mohou mít proměnné libovolného typu (tedy nejen skalární veličiny), dále
     {\em struktury\/} a {\em objekty\/} s~položkami libovolného přípustného typu
     umožňující využívat techniky strukturovaného a objektového programování běžné
     v~klasických programovacích jazycích jakým je například C++.
  \end{description}

  \item Na rozdíl od {\em skalárního programování\/} známého z~klasických
  programovacích jazyků jako FORTRAN, PASCAL nebo C++ je pro MATLAB typické
  {\em vektorově-maticové programování\/}, neboť základními proměnnými jsou právě
  vektory a matice.
  Syntaxe jazyka je pak blízká matematickým zápisům používaným v~lineární
  algebře, což usnadňuje přepis i komplikovaných matematických výrazů při
  zachování srozumitelnosti.
  Efektivní využívání všech konstrukcí jazyka tak vyžaduje opustit zaběhaný
  {\em skalární\/} přístup, neboli již ve fázi návrhu algoritmu je třeba provést
  tzv.~{\em vektorizaci\/} řešeného problému, tj. již při jeho formulaci je třeba
  se snažit v~maximálně možné míře využít formalizmu maticové algebry.
  Vynaložená námaha se vrátí v~přehlednosti, spolehlivosti a rychlosti
  výsledného kódu.
\end{itemize}

\subsection{M-soubory}                    \label{ssec:2.3}

Základními programovými jednotkami jsou buď dávkové (skripty) nebo funkční
procedury zapsané v~jazyce MATLABu.
Jsou to soubory s~příponou {\tt .m}, neboli tzv. {\tt M}{\bf-soubory}, které
lze připravit jako otevřený text libovolným textovým editorem.
Systém MATLAB má pro tento účel vlastní editor, který je součástí instalace
a nabízí další specifické funkce. Spustí se příkazem {\tt edit}.
Mimo jiné automaticky barevně rozlišuje klíčová slova jazyka MATLAB a
upozorňuje tak na možné překlepy již ve fázi psaní programu,
v~režimu ladění (debugging) pak nabízí prostředky pro krokování běžícího programu
a sledovaní mezivýsledků v~lokálních proměnných.

\begin{itemize}
  \item
    Program uložený v~dávkovém M-souboru se spustí v~příkazovém okně MATLABu
    jednoduše zadáním povelu, jehož jméno je totožné se základním jménem
    M-souboru (bez přípony .m).
    Všechny proměnné použité programem jsou sdíleny s~příkazovým oknem a tedy
    jsou z~něj interaktivně přístupné.
  \item
    Programy funkčního M-souboru vyžadují speciální deklaraci vstupních a
    výstupních parametrů v~jeho záhlaví. Funkční program se opět spouští obdobně
    jako u~dávek s~tím rozdílem, že povel je doplněn o~seznamy skutečně
    přenášených vstupních a výstupních proměnných, jejichž hodnoty korespondují
    v~daném pořadí s~příslušnými vstupními a výstupními parametry.
    Ostatní proměnné používané funkční procedurou mají lokální charakter a
    nejsou tedy běžně přístupné v~příkazovém okně.
    U~tzv.~ {\em globálních\/} proměnných speciálně takto deklarovaných toto
    omezení neplatí.
  \item
    MATLAB je rychlý interpret. Programy v~M-souborech není tedy třeba předem
    kompilovat. Jsou přímo prováděny (interpretovány) po spuštění ve
    tvaru připraveném editorem.
    Interpretace je velmi efektivní, neboť zahrnuje skrytou automatickou
    předkompilaci, která se provádí jen jednou při prvním spuštění.
    Opakovaná spouštění pak užívají předkompilovaný kód uložený ve vnitřní paměti
    a běží proto výrazně rychleji.
    Tento předkompilovaný kód lze z~paměti odstranit pomocí příkazu
    {\tt clear}.
    Užívá se v~případech, kdy potřebujeme modifikovat dříve spuštěný M-soubor
    uložený mimo aktuální adresář.
\end{itemize}

\subsection{Vestavěné příkazy a MEX-soubory}            \label{ssec:2.4}

Většina příkazů jazyka MATLAB je realizována pomocí M-souborů.
Použité algoritmy jsou tak otevřeny ke studiu i modifikaci uživatelem.
Výjimkou jsou jen některé {\em vestavěné (built-in)\/} příkazy jádra systému,
které jsou jeho plně kompilovanou součástí s~cílem maximalizovat výkon celého
systému nebo některých jeho funkcí vyžadujících vysokou výpočetní rychlost.

Uživatel MATLABu může užít externí kompilátor jazyka C nebo FORTRAN
k~tvorbě vlastních programových modulů, které skýtají obdobné možnosti jako
vestavěné příkazy.
Představují tak alternativu k~M-souborům v~případech
náročných na výpočetní rychlost.
Takto vytvořené binární soubory se nazývají {\tt MEX-soubory}.
Pod operačním systémem Windows tuto roli přebírají soubory s~příponou
{\tt .dll} (Dynamically Linked Library).
MEX-soubor vytvořený pod jednou platformou (operačním systémem) není ale přímo
přenositelný. Na jiné platformě je tak třeba příslušný modul znovu zkompilovat.

Systém nabízí i možnost využít MATLAB jako výpočetní
stroj pro samostatný a souběžně spuštěný program zkompilovaný z~jazyka
C nebo FORTRAN.
Takový program může prostřednictvím speciálního rozhraní využívat libovolné
funkce MATLABu.

\subsection{Specializované knihovny funkcí}             \label{ssec:2.5}

Tématicky zaměřené knihovny M-souborů (a případně i MEX-souborů) soustředěné
v~jednom adresáři jsou v~terminologii MATLABu nazývány {\em toolboxy\/}.
V~současné době existuje široká nabídka nejrůznějších specializovaných toolboxů
ať již volně ke stažení na internetu nebo komerčních
(firemních od {\em MathWorks\/} nebo od jiných subjektů).
Systémové firemní toolboxy jsou integrální součástí základního systému.
Pro větší přehlednost třídí dostupné funkce do příbuzných tematických skupin.
Zvláštní pozornost zaslouží následující tři volitelné firemní toolboxy:
\begin{itemize}
  \item {\em Symbolický toolbox (Extended Symbolic Math Toolbox)\/}, který
    poskytuje rozhraní k~jádru známého systému MAPLE zmíněnému již v~kapitole
    \ref{sec:1}.
    Jádro systému MAPLE je přímo integrální součástí toolboxu a neinstaluje se
    tedy odděleně od MATLABu.
    MAPLE je na rozdíl od MATLABu orientován na symbolické výpočty a výpočty
s~vysokou přesností. Naopak silnou stránkou  MATLABu je široká nabídka
    numericky stabilních výpočetních algoritmů z~nejrůznějších oblastí.
    Symbolický toolbox propojuje obě prostředí a umožňuje využít předností
    každého z~nich. Navíc symbolické výrazy mohou vystupovat přímo jako prvky
v~maticích, mohou být manipulovány při symbolicky prováděných maticových
    operacích a nakonec jednoduše numericky vyhodnoceny po dosazení konkrétních
    hodnot za symbolické proměnné.
  \item {\em Statistický toolbox\/} nabízející základní funkce potřebné při
    modelování a výpočtech ve statistice. Namátkou vyjmenujme některé z~nich.
    Pro většinu běžných rozložení jsou k~dispozici funkce pro výpočet hustoty,
    distribuční funkce a funkce k~ní inverzní (výpočet kvantilů), odhad
    parametrů rozdělení z~histogramu,
    generátory pseudonáhodných čísel, funkce popisné statistiky, lineární
    a nelineární modely a mnoho dalších.
  \item {\em Optimalizační toolbox\/} zahrnující běžné techniky lineárního i
    nelineárního programování.
\end{itemize}

\subsection{Grafický subsystém}                         \label{ssec:2.6}

Výborně navržený grafický subsystém nabízí funkce z~těchto dvou hlavních
oblastí:
\begin{itemize}
  \item
    Funkce pro kreslení 2-D i 3-D grafů a
    řadu dalších nástrojů pro názornou vizualizaci dat.
    Vyznačuje se vysokou flexibilitou (vlastnosti grafických objektů lze měnit
    nastavováním velkého množství řídících parametrů) při zachování jednoduchosti a
    intuitivnosti ovládání (většina parametrů má nastaveny implicitní hodnoty).
  \item
    Nástroje pro interaktivní návrh uživatelského rozhraní (GUI=Graphical User Interface)
    umožňují vytvářet pro koncové uživatele aplikace ovládané pomocí menu a
    dalších běžných grafických ovládacích prvků
    (tlačítka, seznamy, zatrhávací položky aj.).
    Spouští se příkazem {\tt guide}.
    Tvůrce aplikace se tak může vyhnout příkazovému režimu, který bývá pro většinu
    koncových uživatelů nevhodný.
\end{itemize}

\subsection{Kompilace z~MATLABu do jazyka C}       \label{ssec:2.7}

Kompilátor MATLAB $\longrightarrow$ C je nadstandardní výbava systému
umožňující automatický převod programů zapsaných v~jazyce MATLABu do jazyka C.
Po převodu je možno takto získaný zdrojový C kód samostatně přeložit vhodným
kompilátorem jazyka C a sestavit pomocí knihoven MATLABu dodaných speciálně
pro tento účel.
Obdržíme tak aplikaci (obvykle spustitelný soubor .EXE), který pak lze užívat
či dále distribuovat ke koncovým uživatelům zcela nezávisle na prostředí
systému MATLAB.
Pořízení kompilátoru je dosti nákladné a vyplatí se
proto pouze větším softwarovým firmám, kterým umožní výrazně redukovat
náklady na vývoj jejich vlastních aplikací.
Přímý vývoj a testování takových aplikací v~jazyce C totiž vyžaduje
několikanásobně větší nároky na čas a lidské zdroje, než v~prostředí MATLABu.

\subsection{Spuštění a ukončení MATLABu}                \label{ssec:2.8}


MATLAB spustíme pod operačním systémem provedením příkazu {\tt matlab.exe},
který se nachází v~podadresáři {\tt bin} kořenového adresáře
instalovaného MATLABu.
Pod operačním systémem WINDOWS je spuštění možné též prostřednictvím nabídky
START a nebo kliknutím na vytvořeného zástupce MATLABu na pracovní ploše.
Po spuštění se objeví {\em příkazové okno\/}, v~němž symbol \ {\small >>}\ \
(angl.~{\em prompt\/}) signalizuje připravenost systému přijímat příkazy.

\noindent
Práci MATLABu ukončíme příkazem {\tt exit} nebo {\tt quit}.

\subsection{Online nápověda, manuály a učebnice}        \label{ssec:2.9}

Online nápověda je nápomocná uživateli přímo během práce v~příkazovém okně.
Nápověda pracuje strukturovaně v~několika úrovních podrobností:
\begin{itemize}
  \item příkaz {\tt help} zobrazí seznam tématických okruhů (toolboxů).

  \item příkaz {\tt help jméno\_toolboxu} vypíše seznam funkcí zvoleného
        tématického okruhu (toolboxu).

  \item příkaz {\tt help jméno\_funkce} nebo {\tt help operátor} dá podrobnou
        nápovědu k~danému konkrétnímu příkazu, resp. operátoru; zejména
        {\tt help help} vypíše nápovědu k~samotnému příkazu {\tt help}.
  \item příkaz {\tt doc} zobrazí pomocí rezidentního internetového prohlížeče
        (zpravidla {\em Netscape\/} nebo
        {\em Internet Explorer\/}) samostatné okno tzv. {\em HelpDesk\/}.
        Toto okno představuje nejpodrobnější zdroj informací o~systému MATLAB i
        všech nainstalovaných toolboxech.
        Lze v~něm dokonce nalézt všechny tištěné manuály v~elektronické podobě
        jako soubory s~příponou .PDF pro rozšířený prohlížeč {\em Acrobat Reader\/}.
        Jsou zde také přímé odkazy na domovskou stránku firmy {\em
        MathWorks\/}, kde lze nalézt například informace o~dalších nabízených
        produktech a učebnicích (viz odkaz
        \url{http://www.mathworks.com/support/books/}).
\end{itemize}

Pro samostatné studium lze samozřejmě využít i originální anglicky psané manuály
v~tištěné podobě vztahující se jak k~základnímu systému
(viz např. \cite{The92a,The92b}) tak i k~jednotlivým toolboxům, případně
některou z~učebnic nebo příruček vydávaných jinými autory v~nejrůznějších
světových nakladatelstvích.

Publikací tohoto druhu jsou i česky psaná skripta vydaná na
Masarykově univerzitě v Brně \cite{Svo01} a
na Západočeské univerzitě v Plzni \cite{Her94,Her95}.