You are on page 1of 28

Pednka .

3 z Matlabu se Simulinkem v inenrsk praxi


Tma:
Doplkov datov struktury: dk matice, vcerozmrn matice,
bunn pole, znaky a texty, struktury.
Import a export dat
M-soubory: Skripty a funkce.
Programovn v Matlabu. Pkazy IF, ELSEIF, FOR, LOOPS, WHILE.

dk matice
Matlab disponuje dkmi maticemi, kter obsahuj mal pomr nenulovch prvk
oproti nulovm. Tato charakteristika poskytuje vhody pi ukldn matic z hlediska spory
msta, pamti a asu.
V tto kapitole se seznmme jak vytvoit dkou matici v Matlabu, a jak je pout pi
vpotech.
Funkce pro prci a tvoen dkch matic jsou umstny v SPARSFUN adresi
v Matlab toolbox adresi.

Tato vlastnost pipout pout v Matlabu:

Uloen pouze nenulovch element v matici, i s jejich umstnm


Redukuje vpoetn as pro eliminaci operace s nenulovmi elementy
Matlab pouv ti intern vektory pro uloen dk matice relnch prvk. Pohl na m x n
dkou matici s k nenulovch vstup.
Vytvoen dkch matic
Matlab netvo dnou dkou matici automaticky.

Meme konvertovat matici do dk s pouitm SPARSE funkce s jednm argumentem.


S= sparse(A)
P.

Zptn pepoet na plnou matici se provede


A = full(S)

Pm vytvoen matice
Meme rovn vytvoit dkou matici pmo.
S = sparse (i,j,s,m,n)
i
j
s
m
a

vektor dk
vektor sloupc
vektor nenulovch hodnot
skuten poet dk
skuten poet sloupc
2

Vcerozmrn matice
V tto kapitole rozebereme problematiku vcerozmrnch matic s rozmry vtmi ne
2-D. Vcerozmrn pole mohou bt numerick, znakov, bunn, nebo strukturln pole.
Vcerozmrn matice jsou vestrann uiten napklad v reprezentaci vcevarianch dat, nebo etn strnky dvourozmrnch matic.
Dvourozmrn matice

Trozmrn matice

Pkazy pro prci s tdimenzionlnmi maticemi

Ukzka pstupu k matici ve druh strnce:

Bunn pole
Bunn pole v Matlabu jsou pole ve, kterch jsou jednotliv elementy buky, obaly,
kter mohou podret dal Matlabovsk pole. Napklad jedna buka bunnho pole sm
obsahovat relnou matici, dal pole obsahuje textov string, dal vektor komplexnch sel
atd..

Zadvn bunnch pol:

nebo tak takto:

Pidme li dal prvek do matice 2 x 2 kter le mimo rozmr matice, matic se


automaticky roz o pohebnou velikost.

Znaky a texty
V tto kapitole zjistme e doplkem matlabu jsou rovn etzcov data. Vysvtlme
si jak vytvoit znakov a bunn pole z etzce. Bude zde rovn ukzno jak jednodue
pevst i upravit bn etzec, jako napklad najt nebo pemstit, ppadn zkonvertovat
etzec do selnho formtu.
Funkce pro prci s etzci jsou uloeny v adresi STRFUN v Matlab toolboxu.

V MAtlabu je termn string (etzec) chpn jako pole znak. Matlab si intern ukld
tyto znaky pod selnm oznaenm. Tak napklad
name = Jozef Novk;
Vytvo 1 13 znak pole naznan name.

Pevod mezi znaky a selnmi hodnotami


Pomoc pslunch funkc meme konvertovat etzec znak (string) na slo.

Vytven dvou-dimenzionlnch znakovch etzc


V matlabu meme rovn vytvet dvourozmrn matice zankovch etzc. Pokud
vytvme dvourozmrn znakov pole pak je nutn vdy dbt na to, aby kad dek ml
stejnou dlku.

Monm pstupem jak vytvoit znakov etzec je pouit CHAR funkce, kter vytvo string
ze vech etzc tak, e vezme ten nejdel z nich a nsledn upravuje i dlku ostatnch tm e
je dopln mezerami.

Pro zskn etzce z matice , je vhodn pout funkci pro vyjmut DEBLANK:
trimname = deblank(name(1,:))
trimname =
Thomas R. Lee
size(trimname)
ans =
1 13
9

Porovnvn etzc
Matlab disponuje funkcemi pro porovnvn etzc:
STRCMP
STRNCMP

zjiuje zda dva vstupn etzce jsou identick


zjiuje zda dva vstupn etzce jsou identick po n znak kter jsou identick.

Konverze etzce na slo a opan


Konverze provdj pevody mezi sly a etzci navzjem pomoc funkc v Matlabu.
K tomuto jsou ureny t zkladn funkce:
Num2srt

pevd slo na etzec (string)


10

Str2num
Mat2str

pevd etzec na slo (pouze obsahuje li slo)


pevd matici na etzec

Zznamy
Zznam (struktury) jsou v Matlabu pole nazvan datov kontejner neboli daj. Tento daj o zznamu me
obsahovat jakkoli druh dat. Tak napklad, jeden daj pole obsahuje textov etzec reprezentujc jmno, dal
me obsahovat skalr stka faktury, a dal matici lkaskch zznam - vsledk test a tak podobn.

Vytven struktur
Strukturu meme vytvoit dvma zpsoby:
1. Pouitm pidlen vrazu
2. Uitm funkc STRUCT
1.

pokud napeme
patient
11

Vsledkem bude vpis:

Pro ppad rozen potu pacient meme postupovat takto:

2. Nebo meme pout funkc pro tvorbu zznamu z textovch pol:

Tak napklad meme vytvoit:

Vsledn struktura dat pak vypad nsledovn:

Pstup k jednotlivm polokm me vypadat nsledovn:

Nebo tak takto:


12

Import a export dat


Do MATLABu mete zavdt data z jinch program nkolika zpsoby. Obdobn
mete exportovat data MATLABu do jinch program. Vae programy mohou i
pmo spolupracovat s MAT-soubo tj. datov soubory MATLABu. Tato kapitola
popisuje techniky pro import dat do export dat z MATLABu.
Import dat
Nejlep metoda pro import dat zvis na objemu dat, formtu dat atd. Zde jsou
nkter monosti importu dat:
Zadn dat jako explicitn seznam prvk. Jestlie mte mal mnostv dat eknme
mn ne 15 prvk, je snadn zadat data explicitn pomoc hranatch zvorek. Tato
metoda je nevhodn pro velk mnostv dat, nebo nememe opravit chybn zadan
vstup. Podrobnj informace naleznete v kapitole Vstup matic.
Vytvoen dat v M-souboru. Pouijte textov editor pro vytvoen skriptovho
M-souboru, kter zad vae data jako explicitn seznam prvk. Na rozdl od prvn
metody zde mete textovm editorem chyby kdykoli zmnit nebo opravit.
Naten dat z textovho (ASCII) souboru, ve kterm jsou jednotliv dky
zakoneny znakem konce dku a mezi jednotlivmi sloupci jsou mezery. Takov
soubory mohou bt pmo do MATLABu nateny pkazem load. Vsledek je uloen
do promnn, jej nzev se shoduje s nzvem souboru.
ten dat pomoc fopen , fread a ostatnch nzkorovovch funkc MATLABu pro
vstup a vstup. Tato metoda je vhodn pro natn datovch soubor z aplikaci,
kter maj sv vlastn zaveden formty datovch soubor.
Vytvoen MEX-souboru pro naten dat. Tuto metodu pouijte, pokud jsou
k dispozici podprogramy pro natn datovch soubor z jinch aplikac.
Vytvoen programu ve Fortranu nebo C pro transformaci vaich dat do
MAT-souboru a nsledn naten MAT-souboru do MATLABu pomoc pkazu load.
Export dat
Metody, ktermi exportujeme data z MATLABu, jsou nsledujc:
Pro mal matice mete pout pkaz diary.. Pro nslednou pravu souboru
vytvoenho pkazem diary mete pout textov editor.
Uloit data v textovm (ASCII) formtu pomoc pkazu save s volbou -ascii. Nap.
A=rand(4,3);
save temp.dat A -ascii
Vytvo textov soubor s nzvem temp.dat, kter obsahuje nap.
0.7012 0.0475 0.7564
0.9103 0.7361 0.9910
0.7622 0.3282 0.3653
0.2625 0.6326 0.2470
Zapsat data ve specilnm formtu pomoc funkc fopen, fwrite a ostatnch nzkorovovch funkc MATLABu pro vstup a vstup. Tato metoda je vhodn pro ukl13

dn datovch souboru ve formtu, kter vyaduj jin aplikace.


Vytvoen MEX-souboru pro uloen dat. Tuto metodu pouijte, pokud jsou ji
k dispozici podprogramy pro ukldn datovch soubor ve formtu poadovanm
jinmi aplikacemi.
Vytvoen programu ve Fortranu nebo C pro transformaci vaich dat do
MAT-souboru a nsledn naten MAT-souboru do MATLABu pomoc pkazu
load.
Ulote data jako MAT-soubor pomoc pkazu save a potom napite program ve
Fortaranu nebo C, kter pevede MAT soubor do vaeho vlastnho specilnho formtu.

Nzkorovov vstup a vstup


Funkce MATLABu pro souborov vstup a vstup umouje nast data uloen v jinm formtu pmo do
MATLABu nebo zapsat data vytvoen MATLABem ve formtu, kter poaduje jin program nebo zazen.
Funkce zpracovvaj ( tou a zapisuj ) formtovan textov soubory a binrn datov soubory.
Funkce MATLABu pro souborov vstup a vstup jsou zaloeny na funkcch souborovho vstupu a vstupu
jazyka C. Jestlie znte jazyk C, jste pravdpodobn dvrn seznmeni s tmito pkazy. Referenn manul
k jazyku C obsahuje podrobn informace o tom, jak tyto funkce pracuj na vaem systmu.

Otvrn a zavrn souboru


Ped prvnm pouitm souboru ( ten nebo zpis ) musme soubor otevt pkazem Open, ve kterm urme
nzev tohoto souboru a etzec definujc reim pstupu.
Nap. pkaz
fid = fopen(pen.dat, r)
oteve datov soubor pen.dat pro ten. Pouiteln pstupov etzce jsou
r

pro ten

pro zpis

pro pipsn

r+

pro ten i zpis

Systmy jako nap. VMS, kter rozliuj mezi textovmi a binrnmi soubory, mohou poadovat dodaten
znaky v pstupovm etzci, nap. rb pro oteven binrnho souboru pro ten.
Funkce fopen vrac identifiktor souboru, co je nezporn cel slo piazen souboru operanm systmem.
Identifiktor souboru, co je nezporn cel slo piazen souboru operanm systmem. Identifiktor souboru
je v podstat zkratkou pro odkaz na soubor. Funkce MATLABu pro souborov vstup a vstup pouvaj
identifiktor souboru pro rozlien, s jakm souborem se m pracovat ( otevt, st, zapisovat, zavt ).
Jestlie neme bt soubor oteven ( nap. pokus o oteven neexistujcho souboru pro ten ), vrac fopen jako
identifiktor souboru hodnotu -1. Je dobrm zvykem ihned po oteven souboru otestovat identifiktor souboru.
Druh vrcen hodnota poskytuje doplujc informaci o chyb. Nap. pokud MATLAB neme najt soubor
pen.dat, pkaz
[fid, message] = fopen(pen.dat, r)
14

nastav fid na hodnotu -1 a message na etzec


No such file or directory.
Poznamenejme, e hlen jsou zvisl na systmu. Informace o chybch poskytuje tak funkce ferror.
Jednou oteven soubor je pouiteln pro ten nebo zpis. Jakmile ukonme ten nebo zpis, uzaveme soubor
funkc fclose. Nap.
status = fclose(fid)
uzavr soubor sdruen s identifiktorem fid a
status = fclose(all)
uzavr vechny oteven soubory. Ob formy vrac hodnotu 0, jestlie byla operace spn, nebo hodnotu -1,
pokud byla nespn.
ten binrnch datovch soubor
Funkce fread te binrn datov soubory. Ve sv nejjednodu form nate soubor do matice. Nap.
fid = fopen(penny.dat, r);
A = fread(fid);
status = fclose(fid);
nate vechna data ze souboru penny.dat ( viz. demo penny ) jako neznamnkov znaky a zape ja do matice
A.
Dal dva voliteln argumenty funkce fread umouj dit poet natench hodnot a jejich pesnost. Tak nap.
prvn voliteln argument zajist, e
fid = fopen(penny.dat, r);
A = fread(fid, 100);
status = fclose(fid);
nate prvnch 100 datovch hodnot do sloupcovho vektoru A. Nahrazenm sla rozmry matice [10,10] dojde
k naten stejnch 100 prvk do matice typu (10,10).
Pkaz
A = fread(fid, Inf);
te a do konce souboru; vypluje matici A jako sloupcov vektor. Stejn efektivn chybjc argument o potu
natench hodnot.
Druh z volitelnch argument, argument numerick pesnosti, d poet bit natench pro kadou hodnotu a
interpretaci tchto bit jako znak, cel slo nebo reln slo.Numerick pesnost je zvisl na hardware.
Neznme-li, jakm zpsobem je implementovna pesnost na naem potai, je teba nahldnout do referenn
pruky hardware.
MATLAB podporuje mnoho pesnost, kter meme urit jak specifickm nzvem MATLABu, tak ekvivalenty
z jazyka C nebo Fortranu. Nkter bn pesnosti jsou
char a uchar

- pro znamnkov a neznamnkov znaky ( obvykle 8 bit )

short a long

- pro krtk a dlouh cel sla ( obvykle 8 a 32 bit )

15

float a double
32 a 64

- pro jednoduchou a dvojnsobnou pesnost relnch sel ( obvykle


bit )

Kompletn seznam pouitelnch pesnost viz. fread ve druhm dlu tto knihy, Popis funkc.
Pokud se fid odkazuje na oteven soubor obsahujc reln hodnoty, potom
A = fread(fid, 10, float)
nate 10 relnch sel s jednoduchou pesnost do sloupcovho vektoru A.
Nsledujc pklad otevr soubor obsahujc popis funkce fread, potom jej nate a cel soubor zobraz.
freadid = fopen(fread.m, r);
F = fread(freadid, Inf, uchar);
disp(setstr(F))
status = fclose(freadid);
Oznamujeme, e pkaz fread v tto ukzce je ekvivalentn pkazu
F = fread(freadid);
Zpis binrnch datovch soubor
Funkce fwrite zapisuje prvky matice do souboru ve specifikovan numerick pesnosti; funkce vrac poet
zapsanch hodnot. Nap.
fwriteid = fopen(magic5.bin, w);
count = fwrite(fwriteid, magic(5), integer*4);
status = fclose(fwriteid);
Vytvo 100-bytovch binrn soubor obsahujc 25 prvk ( magnetick tverec 5 x 5 ) uloench jako 4-bytov
cel sla. Promnn count se nastav na 25.
Ovldn pozice v souboru
Funkce fseek resp. ftell nm umon nastavit resp. dotzat se na pozici v souboru, se kterou bude pracovat pt
vstupn nebo vstupn operace.
Funkce ftell vrac polohu ( v bytech ) ukazovtka pozice v souboru, kter vstupuje do funkce jako jej argument.
Funkce fseek zmn polohu ukazovtka pozice v souboru. To nm umon peskoit data nebo se navrtit
k dvj sti souboru. Argumenty tto funkce jsou identifiktor souboru; kladn nebo zporn hodnota posunu
( v bytech ), kter uruje, zda dojde k posunu vped i vzad; a potek , od kterho se provd vpoet posunu.
Potek me bt aktuln pozice v souboru (cof), zatek (bof) i konec (eof) souboru.
V nsledujcm pkladu se do souboru five.bin zap sla 1 a 5 ( jako dvoubytov cel sla ), po
znovuoteven souboru se prvnm volnm fseek pesko prvnch 6 byt ( obsahuj sla 1, 2 a 3 ), prvnm
volnm fread se pete hodnota 4, pozice vrac byty zpt a nsledn fread pete hodnotu 3.
A = [1:5];
fid = fopen(five.bin, w);
fwrite(fid, A, short);
status = fclose(fid);
fid = fopen(five.bin, r);
status = fseek(fid, 6, bof);
four = fread(fid, 1, short);
16

position = ftell(fid) ;
status = fseek(fid, -4, cof);
three = fread(fid, 1, short);
status = fclose(fid);
Zpis formtovanch textovch soubor a etzc
Funkce fprintf konvertuje data na znakov etzce a posl je na obrazovku nebo do souboru. Vstupn formt je
uren formtovacm etzcem, kter obsahuje konvergentn specifiktory a text. Konverzn specifiktory zanaj
znakem %; bn konverze zahrnuj
%e

- pro exponenciln notaci

%f

- pro pevnou dovou rku

%g

- pro automatickou volbu krat z formt %e nebo %f

Voliteln poloky v konverznch specifiktorech d minimln ku poloky a pesnost. Nap.


x = 0:.1:1;
y = [x; exp(x)];
fid = fopen(exptable.txt, w);
fprintf(fid, Exponential Function\n\n);
fprintf(fid, %6.2f %12.8f\n, y);
status = fclose(fid);
vytvo textov soubor obsahujc krtkou tabulku exponenciln funkce. Prvn voln fprintf vytvo titulek,
nsleduje dvoje oddkovn (\n\n) a druh voln fprintf vytvo vlastn tabulku. Formtovac etzec poskytuje
formt pro kadou dku tabulky:
1. slo v pevn dov rce est znak irok s dvma desetinnmi msty a dv mezery,
2. slo v pevn dov rce dvanct znak irok s osmi desetinnmi msty.
Prvky matice y jsou transformovny po sloupcch podle specifiktor ve formtovanm etzci. Funkce pouv
formtovac etzec opakovan, dokud nejsou zkonvertovny vechny prvky matice.
Pbuzn funkce sprintf posl sv vsledky do etzce msto do souboru nebo na obrazovku. Nap.
root2 = sprintf(The square root of %f is %10.8e.\n, 2, sqrt(2));
ten formtovanch textovch soubor a etzc
Funkce pro textov vstup fscanf je podobn funkci fprintf. Funkce fscanf m jako sv argumenty identifiktor
otevenho textovho souboru a formtovac etzec, kter obsahuje dn znaky a konverzn specifiktory.
Konverzn specifiktory pro fscanf zanaj znakem %; bn konverze zahrnuj
%s

pro naten etzce

%d

pro naten celho sla

%f

pro naten relnho sla

dn znaky ve formtovacm etzci jsou jeden za druhm vyhledvny ve vstupu a na to, e jeden oddlovac
znak ( white space ) odpovd libovolnmu etzci oddlovacch znak. Jak se te vstup, MATLAB pizpsobuje
dc etzec vstupu a vrac datov hodnoty zkonvertovan podle formtovacch specifiktor. Nsledujc
pklad te soubor s exponencilnmi daty, kter byl vytvoen dve:
fid =fopen(exptable.txt, r);
17

title = fscanf(fid, %s);


[table, count] = fscanf(fid, %f %f);
status = fclose(fid);
dek s titulkem zpracuje specifiktor %s pi prvnm voln fscanf. Druh voln scanf nate tabulkov
hodnoty (opakovan se nataj dv sla s pevnou dovou rkou, dokud se nedoshne konce souboru).count
vrac poet petench hodnot.
Voliteln argument velikosti d poet prvk matice pro ten. Nap. jestlie fid odpovd otevenmu souboru
obsahujcmu etzce desetinnch mst, potom
A = fscanf(fid, %5d, 100);
nate 100 desetinnch hodnot do sloupcovho vektoru A a
A = fscanf(fid, %5d, [10,10]);
nate 100 desetinnch sel do matice A typu (10,10).

Pbuzn funkce sscanf bere svj vstup z etzce msto ze souboru. Nap.
rootvalues = sscanf(root2,The square root of %f is %f.);
vrac sloupcov vektor obsahujc hodnotu 2 a jej druhou odmocninu.

M-soubory : Skripty a funkce

Pozor na vytven stejnch promnnch a stejnch nzv funkce jak ji


existuj v Matlabu.
MATLAB se obvykle pouv v pkazovm mdu; kdy zadte jednodkov pkaz, MATLAB ho okamit
provede a zobraz vsledky. Krom toho me MATLAB tak spoutt posloupnosti pkaz, kter jsou uloeny
v souborech.
Soubory, kter obsahuj pkazy MATLABu, se nazvaj M soubory, nebo maj pponu .m. Nap. soubor
s nzvem bessel.m obsahuje pkazy MATLABu, kter vypotou hodnotu Besselovy funkce.
M-soubory obsahuj posloupnost normlnch pkaz MATLABu, kter se mohou dle odkazovat na jin Msoubory. M-soubor me volat rekurzivn sm sebe. M-soubor mete vytvoit libovolnm textovm editorem.
Rozliujeme dva typy M-soubor: skripty a funkce. Skripty, neboli skriptov soubory, automatizuj dlouh
posloupnosti pkaz. Funkce, neboli funkn soubory, poskytuj MATLABu roziitelnost. Funkce vm
umouj pidvat nov funkce k funkcm existujcm. Za svoji oblbenost vd MATLAB v mnohm prv sv
schopnosti vytvet nov funkce, kter e uivatelem specifikovan problmy. Skripty i funkce jsou obyejn
textov (ASCII) soubory.

Skriptov soubory
Kdy je sputn skript, MATLAB jednodue spout pkazy, kter nalezne v souboru. Pkazy ve skriptovm
souboru operuj globln s daty v pracovnm prostoru. Skripty jsou uiten k proveden analz, een problm

18

nebo konstruovn dlouhch posloupnost pkaz, kter se interaktivn daj dlat jenom tkopdn
a zdlouhav.
Nap. pdpokldejme, e soubor fibno.m obsahuje pkazy:
% M-soubor pro vpoet Fibonacciho sel
f=[1 1]; i=1;
while f (i)+ f (i+1)<1000
f (i+2)= f (i)+ f (i+1);
i=i+1;
end
plot(f)
Zadnm pkazu fibno, MATLAB provede pkazy v tomto souboru a vypote tak prvnch estnct Fibonacciho
sel a vytvo jejich graf. Po ukonen vpotu zstvaj promnn f a i v pracovnm prostoru.
Demonstran pklady, kter se dodvaj s MATLABem jsou dobrou ukzkou, jak lze skript pout pro een
sloitjch loh. Zkuste si to, zadejte demos.
Kdy spustte MATLAB, automaticky se spust skript s nzvem startup.m. Do nho si mete zadat fyzikln
konstanty, inenrsk konverze nebo cokoli jinho, co chcete mt peddefinovno ve vaem pracovnm
prostoru. Na vce uivatelskch sovch systmech je skript matlabrc.m rezervovn pro systmov
manager.

Funkn soubory
M-soubor, kter obsahuje slovo function na zatku prvn dky, je funkn soubor.
Funkce se li od scriptu v nsledujcm:

funkci mohou bt pedny vstupn parametry

ve funkci mohou bt definovny promnn, kter jsou lokln

funkce me pedat vstupn parametry

Funkn soubory jsou vznamn pro rozen MATLABu, tj. vytvoen novch funkc
MATLABu za pouit jazyka MATLABU samotnho.
Zde je jednoduch pklad. Soubor mean.m , dodvan s MATLABem, obsahuje pkazy:
function y = mean(x)
% MEAN Average or mean value.
% For vectors, MEAN(X) is the mean value of the elements in X.
% For matrices, MEAN(X) is a row vector containing the mean value
% of each column.
%
% See also MEDIAN, STD, MIN, MAX.
% Copyright (c) 1984 -94 by The MathWorks, Inc.
[m,n] = size(x);
if m == 1
m = n;
end
19

y = sum(x)/m;
Existence tohoto souboru zrove definuje novou funkci zvanou mean. Tato nov
funkce mean se pouv prv tak, jako kterkoli jin funkce MATLABu. Nap. jej vektor
celch sel od 1 do 99,
z = 1:99;
pak stedn hodnotu naleznete zadnm
mean (z)
co d
ans =
50
Zde jsou nkter podrobnosti k mean.m:
Prvn dka deklaruje nzev funkce, vstupn argumenty a vstupn argumenty. Bez
tto dky by byl tento soubor skriptem a ne funkc.
Znak % oznauje, e zbytek dky je koment, kter je ignorovn.
Nkolik prvnch komentovch dek popisuje M-soubor a zobraz se, kdy zadte
help mean .
Prvn komentov dka, znm jako dka H1, je zahrnuta do souboru
contents.m, kter se nachz v kadm pbuznm adresi MATLABu, a pouv
ji pkaz lookfor.
Promnn x, m, n a y jsou lokln vzhledem k mean a neexistuj v pracovnm
prostoru. (Pokud v pracovnm prostoru existovaly ped sputnm funkce mean,
zstanou nezmnny.)
Nyn vytvome o trochu sloitj verzi funkce mean nazvanou stat. Tato funkce vypote
navc standartn odchylku:
function [mean,stdev] = stat(x)
[m,n] = size(x);
if m == 1
m = n;
end
mean = sum(x)/m;
stdev = sqrt(sum(x.^2)/m-mean.^2);
Funkce stat ilustruje monost vrcen vce vstupnch argument.
Funkce, kter vypote hodnost matice, uv naopak vce vstupnch argument:
function r=rank(X,tol)
% hodnost matice
20

s = svd(X);
if (nargin == 1)
tol = max(size(X))*s(1)*eps;
end
r = sum(s>tol);
Tento pklad demostruje pouit pernamentn promnn nargin k zskn potu vstupnch
argument. Promnn nargout, zde nepouit, obsahuje poet vstupnch argument.

Tvorba npovdy pro vae M-soubory


Npovdu pro vae M-soubory vytvote zadnm jedn nebo nkolika komentovch dek
ponaje druhou dkou souboru. Nap. M-soubor angle.m obsahuje na zatku tyto dky:
function p = angle(h)
% ANGLE Phase angle.
% ANGLE(H) returns the phase angles, in radians, of a matrix with
% complex elements.
%
% See also ABS, UNWRAP.
% Copyright 1984-94 by The MathWorks, Inc.
Kdy zadte help angle, zobraz se dky 1 a 5. Tyto dky jsou prvnm spojitm blokem
komentovch dek.Systm npovdy ignoruje komentov dky, kter se objev
v souboru pozdji po njakm proveditelnm pkazu nebo przdn dce.
Prvn komentov dka v M-souboru mus obsahovat co nejvce informac, nebo
v nkterch ppadech se zobrazuje pouze tato prvn komentov dka (nap. pi pouit
pkazu lookfor).

Globln promnn
Obvykle kad funkce MATLABu, definovan jako M-soubor, m sv vlastn lokln
promnn, kter jsou oddlen od loklnch promnnch jinch funkc a od promnnch
zkladnho pracovnho prostoru. Pokud vak nkolik funkc pop.zkladn prostor deklaruj
nzev promnn jako globln, potom spolen sdlej jednu kopii tto promnn.
Globln promnn se obvykle z dvodu lep itelnosti M-soubor p velkmi psmeny.
Pedpokldejme e chceme studovat vliv vazebnch koeficient a v Lotkeho Volterrov
modelu dravce a koisti
y&1 y1 * y1 * y 2
y&2 y 2 * y1 * y 2

Vytvome M-soubor lotka.m :


function yp = lotka(t,y)
21

% LOTKA Lotka-Volerrv model dravce a koisti


global ALPHA BETA
yp = [y(1)-ALPHA*y(1)*y(2); -y(2)+BETA*y(1)*y(2)];
Potom zadejte nsledujc pkazy:
global ALPHA BETA
ALPHA = 0.01
BETA = 0.02
[t,y] = ode23(lotka,0,10,[1;1]);
plot(t,y)
Deklarace globlnch promnnch ALPHA a BETA a piazen hodnot umon jejich pouit
ve funkci lotka.m.Globln promnn ALPHA a BETA mohou bt modifikovny
interaktivn a nov een zskme bez editace souboru lotka.m.

Textov etzce
Textov etzce se do MATLABu zadvaj v apostrofech.Nap.
s = Hello
vrt
s=
Hello
Text je uloen ve vektoru, co znak to prvek. V naem ppad
size(s)
ans =
1 5
Oznamuje, e s m pt prvk (pt znak). Znaky jsou uloeny jako ASCII hodnoty a funkce
abs tyto hodnoty (poad v tabulce ASCII znak) uke:
abs(s)
ans =
72

101

108

108

111

Funkce setstr nastav zobrazovac md vektoru tak, aby zobrazoval text uloen ve vektoru a
ne odpovdajc ASCII hodnoty. Funkce disp zobraz text v promnn, funkce isstr detekuje
etzce a funkce strcmp etzce porovnv.
Pouitm hranatch zvorek mete textov promnn spojovat do velkch etzc:
s = [s,World]
s=
Hello World
sla se pevd na etzce funkcemi sprintf, num2str a int2str.Pro vloen popisu grafu,
kter obsahuje seln hodnoty, se asto petransformovan sla spojuj do velkch etzc:
f = 70; c = (f-32)/1.8;
22

title(Room temperature is ,num2str(c),degrees C])


Zptn se etzec pevede na slo pomoc pkazu str2num(text)
Funkce eval
Funkce eval pracuje s textovmi promnnmi a pat mezi nejvkonnj (ale tak
nejzkenj) funkce MATLABu. eval(t) provede vyhodnocen textu uloenho
v promnn t. Nap. mjme promnnou t, ve kter je uloen text sin(pi/2). Po zadn
t
obdrme pouze vpis textu
t=
sin(pi/2)
ale
eval(t)
text vyhodnot a my dostaneme
ans=
1
Jin pklad
t=1/(i+j-1);
for i=1:n
for j=1:n
a(i,j) = eval(t);
end
end
vytvo hilbertovou matici du n.
Zvren pklad uke, jak meme pout eval spolu s funkc load k naten deseti
postupn oslovanch soubor data1,data2,...,data10
fname = data;
for i=1:10
eval([load , fname,int2str(i)])
end
Pozor na mezeru mezi load a nzvem soubor.
Jak zvit rychlost a uetit pam
Operace s vektory a maticemi, kter jsou vestavn v MATLABu, jsou daleko rychlej
ne operace vyadujc kompilaci a interpretaci. To znamen, e chcete-li zskat nejvy
rychlost zpracovn vaich M-soubor, muste se pokusit vae algoritmy vektorizovat.
Kdekoli je to mon, nahrate cykly for a while vektorovmi i maticovmi operacemi.
Nap. jednm ze zpsob, jak vypotat sinus od 0 do 100 s krokem 0.01, je
i=0;
for t=0:0.01:100
i=i+1;
y(i)=sin(t);
end
Vektorizovan verze stejnho kdu je

23

t = 0:0.01:100;
y = sin(t);
anebo pmo
y = sin(0:0.01:100);
Na pomalm potai trval prvn pklad 10.4 sekundy, zatmco druh pouze 0.16
sekundy, tedy 65-krt rychleji. Pi sloitjm kdu nen vdy snadn zjistit, jakm
zpsobem kd optimalizovat. Avak pokud je pro vs rychlost dleit, budete muset
vdy hledat cestu jak v algoritmus vektorizovat.
Pokud st svho kdu vektorizovat nemete, mte jet jednu monost jak provdn
svch cykl for urychlit: provst pedbnou alokaci vektor, do kterch se v cyklu
ukldaj vsledky. Nap prvn pkazy nsledujcm pkladu znan urychl proveden
cyklu for:
y=zeros(1,100);
for i=1:100
y(i)=det(X^i);
end
Pokud by nebyla provedena pedbn alokace vektoru y, musel by interpretem
MATLABu zvtovat velikost vektoru y pi kadm prchodu cyklem o jeden prvek
a tm by se vpoet znan zpomalil.
Pokud pracujete s velikmi maticemi na potach s relativn malou pamti, m pro
vs metoda pedbn alokace jet jednu vhodu: efektivnj vyuit pamti.
V prbhu prce s MATLABem dochz k fragmentaci pamti. I kdy mte relativn
dosti volnho msta v pamti, nemuste jet mt dost spojitho prostoru pro uloen
velk promnn. Pedbn alokace pomh redukovat fragmentaci pamti.

dc struktury
MATLAB obsahuje dc struktury, jak se nachzej ve vtin programovacch jazyk. Existence tchto
struktur povyuje MATLAB z obyejnho kalkultoru na plnohodnotn vy programovac jazyk.
Cyklus FOR
MATLAB m svoji vlastn verzi cyklu DO nebo FOR, kter se nachz v jinch programovacch jazycch.
Cyklus FOR slou pro pedem dan poet opakovn pkazu nebo skupiny pkaz.
nap.
for i=1:n, x(i)=0, end
Piad nulu prvnm n prvkm vektoru x. Je-li n men ne jedna, bude pkaz stle legln, ale vnitn pkaz
nebude proveden. Pokud x jet neexistuje nebo m mn ne n prvk, potom se automaticky alokuje dodaten
prostor.
Cykly meme vnoovat; z dvodu lep itelnosti se obvykle odsazuj. Nap.
for i=1:m
for j=1:n
A(i,j)=1/(i+j-1);
end
end
A
24

Stednk ukonujc vnitn pkaz potlauje zobrazovn mezivsledk, zatmco A nsledujc po cyklech
zobraz konen vsledek.
Pozor, kad for mus mt svj end. Jestlie zadte
for i=1:n, x(i)=0
systm ek, a zadte zbvajc pkazy do tla cyklu. Nic se nedje, dokud nezadte end.
Pro nsledujc pklad pedpokldejme, e
t=
-1
0
1
3
5
a e chcete vytvoit Vandermondeovu matici, co je matice, jej sloupce jsou mocniny vektoru t.
A=
1 -1 1
0
0 0
1
1
1
81 27 9
625 125 25

-1
0
1
3
5

1
1
1
1
1

Zde je nejobvyklej een - dva cykly


n=length(t);
for j=1:n
for i=1:n
A(i,j)=t(i)^(n-j);
end
end
Avak nsledujc jednoduch cyklus s vektorovmi operacemi je podstatn rychlej, a tak ilustruje skutenost,
e cykly for mohou jt tak pozptku.
A(:,n)=ones(n,1);
for j=n-1:-1:1
A(:,j)=t.*A(:,j+1);
end
Obecn tvar cyklu for je
for v=vraz
pkazy
end
Vraz je ve skutenosti matice, nebo nic jinho v MATLABu neexistuje. Sloupce matice jsou postupn
piazovny promnn v a nsledn jsou provedeny pkazy.
Jasnji lze celou zleitost vyjdit jako
E=vraz;
[m,n]=size(E);
for j=1:n
v=E(:,j);
pkazy
end
Obvykle je vraz ve tvaru m:n nebo m:i:n, co je matice s jednou dkou, take sloupce jsou skalry. V tomto
specilnm ppad se chov cyklus for MATLABu jako cyklus FOR a DO v jinch jazycch.
25

Cyklus WHILE
MATLAB m svoji vlastn verzi cyklu while, kter umouje opakovat pkaz nebo skupinu pkaz v zvislosti
na logick podmnce. Zde je jednoduch problm na ilustraci cyklu while. Jak prvn cel slo n m svj
faktoril stocifern? Nsledujc cyklus while ho najde. Pokud ji neznte odpov, zadejte
n=1;
while prod(1:n)<1.0e100, n=n+1; end
n
Praktitjm vpotem ilustrujcm pouit while je vpoet exponenciln funkce matice; v MATLABu
nazvan expm(A). Jednou z monch definic exponenciln funkce je mocninn ada:
expm(A) = I + A + A^2/2! + A^3/3! + ...
Obecn tvar cyklu while je
while vraz
pkazy
end
Pkazy se opakuj tak dlouho, dokud jsou vechny prvky ve vrazu (vraz je matice) nenulov. Vraz je tm
vdy skalrnm relanm vrazem, take nenulov hodnoty odpovdaj logick hodnot TRUE. Pokud vraz nen
skalr, mete ho redukovat funkc any nebo all.
Pkazy IF a BREAK
Nsledujc pkazy ilustruj pouit pkazu if. Prvn pklad ukazuje, jak me bt vpoet rozdlen na ti
ppady v zvislosti na znamnku a parit promnn n.
if n<0
A=negative(n)
elseif rem(n,2)==0
A=even(n)
else
A=odd(n)
end
Druh pklad pojednv o vzruujcm problmu z teorie sel. Mjme libovoln kladn cel slo. Pokud je
sud, dlme ho dvma. Pokud je lich, nsobme ho temi a pitme jedniku. Tento postup opakujme, dokud
nedostaneme jedniku. Problm zn: Existuje njak cel slo, pro kter tento proces nikdy nekon?
Nsledujc program ilustruje hlavn pkazy while a if. Dle ukazuje pouit funkce input, kter slou pro
vstup z klvesnice, a pkazu break, kter peru provdn nejble nadazenho cyklu.
% Klasick problm 3n+1 z teorie sel
while 1
n=input(Zadej n, zporn=konec );
if n<=0, break, end
while n>1
if rem(n,2)==0
n=n/2;
else
n=3*n+1;
end
end
end

26

SWITCH
Switch provd jist pkaz zakldajc se na hodnot nebo vrazu, kter je piazen
v seznamu oekvanch vstup.

Tento pkaz m obdobnou funkci a pout jako u jinch program.

nebo

27

+
*
.*
^
.^
kron
\
/
./
:
()
[]
.
..
...
,
;
%
!
`
.`
=
==
<>
&

~
xor

Opertory a speciln znaky


Plus
Minus
Nsoben matic
Nsoben pol, tj. prvk matic
Umocnn matice
Umocnn pole, tj. prvk matic
Kroneckerv tenzorov souin
Zptn lomtko - levostrann dlen
Lomtko - pravostrann dlen
Dlen pol tj. prvk matic
Generovn vektor, indexovn
Zvorky vraz, indexov zvorky
Maticov zvorky
Desetinn teka v slech, pznak operace s poli
Nadazen adres
Pokraovn pkazu na dal dce
Oddlova index, argument funkc, prvk matic
Konec pkazu bez vstupu, konec dky s matic
Koment do konce dky
Uvd bn pkaz operanho systmu
Hermitovsk transpozice nebo apostrof u etzc
Transpozice
Piazen
Rovnost
Relan opertory (men, vt)
Logick souin (AND)
Logick souet (OR)
Negace (NOT)
Neekvivalence (EXCLUSIVE OR)

28

You might also like