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
  • 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.

© 2010-2024 BME MIT | Hibajelentés | Használati útmutató