\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}.