1. Způsoby zadání vektorů, ukládání proměnných >> repmat(a,2,2) ans = 1 1 >>M = [ ] >>A(m,:) = [ ] >>A(:,n) = [ ]
2 2
3 1 2 3 3 1 2 3 …uloží prázdnou matici …smaže m-tý řádek matice A …smaže n-tý sloupec matice A
indexace >>a=[1 3 2 4 5 7 9 2]; >>a1=a(6) a1 = 7 >>a=[1 3 2 4 5 7 9 2]; >>a1=a([6 1 3 2]) a1 = 7 1 2
…index skaláru …index vektoru …vybere hodnotu 6.,1.,3.,2.prvku vektoru a 3
>>a1=a; >>a1([2 4 6])=[-5 -4 -3] …nahrazeni prvku pole a1 = 1 -5 2 -4 5 -3
9
2
>>A=[16,3,2,13;5,10,11,8;9,6,7,12;4,15,14,1]; >>A(:,[1 3 2 4]) …přeuspořádání sloupců podle indexů ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
2. Logické funkce, logické operace Logické funkce all(x) any(x) exist('x') finite(x); isinf(x) isempty(x) isstr(x)
Pravda (1) jestliže všechny prvky x jsou pravdivé Pravda (1) jestliže aspoň jeden prvek x je pravdivý Kontroluje, zda funkce nebo proměnná x existuje Pravda (1) jestliže prvek x je konečný; resp. nekonečný Pravda (1) jestliže matice je prázdná Pravda (1) jestliže x je textový řetězec
Logické operace užitím relačních operátorů >> z=[1 3 6 7 3]; z>2 ans = 0 1 1 1 1 >> X=1:10; X(X<5) ans = 1 2 3 4 Logické indexy >>a=[1 3 2;4 6 5;7 8 9]; a(a>3 & a<7) ans = 4 5 6 >>a(a>1 & a<7)=[0] ans = 1 0 0 0 0 0 7 8 9
3. Práce s řetězci Znakové řetězce v PC-MATLABu jsou vymezeny apostrofy: >>s = 'Hello'; Text je uložen ve vektoru, každý element obsahuje jeden znak. Znaky jsou uloženy jako ASCII hodnoty, funkci abs můžeme použít k vypsání jejich ASCII kódů: >>abs(s) Skládání řetětzců je tudíž ekvivalentní skládání vektorů – >>s = [s 'World'] dá text 'Hello World'. K převodu čísel na znakovou reprezentaci jsou k dispozici funkce sprintf, num2str, int2str. K vytváření jednoduchých textových maker slouří funkce eval. >>eval(t) , kde t je řetězec. Funkce způsobí, že t se interpetuje jako příkaz nebo část výrazu. Příklad vhodného použití této funkce ..viz funkce funm ze standardní knihovny. Text a řetězce: eval num2str int2str setstr sprintf isstr strcomp hex2num
vyhodnocení textového makra převod čísla na řetězec převod celého čísla na řetězec nastavení značky udávající, že matice je řetězec převod čísla na řetězec detekce řetězcových proměnných porovnávání řetězcových proměnných převod hex-řetězce na číslo
>>eval
…vyvolá řetězec, který chápe jako Matlabovský výraz nebo příkaz.
>>x=[1 3 1 5 9]; >>st='sqrt(sum(x.*x))';%delka vektoru >>eval(st) ans = 10.8167
Příklad užití textového řetězce >> str='Ahoj. Který je den, mesic a rok?'; …definice proměnné přes řetězec >>disp(str) …zobrazeni řetězce Ahoj. Který je den, mesic a rok? >>size(str) % delka retezce ans = 1 32 >> str([1:15,29:32])% pristup k urcitym prvkum retezce ans = Ahoj. Který je rok? Použití funkce strcat k řetězení znakových polí: >> a1=input('jmeno :','s') jmeno :pokus a1 =pokus >> a2=input('pripona :','s') pripona :txt a2 =txt >> U1=strcat(a1,'.',a2) U1 =pokus.txt Použití funkce num2str k převodu čísla na řetězec: >>y = num2str (x) …převede pole x na znakové pole s přesností na 4 desetinná místa
4. Načtení dat z jiného software Funkce textread čte formátovaná data z textového souboru. [A,B,C,...] = textread ('soubor','format') čte dle zadaných formátů : %s –řetězec, %f –číslo v pohyblivé řádové čárce, %u –celé číslo, %c- znak >> [x,y] = textread('demo.txt','%s %s')
Funkce image načte soubory ve formátech obrázku (*.jpg, *.tiff, …) >>image(C) zobrazí proměnnou C, která musí být uložen v Workspace. >>A=imread('obraz.jpg') načte obrazový soubor do proměnné A >>imwrite(A, 'obraz1.jpg') z Matlabu uloží soubor A do obrazového formátu *.jpg pod názvem obraz
5 Základní grafika x=0:0.05:5; y=sin(x.^2); plot(x,y);
x = -2.9:0.2:2.9; bar(x,exp(-x.*x));
x=0:0.25:10; stairs(x,sin(x));
x=-2:0.1:2; y=erf(x); e = rand(size(x))/10; errorbar(x,y,e);
t=0:.01:2*pi; polar(t,abs(sin(2*t).*cos(2*t )));
x = 0:0.1:4; y = sin(x.^2).*exp(-x); stem(x,y)
t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t) axis square; grid on
z=peaks(25); mesh(z); colormap(hsv)
z=peaks(25); surf(z); colormap(jet);
z=peaks(25); surfl(z); shading interp; colormap(pink);
z=peaks(25); contour(z,16); colormap(hsv)
x = -2:.2:2; y = -1:.2:1; [xx,yy] = meshgrid(x,y); zz = xx.*exp(-xx.^2-yy.^2); [px,py] = gradient(zz,.2,.2); quiver(x,y,px,py,2);
nastavení typu, tlouštky a barvy čáry >>h1=plot(t,y1,t,y2) >>set(h1,'LineWidth',2,{'LineStyle’},{'--'; ': '}) >>set(h1,{'Color'},{'r';'g'})
3-D graf
>>Z=peaks(20); vytvoření matice 20 x 20 s hodnotami z Gaussova rozdělení >>h=surf(Z); funkce na vykresleni 3-D grafu >>colormap hot výběr barevné mapy >>shading interp nastavení stínování >>set(h,'EdgeColor','k') nastavení osvětlení >>light('Position',[-2,2,20])
>>lighting phong >>material([0.4,0.6,0.5,30]) >>set(h,’FaceColor’,[0.7 0.7 0], 'BackFaceLighting', 'lit') nastavení pohledu >>view([30,25]) >>set(h,'CameraViewAngleMode','Manual') nastavení rozsahu os >>axis([5 15 5 15 -8 8]) >>set(h,'ZTickLabel','Negative||Positive') nastavení poměru stran obrázků >> set(h,'PlotBoxAspectRatio',[2.5 2.5 1])