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
-
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.
Csordás Péter, 2011. december 23. 19:25 | Legutóbb frissítve: 2018. január 31. 12:19