Rövid MATLAB ismertető (régi, de használható)
MATLAB bevezető a 7-es méréshez
A MATLAB egy hatékony interpreter, amelyben előre megírt függvények és eszköztárak segítik a felhasználót a gyors algoritmusfejlesztésben és az adatok megjelenítésében. Szintaktikája hasonlít a C nyelvére.
A következőkben egy nagyon vázlatos áttekintést adunk a MATLAB használatáról. Messze nem fedjük le a MATLAB képességeit ezzel a rövid bevezetővel, a cél a Laboratórium II. tárgy 7. mérésének (A/D és D/A átalakítók) segítése.
A MATLAB elindítása
A MATLAB elindítása Windows-os környezetben nem okozhat nehézséget: a megfelelő ikonra kattintva a MATLAB elindul, és egy integrált (verziófüggő) fejlesztőkörnyezet jelenik meg. A legfontosabb ablak a command window (parancssor), amelyben >> jelzi a helyet, ahová parancsokat írhatunk.
Help
A MATLAB-ban segítség a help parancs parancssorba történő begépelésével érhető el, valamint a help menüben (F1 billentyű). A parancssori help hatására megjelennek azok a függvénycsoportok, amelyeket a MATLAB ismer, egy rövid leírással együtt. Az adott függvénycsoportra kérve help-et, (pl. help matlab\elfun), a függvénycsoporton belül lévő függvényekről kapunk rövid leírást. Az adott függvényre kérve helpet (pl. help atan2), részletes leírást kapunk a függvényről ill. használatának módjáról.
Hasznos parancs a lookfor is, amely a függvények rövid, egymondatos leírásában keresi a megadott kulcsszót. Pl. a binomiális együttható nem létezik binom függvény formájában, de lookfor binom segítségével kideríthető, hogy az nchoosek függvény implementálja.
Újabb verziókban részletes, html-formátumú help is rendelkezésre áll, amely egyrészt a help menün keresztül érhető el (F1 billentyű), ill. a doc <függvénynév> parancs segítségével.
Ha nagyon bizonytalanok vagyunk, gépeljük be a help help, help doc vagy a doc help parancsot. Végső elkeseredés esetén a why parancs is rendelkezésünkre áll, ami bármilyen problémánkra kész megoldással válaszol (egy lehetséges válasz: Pete wanted it that way.).
MATLAB mint számológép
Próbáljuk meg a következő néhány, a >> jelek mögött álló kifejezéseket begépelni a MATLAB-ba. A következő válaszokat kapjuk:
>> 2+3 ans = 5 >> 2+3; >> sqrt(exp(cos(pi))) ans = 0.6065
Látható, hogy a ;, azaz pontosvessző arra való, hogy a művelet eredménye ne jelenjen meg az ablakban. Ez különösen akkor fontos, ha a kiszámolt eredmény mondjuk 1000 elemből áll. Ilyenkor elég sokáig tart, mire a MATLAB mindet kiírja a képernyőre, és teljesen felesleges is.
A már beírt kifejezések visszakeresését segíti a MATLAB. A felfelé nyíl gombot nyomogatva, sorban előjönnek a már beírt parancsok, sőt, az első néhány betű beírásával szűkíthetjük a parancsokat. Pl. az előbbi három parancs beírása után beírva egy 2-est, majd megnyomva a felfelé nyilat, a 2+3; parancs jelenik meg.
Ügyeljünk a log, log2 és log10 függvények helyes használatára!
Változók deklarálása
A MATLAB-ban a változók akkor jönnek létre, amikor inicializáljuk őket. Pl.
x=1; %a százalékjel mögé tehetsz bármikor megjegyzést, comment-et. y=3; z=2*y+3
A változókat a who ill. whos paranccsal kérdezhetjük le, ahol az utóbbi részletes adatokkal szolgál a változókról. Ha egy változóra már nincs szükségünk, a clear <valtozo> paranccsal törölhetjük.
Változók betöltése, mentése
Tabulátorral elválasztott számokat tartalmazó ASCII fájlból a load és a save paranccsal tudunk betölteni ill. kimenteni adatokat. A létrejött változó az ASCII fájl neve. Ugyanezen két parancs szolgál a bináris mat-fájlok kezelésére is. Nézzük meg a két parancs helpjét.
m-fájlok, scriptek írása
Az m-fájlok olyan ASCII (.m) fájlok, amelyek MATLAB parancssorba beírható parancsokat tartalmaznak. Egy m-fájl futtatható a saját könyvtárából, ha a kiterjesztés nélküli nevét beírjuk a MATLAB parancssorba. Szerkesztése tetszőleges szövegszerkesztő programmal lehetséges, javasolt azonban a MATLAB beépített editorát használni (File menü, New, vagy edit myfile vagy open myfile) parancsok, mert ebben lehetőségünk van hibakeresésre, léptetésre, változók értékének lekérdezésére, valamint a szintakszis színes megjelenítése is segítségünkre van.
Javasoljuk, hogy a laboratóriumi mérés során a méréshez szükséges számításokat ilyen script-fájlokba írjuk. Így kisebb a valószínűsége az adatvesztésnek, ill. áttekinthetőbben, gyorsabban lehet dolgozni.
Vektorok, mátrixok
A MATLAB fő erőssége, hogy alapértelmezésben egyetlen adattípusa van, a mátrix. Így, az x=1; parancs egy 1x1-es mátrixot hoz létre. Nagyobb mátrixokat, vektorokat a következőképpen hozhatunk létre:
x=[1 2 3]; %sorvektor y=[1, 2, 3]; %ez is sorvektor z=[1; 2; 3]; %oszlopvektor z2=z'; %z transzponáltja, sorvektor A=[1 2 3 ; 4 5 6] %mátrix A=[1 2 3 4 5 6] %ugyanaz a mátrix B=A' %A transzponáltja B. a=2; b=7; A=zeros(a,b) %nulla elemeket tartalmazó mátrix A=ones(a,b) %csupa egy elemeket tartalmazó mátrix A=eye(10) %10x10-es egységmátrix A=rand(a,b) %0 és 1 közötti véletlenszámokat tartalmazó mátrix A=randn(a,b) %0 várható értékű és 1 szórású gaussi eloszlású véletlenszámokat %tartalmazó mátrix
Egy vektor elemeit zárójel segítségével választhatjuk ki. pl.
x=[1 2 3 4]; x(1) %vektor első eleme x(3) %vektor harmadik eleme x(end) %vektor utolsó eleme x([1 3]) %vektor első és harmadik eleme y=[2 1 3]; x(y) %vektor második, első és harmadik eleme
Ugyanez mátrix esetében:
A=[1 2 3 4; 5 6 7 8]; A(1,1) %mátrix 1,1-es eleme A(2,:) %mátrix második sora, itt a : operátor <minden> értelmű A(:,3) %mátrix harmadik oszlopa
Elemek kiválasztására használható még a find függvény, amely azon indexeket adja vissza, amelyekre az argumentumában megadott feltétel igaz. Pl.
a=-3:2:11; aind=find(a>2 & a<10) %aind=[4 5 6 7] a2=a(aind) %a2=[3 5 7 9]
Hasonló tesztelésre használhatóak az any, all, isnan, isfinite, isinf függvények.
Nagyon hasznos a :, azaz kettőspont operátor, egyrészt az előbbi szerepben (<minden> értelemben), valamint tartományok megadására:
N=10; x=1:N %az x vektorban 1-től, egyesével lesznek a számok, 10-ig. y=1:3:(N-1) %a számok hármasával nőnek, y=[1 4 7]. z=2:-1:-N) %a számok csökkennek, egyesével, kettőtől mínusz tízig.
Ez az operátor használható pl. bizonyos elemek kiválasztására is:
A(end,2:end) %mátrix utolsó sorának utolsó elemei
További hasznos függvények a sort (rendezés), a reshape ill. a flipud és fliplr (l. help).
Vektorok, mátrixok mérete:
A=randn(5,2); [r,c]=size(A) %az A mátrix két mérete l=length(A) %az A mátrix "hossza", ami nem más mint l=max(size(A)) %a nagyobbik méret
Műveletek vektorokkal, mátrixokkal
Összeadás, kivonás:
A=[1 2 3; 4 5 6]; B=[3 2 1; 6 5 4]; C=A+B C2=A-B
Hibajelzést kapunk, ha nem azonos méretű a két összeadandó.
Szorzás, osztás:
A=[1 2 3; 4 5 6]; B=[3 2 1; 6 5 4]; C=A*B %hibajelzés: Inner matrix dimensions must agree C=A*B' %így helyes
vektoroknál:
a=[1 2 3]; b=[3 2 1]'; c=a*b %az eredmény: egyetlen szám, a skaláris szorzat eredménye.
Ha elemenként akarunk műveletet végezni, akkor a ., azaz pont operátort kell használnunk:
A=[1 2 3; 4 5 6]; B=[3 2 1; 6 5 4]; C=A*B %hibajelzés: Inner matrix dimensions must agree C=A.*B %Helyes: elemenként azonos méretű mátrixokat lehet szorozni.
vektoroknál:
a=[1 2 3]; b=[3 2 1]'; c=a.*b %hiba: nem azonos méretűek. c=a.*b' %helyes.
Négyzetre emelés mátrixoknál:
A=[1 2; 4 5]; A2=A^2;
vagy elemenként:
a=[1 2 4 5]; a2=a.^2;
Ciklusszervezés, elágazások
Ciklusszervezésre a for-end valamint a while-end utasítás használható. Pl.
for I = 1:N, for J = 1:N, A(I,J) = 1/(I+J-1); end end
Elágazásokra az if, elseif, else, end használható, valamint a switch, case, otherwise. Ezekre a beépített help ad jó példákat.
Megjelenítés
A MATLAB segítségével könnyedén jeleníthetők meg függvények. A következőkben a két dimenziós ábrázolásokkal foglalkozunk. Az ehhez tartozó alapfüggvények a help matlab\graph2d segítsével jeleníthetők meg. A kész ábrát az ábra Edit menü, Copy Figure parancsával tehetjük vágólapra. Alapfüggvények:
plot - lineáris rajz loglog - log-log skálájú rajz semilogx - log x rajz semilogy - log y rajz
Rajz formázása:
axis - tengelyek skálázása és méretezése grid - rácsvonalak hold - az aktuális rajz megtartása/elengedése subplot - az ábra felosztása részábrákra
Feliratozás:
title - Ábra címe xlabel - X-tengely címke ylabel - Y-tengely címke legend - az egyes vonalakhoz magyarázatot rendel
Példa:
x=0:0.01:10; A=5; phi=-pi/2; y=A*cos(2*pi*x+phi); z=y.^2; plot(x,y); %kirajzolja az ábrát, automatikus színnel plot(x,y,x,z); %két vonalat rajzol plot(x,y,'r'); %kirajzolja az ábrát, piros színnel, %a pontokat összeköti lineárisan. plot(x,y,'r--'); %kirajzolja az ábrát, piros színnel, szaggatottan. plot(x,y,'.'); %kirajzolja az ábrát, csak a pontokat jelöli meg, ponttal plot(x,y,'d'); %kirajzolja az ábrát, csak a pontokat jelöli meg, %rombusszal (diamond) hold on %megtartja az előző rajzot plot(x,z,'g'); %a meglévő rajzra rárajzol még egy ábrát, zölddel. hold off %nem tartja meg az előző rajzokat. axis([0 5 -5 20]) %beállítja a tengelyeket grid on %bekapcsolja a rácsot title('cos és cos^2 függvények'); %cím xlabel('Bemenet'); %X tengely felirata ylabel('Kimenet'); %Y tengely felirata legend('cos(x)','cos^2(x)') %magyarázó címkék
Hasznos lehet még a stairs függvény, amely lépcsőzetesen köti össze az egyes pontokat, illetve a hist parancs, amely a megadott jel hisztogramját rajzolja ki.
További hasznos függvények a méréshez
format long; %pontosabb kijelzés beállítása log10; %10-es alapú logaritmus log2; %2-es alapú logaritmus sum; %elemek összege sqrt; %négyzetgyök-vonás atan2 %arcus tangens függvény a négy negyedsíkra abs; %abszolút-érték fft; %Fast Fourier Transform
Néhány példa
Egyenes illesztése két pontra:
x=0:10:1000; %bemenet y=3*x+7+0.1*randn(size(x)); %kimenet, a=3, b=7; i=3; %a ket pont, amire illesztünk j=93; %y(i)=a*x(i)+b ill. y(j)=a*x(j)+b, azaz %az illesztett egyenes két paramétere: a=(y(j)-y(i))/(x(j)-x(i)) b=y(i)-a*x(i)
Adott periódusú szinuszjel készítése:
p=5; %periódusok száma N=2^10; %minták száma A=0.5; %amplitúdó phi=0.2; %fazis rad/sec x=0:N-1; %idő y=A*cos(2*pi*p*x/N+phi); %generált koszinusz plot(x,y); title('cos(x)');
Egy torzított szinuszjel fft-je
y=A*cos(2*pi*p*x/N+phi); %generált koszinusz yd=atan(A*cos(2*pi*p*x/N+phi)); %torzított koszinusz yd=A/(max(abs(yd)))*yd; %normalizált torzított koszinusz figure(1) %első ábra plot(x,y,x,yd) %eredeti és torzított koszinusz rajza s_yd=abs(fft(yd)); figure(2) %második ábra plot(20*log10(s_yd(1:N/2))); title('torzított koszinusz fft-je') %rajz dB-ben h=s_yd(p+1:p:10*p+1) %a harmonikus komponensek listázása
Kikapcsolódás
Érdemes megnézegetni a következő függvényeket és implementációjukat: logo, membrane, peaks, magic(4), why, demos.
További irodalmak
-
A MATLAB-ban
- help, help <függvénynév>, lookfor <kulcsszó>;
- doc <függvénynév>;
- help menü, F1 billentyű;
-
Az interneten
- Getting Started MATLAB bevezető a MathWorks honlapján
- Keresőkérdés a Google-ben.
- MATLAB Basics a University of Utah egyik matematikusának honlapján
- Introduction to MATLAB a Texas A&M University matematikusának honlapján
- stb.
-
A könyvtárban, könyvesboltban, antikváriumban:
- Stoyan Gisbert (szerk.): MATLAB 4. és 5. verzió, Typotex, 1999. (átdolgozott kiadás várható néhány éven belül).
(c) Márkus János, BME MIT
Utoljára módosítva: 2005. február 28.