TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií
MATLB: p°edná²ka 2 Datové typy a struktury
Zbyn¥k Koldovský
Projekt ESF CZ.1.07/2.2.00/28.0050 Modernizace didaktických metod a inovace výuky technických p°edm¥t·.
Z. Koldovský
MATLB: p°edná²ka 2
ást I Datové typy a struktury
Z. Koldovský
MATLB: p°edná²ka 2
Datové typy a struktury P°ehled typ·: Product Help Fundamentals
→
→
MATLAB
→
Programming
Classes (Data Types)
Z. Koldovský
MATLB: p°edná²ka 2
Numerické, logické a textové datové typy Numerické: p°etypování pomocí
double
int8, uint8, int16, single,
...
Logické Textové:
char,
°et¥zce jako pole typ·
char,
pracujeme s ním
tedy podobn¥ jako s maticemi (spojování, indexování, atd.)
>> s='Ahoj' s = Ahoj >> whos s Name s
Size
Bytes
1x4
8
Class char
>> s(2) ans = h Z. Koldovský
MATLB: p°edná²ka 2
Attributes
Numerické, logické a textové datové typy Numerické: p°etypování pomocí
double
int8, uint8, int16, single,
...
Logické Textové:
char,
°et¥zce jako pole typ·
char,
pracujeme s ním
tedy podobn¥ jako s maticemi (spojování, indexování, atd.)
>> s='Ahoj' s = Ahoj >> whos s Name s
Size
Bytes
1x4
8
Class char
>> s(2) ans = h Z. Koldovský
MATLB: p°edná²ka 2
Attributes
Numerické, logické a textové datové typy Numerické: p°etypování pomocí
double
int8, uint8, int16, single,
...
Logické Textové:
char,
°et¥zce jako pole typ·
char,
pracujeme s ním
tedy podobn¥ jako s maticemi (spojování, indexování, atd.)
>> s='Ahoj' s = Ahoj >> whos s Name s
Size
Bytes
1x4
8
Class char
>> s(2) ans = h Z. Koldovský
MATLB: p°edná²ka 2
Attributes
et¥zce >> s=[s ' Honzo'] % spojování s = Ahoj Honzo >> a=['Ahoj';'Honzo'] % chyba - °ádky matice nejsou stejn¥ velké ??? Error using ==> vertcat CAT arguments dimensions are not consistent. >> a=['Ahoj ';'Honzo'] a = Ahoj Honzo >> strcmp(a(1,:),'Ahoj ') % porovnání °et¥zc· ans = 1 Z. Koldovský
MATLB: p°edná²ka 2
Standardní p°íkazy pro práci s °et¥zci
strcmp, strfind, regexp
- porovnávání, vyhledávání,
regulární výrazy, parsování
fprintf, sprintf - formátované výrazy upper, lower - velká/malá písmena eval - vyhodnovení výrazu
Z. Koldovský
MATLB: p°edná²ka 2
Standardní p°íkazy pro práci s °et¥zci
strcmp, strfind, regexp
- porovnávání, vyhledávání,
regulární výrazy, parsování
fprintf, sprintf - formátované výrazy upper, lower - velká/malá písmena eval - vyhodnovení výrazu
Z. Koldovský
MATLB: p°edná²ka 2
Standardní p°íkazy pro práci s °et¥zci
strcmp, strfind, regexp
- porovnávání, vyhledávání,
regulární výrazy, parsování
fprintf, sprintf - formátované výrazy upper, lower - velká/malá písmena eval - vyhodnovení výrazu
Z. Koldovský
MATLB: p°edná²ka 2
Standardní p°íkazy pro práci s °et¥zci
strcmp, strfind, regexp
- porovnávání, vyhledávání,
regulární výrazy, parsování
fprintf, sprintf - formátované výrazy upper, lower - velká/malá písmena eval - vyhodnovení výrazu
Z. Koldovský
MATLB: p°edná²ka 2
Záznamy Datový typ
struct
Automatická denice poloºek
>> s.jmeno='Tomas'; >> s.adresa='Praha'; % nebo >> s=struct('jmeno','Tomas','adresa','Praha') s = jmeno: 'Tomas' adresa: 'Praha' Kaºdý prvek je zárove¬ pole
>> whos s Name s
Size
Bytes
1x1
268 Z. Koldovský
Class struct
MATLB: p°edná²ka 2
Attributes
Záznamy Datový typ
struct
Automatická denice poloºek
>> s.jmeno='Tomas'; >> s.adresa='Praha'; % nebo >> s=struct('jmeno','Tomas','adresa','Praha') s = jmeno: 'Tomas' adresa: 'Praha' Kaºdý prvek je zárove¬ pole
>> whos s Name s
Size
Bytes
1x1
268 Z. Koldovský
Class struct
MATLB: p°edná²ka 2
Attributes
Záznamy Datový typ
struct
Automatická denice poloºek
>> s.jmeno='Tomas'; >> s.adresa='Praha'; % nebo >> s=struct('jmeno','Tomas','adresa','Praha') s = jmeno: 'Tomas' adresa: 'Praha' Kaºdý prvek je zárove¬ pole
>> whos s Name s
Size
Bytes
1x1
268 Z. Koldovský
Class struct
MATLB: p°edná²ka 2
Attributes
Záznamy (2)
Pole záznam· (databáze)
>> s(2).jmeno='Ales' s = 1x2 struct array with fields: jmeno adresa >> s(2) ans =
jmeno: 'Ales' adresa: []
Z. Koldovský
MATLB: p°edná²ka 2
Záznamy (3) P°íklad
>> files=dir('*.m') files = 6x1 struct array with fields: name date bytes isdir datenum >> files(1) ans = name: date: bytes: isdir: datenum:
'dft.m' '05-XI-2009 10:59:17' 143 0 7.3408e+005 Z. Koldovský
MATLB: p°edná²ka 2
Záznamy (4) P°íklad
>> files(1:3).name ans = dft.m ans = funkcef.m ans = pokus.m >> [files(1:3).name] ans = dft.mfunkcef.mpokus.m >> strvcat(files(1:3).name) ans = dft.m funkcef.m pokus.m Z. Koldovský
MATLB: p°edná²ka 2
Záznamy (5) P°íklad
>> files=dir files = 131x1 struct array with fields: name date bytes isdir datenum >> directory=files([files.isdir]) % pouze adresá°e directory = 7x1 struct array with fields: name date bytes isdir datenum Z. Koldovský
MATLB: p°edná²ka 2
Vícerozm¥zná pole Vícerozm¥rné pole typu
double
>> A=zeros(3,4,5,2); >> A(:,1,2,2) % indexování jako u matic P°íkazy
sum, mean, prod
>> sum(v) % sou£et 1D pole = vektoru >> sum(A) % sou£et sloupc· >> sum(A,n) % sou£et p°es n-tý rozm¥r % n-tý rozm¥r výsledku je 1 Dal²í p°íkazy:
squeeze, reshape, permute
>> squeeze(sum(sum(A,3),2)) % odstraní 1-dimenzionální % rozm¥ry >> reshape(A,12,10) % zm¥na rozm¥r· % po£et prvk· nového pole musí být stejný >> permute(A,[3 4 1 2]) % vým¥na po°adí rozm¥r· Z. Koldovský
MATLB: p°edná²ka 2
Vícerozm¥zná pole Vícerozm¥rné pole typu
double
>> A=zeros(3,4,5,2); >> A(:,1,2,2) % indexování jako u matic P°íkazy
sum, mean, prod
>> sum(v) % sou£et 1D pole = vektoru >> sum(A) % sou£et sloupc· >> sum(A,n) % sou£et p°es n-tý rozm¥r % n-tý rozm¥r výsledku je 1 Dal²í p°íkazy:
squeeze, reshape, permute
>> squeeze(sum(sum(A,3),2)) % odstraní 1-dimenzionální % rozm¥ry >> reshape(A,12,10) % zm¥na rozm¥r· % po£et prvk· nového pole musí být stejný >> permute(A,[3 4 1 2]) % vým¥na po°adí rozm¥r· Z. Koldovský
MATLB: p°edná²ka 2
Vícerozm¥zná pole Vícerozm¥rné pole typu
double
>> A=zeros(3,4,5,2); >> A(:,1,2,2) % indexování jako u matic P°íkazy
sum, mean, prod
>> sum(v) % sou£et 1D pole = vektoru >> sum(A) % sou£et sloupc· >> sum(A,n) % sou£et p°es n-tý rozm¥r % n-tý rozm¥r výsledku je 1 Dal²í p°íkazy:
squeeze, reshape, permute
>> squeeze(sum(sum(A,3),2)) % odstraní 1-dimenzionální % rozm¥ry >> reshape(A,12,10) % zm¥na rozm¥r· % po£et prvk· nového pole musí být stejný >> permute(A,[3 4 1 2]) % vým¥na po°adí rozm¥r· Z. Koldovský
MATLB: p°edná²ka 2
Pam¥´ová pole Pam¥´ová pole:
Cell Arrays
Nejobecn¥j²í moºné: indexovaná pole jejichº prvky jsou libovolného typu a struktury Automatická alokace, indexování pomocí
{, }
>> c{1,1}=randn(3,4); >> c{1,2}=struct('jmeno','Ales'); >> c{1,3}=c c = [3x4 double] [1x1 struct]
{1x2 cell}
Indexování:
>> c(2) % vrací pam¥´ové pole 1x1 na 2. pozici v c >> c{2} % vrací obsah 2. prvku v c >> c{1}(2,3) % (2,3)-prvek v 1. prvku c >> c{3}{1,2}.jmeno(3) % no comment ans = e Spojování: pozor na rozdíl významu Z. Koldovský
{, }
a [,
MATLB: p°edná²ka 2
]
Pam¥´ová pole Pam¥´ová pole:
Cell Arrays
Nejobecn¥j²í moºné: indexovaná pole jejichº prvky jsou libovolného typu a struktury Automatická alokace, indexování pomocí
{, }
>> c{1,1}=randn(3,4); >> c{1,2}=struct('jmeno','Ales'); >> c{1,3}=c c = [3x4 double] [1x1 struct]
{1x2 cell}
Indexování:
>> c(2) % vrací pam¥´ové pole 1x1 na 2. pozici v c >> c{2} % vrací obsah 2. prvku v c >> c{1}(2,3) % (2,3)-prvek v 1. prvku c >> c{3}{1,2}.jmeno(3) % no comment ans = e Spojování: pozor na rozdíl významu Z. Koldovský
{, }
a [,
MATLB: p°edná²ka 2
]
Pam¥´ová pole Pam¥´ová pole:
Cell Arrays
Nejobecn¥j²í moºné: indexovaná pole jejichº prvky jsou libovolného typu a struktury Automatická alokace, indexování pomocí
{, }
>> c{1,1}=randn(3,4); >> c{1,2}=struct('jmeno','Ales'); >> c{1,3}=c c = [3x4 double] [1x1 struct]
{1x2 cell}
Indexování:
>> c(2) % vrací pam¥´ové pole 1x1 na 2. pozici v c >> c{2} % vrací obsah 2. prvku v c >> c{1}(2,3) % (2,3)-prvek v 1. prvku c >> c{3}{1,2}.jmeno(3) % no comment ans = e Spojování: pozor na rozdíl významu Z. Koldovský
{, }
a [,
MATLB: p°edná²ka 2
]
Pam¥´ová pole Pam¥´ová pole:
Cell Arrays
Nejobecn¥j²í moºné: indexovaná pole jejichº prvky jsou libovolného typu a struktury Automatická alokace, indexování pomocí
{, }
>> c{1,1}=randn(3,4); >> c{1,2}=struct('jmeno','Ales'); >> c{1,3}=c c = [3x4 double] [1x1 struct]
{1x2 cell}
Indexování:
>> c(2) % vrací pam¥´ové pole 1x1 na 2. pozici v c >> c{2} % vrací obsah 2. prvku v c >> c{1}(2,3) % (2,3)-prvek v 1. prvku c >> c{3}{1,2}.jmeno(3) % no comment ans = e Spojování: pozor na rozdíl významu Z. Koldovský
{, }
a [,
MATLB: p°edná²ka 2
]
Pam¥´ová pole Pam¥´ová pole:
Cell Arrays
Nejobecn¥j²í moºné: indexovaná pole jejichº prvky jsou libovolného typu a struktury Automatická alokace, indexování pomocí
{, }
>> c{1,1}=randn(3,4); >> c{1,2}=struct('jmeno','Ales'); >> c{1,3}=c c = [3x4 double] [1x1 struct]
{1x2 cell}
Indexování:
>> c(2) % vrací pam¥´ové pole 1x1 na 2. pozici v c >> c{2} % vrací obsah 2. prvku v c >> c{1}(2,3) % (2,3)-prvek v 1. prvku c >> c{3}{1,2}.jmeno(3) % no comment ans = e Spojování: pozor na rozdíl významu Z. Koldovský
{, }
a [,
MATLB: p°edná²ka 2
]
ást II Programování skript· a funkcí
Z. Koldovský
MATLB: p°edná²ka 2
Skript
ASCII soubory s koncovkou *.m Skript nemá vlastní datový segment Workspace, pracujeme v základním Base Globální prom¥nné: deklarace pomocí p°íkazu
Z. Koldovský
MATLB: p°edná²ka 2
global
Skript
ASCII soubory s koncovkou *.m Skript nemá vlastní datový segment Workspace, pracujeme v základním Base Globální prom¥nné: deklarace pomocí p°íkazu
Z. Koldovský
MATLB: p°edná²ka 2
global
Skript
ASCII soubory s koncovkou *.m Skript nemá vlastní datový segment Workspace, pracujeme v základním Base Globální prom¥nné: deklarace pomocí p°íkazu
Z. Koldovský
MATLB: p°edná²ka 2
global
Funkce ASCII soubory s koncovkou *.m za£ínající klí£ovým slovem
function Vlastní datový segment Workspace (prom¥nné jsou lokální) Deklarace funkce, vstupních a výstupních prom¥nných
function [a,b,c]=mojefunkce(x,y) % tady je nápov¥da Net°eba denovat datové typy, po£et vstup· a výstup· (deklarací si vstupy a výstupy pouze pojmenováváme, nemusí existovat, m·ºe jich být víc) Po£et vstupních a výstupních prom¥nných: prom¥nné
nargout, pro vstup a varargin, varargout a
nargin
výstup lze pouºít pam¥´ové pole
Vloºené funkce: dal²ím klí£ovým slovem
function
lokální funkci, která ale není vid¥t navenek
Z. Koldovský
MATLB: p°edná²ka 2
denujeme
Funkce ASCII soubory s koncovkou *.m za£ínající klí£ovým slovem
function Vlastní datový segment Workspace (prom¥nné jsou lokální) Deklarace funkce, vstupních a výstupních prom¥nných
function [a,b,c]=mojefunkce(x,y) % tady je nápov¥da Net°eba denovat datové typy, po£et vstup· a výstup· (deklarací si vstupy a výstupy pouze pojmenováváme, nemusí existovat, m·ºe jich být víc) Po£et vstupních a výstupních prom¥nných: prom¥nné
nargout, pro vstup a varargin, varargout a
nargin
výstup lze pouºít pam¥´ové pole
Vloºené funkce: dal²ím klí£ovým slovem
function
lokální funkci, která ale není vid¥t navenek
Z. Koldovský
MATLB: p°edná²ka 2
denujeme
Funkce ASCII soubory s koncovkou *.m za£ínající klí£ovým slovem
function Vlastní datový segment Workspace (prom¥nné jsou lokální) Deklarace funkce, vstupních a výstupních prom¥nných
function [a,b,c]=mojefunkce(x,y) % tady je nápov¥da Net°eba denovat datové typy, po£et vstup· a výstup· (deklarací si vstupy a výstupy pouze pojmenováváme, nemusí existovat, m·ºe jich být víc) Po£et vstupních a výstupních prom¥nných: prom¥nné
nargout, pro vstup a varargin, varargout a
nargin
výstup lze pouºít pam¥´ové pole
Vloºené funkce: dal²ím klí£ovým slovem
function
lokální funkci, která ale není vid¥t navenek
Z. Koldovský
MATLB: p°edná²ka 2
denujeme
Funkce ASCII soubory s koncovkou *.m za£ínající klí£ovým slovem
function Vlastní datový segment Workspace (prom¥nné jsou lokální) Deklarace funkce, vstupních a výstupních prom¥nných
function [a,b,c]=mojefunkce(x,y) % tady je nápov¥da Net°eba denovat datové typy, po£et vstup· a výstup· (deklarací si vstupy a výstupy pouze pojmenováváme, nemusí existovat, m·ºe jich být víc) Po£et vstupních a výstupních prom¥nných: prom¥nné
nargout, pro vstup a varargin, varargout a
nargin
výstup lze pouºít pam¥´ové pole
Vloºené funkce: dal²ím klí£ovým slovem
function
lokální funkci, která ale není vid¥t navenek
Z. Koldovský
MATLB: p°edná²ka 2
denujeme
Funkce ASCII soubory s koncovkou *.m za£ínající klí£ovým slovem
function Vlastní datový segment Workspace (prom¥nné jsou lokální) Deklarace funkce, vstupních a výstupních prom¥nných
function [a,b,c]=mojefunkce(x,y) % tady je nápov¥da Net°eba denovat datové typy, po£et vstup· a výstup· (deklarací si vstupy a výstupy pouze pojmenováváme, nemusí existovat, m·ºe jich být víc) Po£et vstupních a výstupních prom¥nných: prom¥nné
nargout, pro vstup a varargin, varargout a
nargin
výstup lze pouºít pam¥´ové pole
Vloºené funkce: dal²ím klí£ovým slovem
function
lokální funkci, která ale není vid¥t navenek
Z. Koldovský
MATLB: p°edná²ka 2
denujeme
Funkce ASCII soubory s koncovkou *.m za£ínající klí£ovým slovem
function Vlastní datový segment Workspace (prom¥nné jsou lokální) Deklarace funkce, vstupních a výstupních prom¥nných
function [a,b,c]=mojefunkce(x,y) % tady je nápov¥da Net°eba denovat datové typy, po£et vstup· a výstup· (deklarací si vstupy a výstupy pouze pojmenováváme, nemusí existovat, m·ºe jich být víc) Po£et vstupních a výstupních prom¥nných: prom¥nné
nargout, pro vstup a varargin, varargout a
nargin
výstup lze pouºít pam¥´ové pole
Vloºené funkce: dal²ím klí£ovým slovem
function
lokální funkci, která ale není vid¥t navenek
Z. Koldovský
MATLB: p°edná²ka 2
denujeme
Debugging a Proling Breakpointy vkládáme v programovacím editoru, z p°íkazové °ádky je to téº moºné (p°íkaz
dbstop)
av²ak. . .
Lze vkládat i podmín¥né breakpointy Pomáháme si p°íkazy
warning,
echo, disp, keyboard, return,
...
B¥hem debuggingu m·ºeme d¥lat prakticky cokoliv: sledovat a m¥nit prom¥nné, vytvá°et nové, volat p°íkazy . . . zde je zásadní výhoda toho, ºe Matlab je interpret nikoliv p°eklada£ Proler slouºí k m¥°ení £asové náro£nosti
profile clear profile on mujskript mojefunkce(x,y) profile off profile report Z. Koldovský
MATLB: p°edná²ka 2
Debugging a Proling Breakpointy vkládáme v programovacím editoru, z p°íkazové °ádky je to téº moºné (p°íkaz
dbstop)
av²ak. . .
Lze vkládat i podmín¥né breakpointy Pomáháme si p°íkazy
warning,
echo, disp, keyboard, return,
...
B¥hem debuggingu m·ºeme d¥lat prakticky cokoliv: sledovat a m¥nit prom¥nné, vytvá°et nové, volat p°íkazy . . . zde je zásadní výhoda toho, ºe Matlab je interpret nikoliv p°eklada£ Proler slouºí k m¥°ení £asové náro£nosti
profile clear profile on mujskript mojefunkce(x,y) profile off profile report Z. Koldovský
MATLB: p°edná²ka 2
Debugging a Proling Breakpointy vkládáme v programovacím editoru, z p°íkazové °ádky je to téº moºné (p°íkaz
dbstop)
av²ak. . .
Lze vkládat i podmín¥né breakpointy Pomáháme si p°íkazy
warning,
echo, disp, keyboard, return,
...
B¥hem debuggingu m·ºeme d¥lat prakticky cokoliv: sledovat a m¥nit prom¥nné, vytvá°et nové, volat p°íkazy . . . zde je zásadní výhoda toho, ºe Matlab je interpret nikoliv p°eklada£ Proler slouºí k m¥°ení £asové náro£nosti
profile clear profile on mujskript mojefunkce(x,y) profile off profile report Z. Koldovský
MATLB: p°edná²ka 2
Debugging a Proling Breakpointy vkládáme v programovacím editoru, z p°íkazové °ádky je to téº moºné (p°íkaz
dbstop)
av²ak. . .
Lze vkládat i podmín¥né breakpointy Pomáháme si p°íkazy
warning,
echo, disp, keyboard, return,
...
B¥hem debuggingu m·ºeme d¥lat prakticky cokoliv: sledovat a m¥nit prom¥nné, vytvá°et nové, volat p°íkazy . . . zde je zásadní výhoda toho, ºe Matlab je interpret nikoliv p°eklada£ Proler slouºí k m¥°ení £asové náro£nosti
profile clear profile on mujskript mojefunkce(x,y) profile off profile report Z. Koldovský
MATLB: p°edná²ka 2
Debugging a Proling Breakpointy vkládáme v programovacím editoru, z p°íkazové °ádky je to téº moºné (p°íkaz
dbstop)
av²ak. . .
Lze vkládat i podmín¥né breakpointy Pomáháme si p°íkazy
warning,
echo, disp, keyboard, return,
...
B¥hem debuggingu m·ºeme d¥lat prakticky cokoliv: sledovat a m¥nit prom¥nné, vytvá°et nové, volat p°íkazy . . . zde je zásadní výhoda toho, ºe Matlab je interpret nikoliv p°eklada£ Proler slouºí k m¥°ení £asové náro£nosti
profile clear profile on mujskript mojefunkce(x,y) profile off profile report Z. Koldovský
MATLB: p°edná²ka 2
Cykly
Cyklus
for
for i=ind % ind obsahuje hodnoty, které i nabývá % £asto nap° 1:50 % t¥lo cyklu end Lze m¥nit °ídící prom¥nnou v pr·b¥hu, av²ak v dal²ím pr·b¥hu bude mít dal²í hodnotu z pole Cyklus
ind
while
while podminka % podminka je logická hodnota % nap°. a>1 % t¥lo cyklu end
Z. Koldovský
MATLB: p°edná²ka 2
Cykly
Cyklus
for
for i=ind % ind obsahuje hodnoty, které i nabývá % £asto nap° 1:50 % t¥lo cyklu end Lze m¥nit °ídící prom¥nnou v pr·b¥hu, av²ak v dal²ím pr·b¥hu bude mít dal²í hodnotu z pole Cyklus
ind
while
while podminka % podminka je logická hodnota % nap°. a>1 % t¥lo cyklu end
Z. Koldovský
MATLB: p°edná²ka 2
Podmínky
Podmínka
if podminka % t¥lo podmínky elseif podminka2 % t¥lo druhé podmínky elseif podminka3 % t¥lo t°etí podmínky else % jinak end
Z. Koldovský
MATLB: p°edná²ka 2
Podmínka switch
Podmínka
switch
switch vyraz case 1 % t¥lo p°íkazu case {2, 3, 4} % t¥lo p°íkazu otherwise % jinak % t¥lo p°íkazu end Provádí se pouze pravdivé p°ípady, není t°eba ukon£ovat p°ípady pomocí
break
jako je tomu nap°. v C++
Z. Koldovský
MATLB: p°edná²ka 2
Standardní matematické funkce v Matlabu
Standardní názvy:
sin, cos, tan, log, exp, abs, sign
...
Funkce fungují obecn¥ v komplexním oboru Funkce se standardn¥ aplikují po prvcích, výstup má stejný rozm¥r jako vstup
round, ceil, fix, floor minimální prvek a medián: max, mix, median.
Zaokrouhlování: Maximální a
V
p°ípad¥ vektoru je jedno je-li sloupcový nebo °ádkový, u matic fungují po sloupcích, dále viz help. Neslouºí k hledání minim a maxim funkcí (Optimization Toolbox)! T°íd¥ní:
sort
Z. Koldovský
MATLB: p°edná²ka 2
Standardní matematické funkce v Matlabu
Standardní názvy:
sin, cos, tan, log, exp, abs, sign
...
Funkce fungují obecn¥ v komplexním oboru Funkce se standardn¥ aplikují po prvcích, výstup má stejný rozm¥r jako vstup
round, ceil, fix, floor minimální prvek a medián: max, mix, median.
Zaokrouhlování: Maximální a
V
p°ípad¥ vektoru je jedno je-li sloupcový nebo °ádkový, u matic fungují po sloupcích, dále viz help. Neslouºí k hledání minim a maxim funkcí (Optimization Toolbox)! T°íd¥ní:
sort
Z. Koldovský
MATLB: p°edná²ka 2
Standardní matematické funkce v Matlabu
Standardní názvy:
sin, cos, tan, log, exp, abs, sign
...
Funkce fungují obecn¥ v komplexním oboru Funkce se standardn¥ aplikují po prvcích, výstup má stejný rozm¥r jako vstup
round, ceil, fix, floor minimální prvek a medián: max, mix, median.
Zaokrouhlování: Maximální a
V
p°ípad¥ vektoru je jedno je-li sloupcový nebo °ádkový, u matic fungují po sloupcích, dále viz help. Neslouºí k hledání minim a maxim funkcí (Optimization Toolbox)! T°íd¥ní:
sort
Z. Koldovský
MATLB: p°edná²ka 2
Standardní matematické funkce v Matlabu
Standardní názvy:
sin, cos, tan, log, exp, abs, sign
...
Funkce fungují obecn¥ v komplexním oboru Funkce se standardn¥ aplikují po prvcích, výstup má stejný rozm¥r jako vstup
round, ceil, fix, floor minimální prvek a medián: max, mix, median.
Zaokrouhlování: Maximální a
V
p°ípad¥ vektoru je jedno je-li sloupcový nebo °ádkový, u matic fungují po sloupcích, dále viz help. Neslouºí k hledání minim a maxim funkcí (Optimization Toolbox)! T°íd¥ní:
sort
Z. Koldovský
MATLB: p°edná²ka 2
Standardní matematické funkce v Matlabu
Standardní názvy:
sin, cos, tan, log, exp, abs, sign
...
Funkce fungují obecn¥ v komplexním oboru Funkce se standardn¥ aplikují po prvcích, výstup má stejný rozm¥r jako vstup
round, ceil, fix, floor minimální prvek a medián: max, mix, median.
Zaokrouhlování: Maximální a
V
p°ípad¥ vektoru je jedno je-li sloupcový nebo °ádkový, u matic fungují po sloupcích, dále viz help. Neslouºí k hledání minim a maxim funkcí (Optimization Toolbox)! T°íd¥ní:
sort
Z. Koldovský
MATLB: p°edná²ka 2
Standardní matematické funkce v Matlabu
Standardní názvy:
sin, cos, tan, log, exp, abs, sign
...
Funkce fungují obecn¥ v komplexním oboru Funkce se standardn¥ aplikují po prvcích, výstup má stejný rozm¥r jako vstup
round, ceil, fix, floor minimální prvek a medián: max, mix, median.
Zaokrouhlování: Maximální a
V
p°ípad¥ vektoru je jedno je-li sloupcový nebo °ádkový, u matic fungují po sloupcích, dále viz help. Neslouºí k hledání minim a maxim funkcí (Optimization Toolbox)! T°íd¥ní:
sort
Z. Koldovský
MATLB: p°edná²ka 2
ást III Vektorizace a skládání výraz· a p°íkaz·
Z. Koldovský
MATLB: p°edná²ka 2
Vektorizace a skládání výraz· a p°íkaz·
V Matlabu se obecn¥ snaºíme vyhnout cykl·m. Jsou pomalé, vytvá°í zbyt¥£n¥ dlouhý kód, m·ºe nastat problém s doalokováváním. Nap°.
y=[]; % prázdné pole for x=1:10000 y=[y x]; % na konec pole y p°idáme prvek x end V cyklu
for
£asto zpracováváme postupn¥ v²echny prvky pole,
tzv. po prvcích. To lze £asto °e²it vektorizovaným výrazem. Jiº známý p°íklad z minulé p°edná²ky: vyhledávání prvk· pomocí logického indexování.
Z. Koldovský
MATLB: p°edná²ka 2
Vektorizace a skládání výraz· a p°íkaz·
V Matlabu se obecn¥ snaºíme vyhnout cykl·m. Jsou pomalé, vytvá°í zbyt¥£n¥ dlouhý kód, m·ºe nastat problém s doalokováváním. Nap°.
y=[]; % prázdné pole for x=1:10000 y=[y x]; % na konec pole y p°idáme prvek x end V cyklu
for
£asto zpracováváme postupn¥ v²echny prvky pole,
tzv. po prvcích. To lze £asto °e²it vektorizovaným výrazem. Jiº známý p°íklad z minulé p°edná²ky: vyhledávání prvk· pomocí logického indexování.
Z. Koldovský
MATLB: p°edná²ka 2
Vektorizace a skládání výraz· a p°íkaz·
V Matlabu se obecn¥ snaºíme vyhnout cykl·m. Jsou pomalé, vytvá°í zbyt¥£n¥ dlouhý kód, m·ºe nastat problém s doalokováváním. Nap°.
y=[]; % prázdné pole for x=1:10000 y=[y x]; % na konec pole y p°idáme prvek x end V cyklu
for
£asto zpracováváme postupn¥ v²echny prvky pole,
tzv. po prvcích. To lze £asto °e²it vektorizovaným výrazem. Jiº známý p°íklad z minulé p°edná²ky: vyhledávání prvk· pomocí logického indexování.
Z. Koldovský
MATLB: p°edná²ka 2
Vektorizace a skládání výraz· a p°íkaz· P°íklad: Výpo£et log10 (x ) na intervalu [0.01,10] s krokem 0.01
index=0; for x=0.01:0.01:10 index=index+1; y(index)=log10(x); end versus
x=0.01:0.01:10; y=log10(x); versus
y=log10(0.01:0.01:10);
Z. Koldovský
MATLB: p°edná²ka 2
Vektorizace a skládání výraz· a p°íkaz· P°íklad: Výpo£et sin
2 (x ) cos(x )
na intervalu [1,20] s krokem 0.1
index=0; for x=1:0.1:20 index=index+1; y(index)=sin(x)^2*cos(x); end versus
x=1:0.1:20; y=sin(x)^2*cos(x); % toto je ²patn¥! y=sin(x).^2.*cos(x);
Z. Koldovský
MATLB: p°edná²ka 2
Vektorizace a skládání výraz· a p°íkaz· P°íklad: Ode£tení °ádkových pr·m¥r· z °ádk· matice A
for i=1:size(A,1) for j=1:size(A,2) prumer=0; for k=1:size(A,2) prumer=prumer+A(i,k); end prumer=prumer/size(A,2); A(i,j)=A(i,j)-prumer; end end % tohle je katastrofa: zápo£et nikdy! versus
for k=1:size(A,1) A(k,:)=A(k,:)-mean(A(k,:)); end Z. Koldovský
MATLB: p°edná²ka 2
Vektorizace a skládání výraz· a p°íkaz· P°íklad: Ode£tení °ádkových pr·m¥r· z °ádk· matice A
A = A - repmat(mean(A,2),1,size(A,2)); % repmat vytvá°í pole "dlaºdicováním" první prom¥nné versus
A = A - mean(A,2)*ones(1,size(A,2)); % £astý trik s vyuºitím maticového násobení versus
A = bsxfun(@minus,A,mean(A,2)); % pouºití speciální funkce bsxfun
Tento materiál vznikl v rámci projektu ESF CZ.1.07/2.2.00/28.0050
Modernizace didaktických metod a inovace výuky technických p°edm¥t·,
který je spolunancován Evropským sociálním fondem a státním rozpo£tem R. Z. Koldovský
MATLB: p°edná²ka 2