Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Matlab program és programozási nyelv Farkas Csaba1
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
˝ lesz szó Mirol
1
Bevezetés Rövid történelem-forrás wikipédia.hu
2
Matlap programozási nyelv Változók Mátrixok,vektorok Pontosvesszo˝
3
Matlab mûveletek
4
Kirajzolások, kész programok Felületek kirajzolása
5
Matlab függvények
Kirajzolások, kész programok
Matlab függvények
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
A MATLAB (MATrix LABoratory = mátrix laboratórium) egy interaktív, tudományos és mûszaki számítások elvégzésére kifejlesztett, mátrixalapú, magas színtû programozási nyelv. A MATLAB egy speciális programrendszer, amely numerikus számítások elvégzésére lett kifejlesztve és emellett egy programozási nyelv. A The MathWorks által kifejlesztett programrendszer képes mátrix számítások elvégzésére, függvények és adatok ábrázolására, algoritmusok implementációjára és felhasználói interfészek kialakítására. Habár a szoftver kizárólag numerikus, a MuPAD csomag hozzáadásával képes matematikai kifejezéseket grafikusan is megjeleníteni. 2004-ben, hivatalos információk alapján, a MATLAB több, mint 1 millió felhasználóval rendelkezett.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Rövid történelem-forrás wikipédia.hu
A MATLAB-ot az 1970-es évek elején Cleve Moler kezdte el fejleszteni, az akkori Új-Mexikói Egyetem Számítástudományi Intézetének elnöke. Kezdetben csak a diákjai munkáját tervezte megkönnyíteni, hogy ezen keresztül el tudják érni a LINPACK és EISPACK csomagokat Fortran tudás nélkül. Hamarosan elterjedt más egyetemek hallgatói és munkatársai ˝ érdeklodésre ˝ között is és így eros tett szert az alkalmazott matematikával foglalkozók körében. Jack Little, egy mérnök, Molernél tett látogatása során felismerte a MATLAB-ban lévo˝ ˝ lehetoségeket 1983-ban.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Rövid történelem-forrás wikipédia.hu
Utána nem sokkal csatlakozott Molerhez és Steve Bangert-hez, majd újraírták a MATLAB-ot C nyelven és megalapították a The MathWorks-ot 1984-ben. Ezek az újraírt könyvtárak JACKPAC néven váltak ismerté. 2000-ben a MATLAB-ot ismét újraírták, hogy újabb módszereket alkalmazzon a mátrixokkal való ˝ született a LAPACK csomag. muveletekre, ˝ ebbol ˝ A MATLAB eloször az irányítástechnikával foglalkozók körében lett alkalmazva, ami Little szakterülete volt, de gyorsan elterjedt más területeken is. Manapság szintén használatos még az oktatásban, különösen a lineáris algebra és numerikus analízis szemléltetésében és népszeru˝ még a képfeldolgozással foglalkozó kutatók között is.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Változók
A Matlab nyelv egy interpreter. A változókat létrehozzuk, nincs szükség azok deklarálására. A változókat megfeleltetésekkel hozzuk létre. A változók lehetnek: valós típusúak – például a=ones(5,1);, amelyekrõl a rendszer megjegyzi, hogy mekkorák és a megfelelõ mennyiségû memóriát lefoglalja. A változók alapértelmezetten mátrixok, azonban lehetõség van magasabb fokú tenzorok definíciójára is, például az b=ones(5,5,2); egy 5 × 5 × 2-es méretû tenzort hoz létre, mely két darab 5 × 5-ös mátrixot tárol és melyekre a b(:,:,1), valamint a b(:,:,2) parancsokkal hivatkozunk. Egy mátrixban egy egész sort kettõsponttal választunk ki. A Matlab-ban nincsenek egész vagy logikai típusú változók. sztring típusúak – például s=’a1b2c3d4’ egy sztringet hoz létre. A sztringek karakter típusú vektorok, melyekkel az összes mátrix mûvelet is végezhetõ. cella típusúak – például c={’sty’,[1;2;3;4;5;6],2}, mindegyik elem lehet különbözõ típusú és méretû. A cellák elemeire a c{3} jelöléssel hivatkozunk és nem tudunk a vektorokra illetve a mátrixokra jellemzõ mûveletek alkalmazni azokon.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Változók
Az egész MATLAB programrendszer, a MATLAB nyelv köré épül, amit néha M-code-nak vagy egyszeruen ˝ M-nek hívnak. A legegyszerubb ˝ módja az M-code fordításának az, hogy a fordítandó programot begépeljük a >> prompt után, a Command Windowban, ami a MATLAB felület része. Ebben az esetben a MATLAB egy interaktív matematikai burokként fog muködni. ˝ Ha az M-code több sorból áll, érdemes a MATLAB Editort használni, amivel akár saját függvényt is készíthetünk.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Változók
Mint általában, a Matlab rendszerben is segít a help parancs, mely egy adott parancshoz ad magyarázatot: a help
a függvényhez tartozó magyarázatot jeleníti meg. A rendszerbe be van építve egy további segítség, a demo parancs, mely példákon keresztül mutatja be a Matlab mûködését és az interpreter jelleg által nyújtott lehetõségeket.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Változók
Változókat az értékadó operátorral lehet deklarálni, ami az =. A MATLAB egy dinamikusan típusos nyelv, ami azt jelenti, hogy a változókat típusdeklaráció nélkül is lehet használni, kivéve ha szimbolikus ˝ objektumnak szánjukoket. A változók, az értékeiket kaphatják konstansokból, számításokból vagy egy függvény visszatérési ˝ is. értékébol
1
6
11
>> x = 17 x = 17 >> x = ’hat’ x = hat >> x = [3*4, pi/2] x = 12.0000 1.5708 >> y = 3*sin(x) y = -1.6097 3.0000
Matlab függvények
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Mátrixok,vektorok
A MATLAB egy "Mátrix Laboratórium", így többféle 3 kényelmes megadási módját kínálja a vektoroknak, mátrixoknak és 8 többdimenziós tömböknek. A tömböket ciklus használata nélkül is fel lehet tölteni az 13 alábbi szin˝ taxissal:mettol:mennyivel:meddig.
>> array = 1:2:9 array = 1 3 5 7 9 >> array = 1:3:9 array = 1 4 7 >> array = 1:5 array = 1 2 3 4 5 >> A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Mátrixok,vektorok
A MATLAB nyelvben, ahogy a matematikában is, a tömbök és ˝ kezdodik. ˝ mátrixok indexelése 1-tol A legtöbb programozási nyelvben ez leggyakrabban 0-tól történik. A mátrixokat, az elemek felsorolásával is ˝ meg lehet adni szóközzel vagy veszovel elválasztva úgy, hogy a listát szögletes zárójelek ([]) között helyezzük el. A pontosvesszo˝ azt jelenti a felsorolásban, hogy az utána álló elemek a következo˝ sorba kerüljenek. A kerek zárójelek használatával ˝ al-mátrixok is megjeleníthetoek.
4
9
14
>> A = 9 A = 16 3 5 10 9 6 4 15
[16 3 2 13; 5 10 11 8; 6 7 12; 4 15 14 1] 2 13 11 8 7 12 14 1
>> A(2,3) ans = 11 >> A(2:4,3:4) ans = 11 8 7 12 14 1
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Pontosvesszo˝
Más programozási nyelvekkel ellentétben, ahol a pontosvesszo˝ (;) választja el egymástól a parancsokat, a Matlabban, a ˝ Ha egy parancs végén parancsok kiírása függ tole. pontosvesszo˝ szerepel, akkor nem kerül kiíratásra. Ellenkezo˝ esetben kiíródik. Ha egy parancs vagy függvény nem rendelkezik visszatérési étékkel, akkor ugyanaz történik a pontosvesszo˝ megléte vagy hiánya nélkül is.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
A Matlab nyelvben a vektorokra jellemzõ mûveletek jelölése intuitív: a mátrix transzponáltját a bt=b’ mûvelet, a mátrix-szorzatot a c=b(:,:,1)*a jelöli. Amennyiben a mûveletek operandusai nem megfelelõ méretûek, a rendszer hibaüzenetet ír ki. A szokásos aritmetikai mûveleteken kívül ismeri a rendszer a hatványozást is, a ˆ jelöléssel, melyek mind érvényesek a mátrixokra is. Az osztáshoz például két mûvelet is tartozik, melyek az A · X = B ⇔ X = A\B, valamint a X · A = B ⇔ X = A/B lineáris egyenleteket oldják meg. Sokszor szeretnénk, ha elemenként végezne a rendszer mûveleteket a mátrixokon, ezt a mûveleteknek pontokkal való prepozíciójával tesszük. Például a C=(b(:,:,2)) ˆ 2 a mátrix önmagával való szorzásának az eredményét, a C=(b(:,:,2)). ˆ 2 a mátrix elemeinek a négyzeteit tartalmazó mátrixot adja eredményül.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
A plot függvény segítégével 2 dimenzióban ábrázolhatunk függvényeket, ahol az x tömb tartalmazza a megjelenítendo" tartományt, az y tömb pedig a függvényt.
4
Kirajzolások, kész programok
Matlab függvények
clc% lasd a fuggvenyek kozott , vagy help clc x = 0:pi/100:2*pi; y = sin(x); plot(x,y);
Bevezetés
1
6
Matlap programozási nyelv
Matlab mûveletek
%parametrikusan kirajzolva egy gorbe clc; t=1:0.01:10; x=sin(2*t); y=sqrt(sin(t)); axis equal; box on; plot(x,y)
Kirajzolások, kész programok
Matlab függvények
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Felületek kirajzolása
3-dimenziós függvényeket a surf, plot3 és mesh függvényekkel lehet megjeleníteni. Az [u, v] = meshgrid(x, y) két mátrixot állít ˝ amelyek az x, y rácsrendszert definiálják. Haszna: összes elo, lehetséges (uij,vij) pontokkal definiált rácson z = f (u, v) utasítással pontonként értékeket definiálhassunk. Ha a háló négyzetes, akkor írhatjuk: [X, Y] = meshgrid(x) ami megfelel a [X, Y] = meshgrid(x, x)-nek. 2
7
3
8
clc; x=-4:.1:4; y=-3:.1:3; [X,Y] = meshgrid(x,y); Z = X.^2 - 2*(X.*Y) + 3*Y + 2; rotate3d; surf(X,Y,Z); N=10*pi; t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t); grid on for j=0:pi/50:N plot3(sin(N-j),cos(N-j),N-j,’ro’); hold on; pause(0.2) end
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Felületek kirajzolása
plot3(x,y,z,str) Kirajzolja és egy vonallal összeköti az x, y,z vektorok által megadott összes (xi , yi , zi ) pontot a háromdimenziós koordinátarendszerben. A vektorok csak egyenlo˝ hosszúak lehetnek. A plot3 utasításban szereplo˝ str sztring paraméterrel a rajz színét és a rajz vonaltípusát definiálhatjuk.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Felületek kirajzolása
plot3(x,y,z,str) Kirajzolja és egy vonallal összeköti az x, y,z vektorok által megadott összes (xi , yi , zi ) pontot a háromdimenziós koordinátarendszerben. A vektorok csak egyenlo˝ hosszúak lehetnek. A plot3 utasításban szereplo˝ str sztring paraméterrel a rajz színét és a rajz vonaltípusát definiálhatjuk. plot3(x1,y1,z1,str1,x2,y2,z2,str2,...) Több grafikont készít ugyanabban a koordinátarendszerben, a megfelelo˝ str1, str2,... színés vonaltípusok szerint. Ha nem adjuk meg a szín és a vonalfajtát, akkor a Matlab fogja megválasztani azt
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Felületek kirajzolása
plot3(x,y,z,str) Kirajzolja és egy vonallal összeköti az x, y,z vektorok által megadott összes (xi , yi , zi ) pontot a háromdimenziós koordinátarendszerben. A vektorok csak egyenlo˝ hosszúak lehetnek. A plot3 utasításban szereplo˝ str sztring paraméterrel a rajz színét és a rajz vonaltípusát definiálhatjuk. plot3(x1,y1,z1,str1,x2,y2,z2,str2,...) Több grafikont készít ugyanabban a koordinátarendszerben, a megfelelo˝ str1, str2,... színés vonaltípusok szerint. Ha nem adjuk meg a szín és a vonalfajtát, akkor a Matlab fogja megválasztani azt mesh(z,c) Kirajzolja a z mátrix hálós rajzát. Ekkor a rácsozatot az (i, j) mátrixindexek definiálják, a függvényértékek a mátrix zij elemei. A c paraméterben a színmátrixot adhatjuk meg.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Felületek kirajzolása
plot3(x,y,z,str) Kirajzolja és egy vonallal összeköti az x, y,z vektorok által megadott összes (xi , yi , zi ) pontot a háromdimenziós koordinátarendszerben. A vektorok csak egyenlo˝ hosszúak lehetnek. A plot3 utasításban szereplo˝ str sztring paraméterrel a rajz színét és a rajz vonaltípusát definiálhatjuk. plot3(x1,y1,z1,str1,x2,y2,z2,str2,...) Több grafikont készít ugyanabban a koordinátarendszerben, a megfelelo˝ str1, str2,... színés vonaltípusok szerint. Ha nem adjuk meg a szín és a vonalfajtát, akkor a Matlab fogja megválasztani azt mesh(z,c) Kirajzolja a z mátrix hálós rajzát. Ekkor a rácsozatot az (i, j) mátrixindexek definiálják, a függvényértékek a mátrix zij elemei. A c paraméterben a színmátrixot adhatjuk meg. mesh(x,y,z,c) Kirajzolja a z mátrix hálós rajzát a c mátrixnak megfelelo˝ színekkel, csak most a rácsozatot az (xij , yij ) pontpárok definiálják. (ha x hossza m, y-é n, akkor z m × n-es mátrix)
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
Felületek kirajzolása
plot3(x,y,z,str) Kirajzolja és egy vonallal összeköti az x, y,z vektorok által megadott összes (xi , yi , zi ) pontot a háromdimenziós koordinátarendszerben. A vektorok csak egyenlo˝ hosszúak lehetnek. A plot3 utasításban szereplo˝ str sztring paraméterrel a rajz színét és a rajz vonaltípusát definiálhatjuk. plot3(x1,y1,z1,str1,x2,y2,z2,str2,...) Több grafikont készít ugyanabban a koordinátarendszerben, a megfelelo˝ str1, str2,... színés vonaltípusok szerint. Ha nem adjuk meg a szín és a vonalfajtát, akkor a Matlab fogja megválasztani azt mesh(z,c) Kirajzolja a z mátrix hálós rajzát. Ekkor a rácsozatot az (i, j) mátrixindexek definiálják, a függvényértékek a mátrix zij elemei. A c paraméterben a színmátrixot adhatjuk meg. mesh(x,y,z,c) Kirajzolja a z mátrix hálós rajzát a c mátrixnak megfelelo˝ színekkel, csak most a rácsozatot az (xij , yij ) pontpárok definiálják. (ha x hossza m, y-é n, akkor z m × n-es mátrix) surf(x,y,z,c) Megrajzolja az (xij , yij , zij ) pontokra illeszkedo˝ felületeket. Ha x, y vektorok hossza m és n, akkor z mátrixnak n × m-esnek kell lennie, a felületeket az (xi , yj , zij ) pontok definiálják. Ha az x, y paraméterek hiányoznak, a Matlab egyenletes téglalaprácsot vesz fel. c a színmátrix.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
A programokban gyakran alkalmazzuk a következõ függvényeket: rand – egy véletlen számot térít vissza a [0, 1] intervallumból az intervallumon egyenletes eloszlást feltételezve. Argumentum nélkül a függvény egy nulla és egy közötti véletlen számot, egy argumentummal egy k × k méterû véletlen mátrixot, egy vektorra pedig egy tenzort térít vissza, melynek méreteit a vektor elemei tartalmazzák. A randn hasonlóan véletlen változókat visszatérítõ függvény, azonban azok nulla átlagú és egy szórású normális eloszlást követnek. ones – a fenti esethez hasonlóan egy vektort, mátrixot vagy tenzort térít vissza, azonban az elemeket 1-gyel tölti fel. A zeros az elemeket lenullázza. linspace – a bemenõ argumentumok skalárisak és a függvény visszatéríti az elsõ két argumentum mint intervallum N részre való felosztásának a vektorát; az N a harmadik bemenõ változó. randperm – egy argumentummal a k hosszúságú [1, . . . , k] vektor egy véletlen permutációját téríti vissza. union – a lista elemeit halmazként használva egyesíti a két bemenõ halmazt. setdiff – a lista elemeit halmazként használva visszatéríti az argumentumok metszetét. Használhatjuk még a unique és az ismember parancsokat a halmazzal való mûveletekre.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
find – indexeket térít vissza. Egy vektor azon elemeinek indexét, mely egy bizonyos feltételnek eleget tesz. Használják a vektor elemeinek szelekciójára. repmat – elsõ argumentuma egy mátrix, amit adott sokszorossággal bemásol az eredménybe. A sokszorosságot a második argumentum adja meg. reshape – argumentumai egy vektor vagy mátrix illetve egy méret paraméter. A függvény az elsõ argumentum elemeit a második argumentumban található méretek szerint formázza át. Pl. a v 256 hosszú vektort az m 16 × 16-os vektorba a m=reshape(v,[16,16]) paranccsal alakítjuk át. meshgrid – az elsõ argumentum elemeit X-tengelyként, a második argumentumét Y-tengelyként használva két m × n-es mátrixot térít vissza, ahol az elemek a négyzetháló X, illetve Y koordinátái oszlop-szerinti bejárásban. Hasznos amikor egy felületet szeretnénk kirajzolni. diag – ha a bemenõ argumentum egy mátrix, akkor az átlón levõ elemek vektora az eredmény, ha pedig egy vektor, akkor az az átlós mátrix, mely nulla a fõátló elemeit kivéve, ott meg a bemenõ vektor elemei találhatók. Igaz a b = diag(diag(b)) állítás. inline – egy függvény, mely segít rövid függvényeket – általában egysorosakat – definiálni, a függvényekben az alapértelmezett argumentum az x, több argumentum esetén a sorrendet is lehet specifikálni.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
load – egy korábban elmentett állapottér változóit állítja vissza. A változók elmentéséhez használjuk a save parancsot. fprintf – egy vektor eleit formázva kiírja, a ’C’-hez hasonló szintakszisban. Hasonlóan mûködnek a disp, a sprintf, valamint a num2str parancsok. acosd – az argumentumra alkalmazott inverz koszinusz függvény, fokokban kifejezve. Más trigonometriai függvények a szokásosak: sin, cos, tan, atan, melyeket lehet elemenként és egyben is alkalmazni, ekkor az eredmény a vektorok elemeire alkalmazott mûveletek vektora. chol – egy négyzetes pozitív definit mátrix Cholesky-felbontása. Az A mátrix Cholesky-alakja egy olyan C mátrix, mely csak a fõátlón és az alatt tartalmaz nullától különbözõ elemeket és fennáll az A = C · CT egyenlõség. Figyeljük meg, hogy a Cholesky-alakot a négyzetgyök általánosításának lehet tekinteni. plot – két vektort megadva kirajzolja az (x1 (i), x2 (i)) pontokat és azokat összeköti egy vonallal. Egy argumentum esetén x1 = [1, . . . , N ] és x2 a bemenõ paraméter. Opcionálisan lehet stílusparamétereket is megadni. A plot3 paranccsal háromdimenzióban lehet pontokat, vonalakat megjeleníteni. hist – egy adott adatvektor elemeinek a gyakoriságát rajzolja ki. Alapértelmezetten a vektor legkisebb és legnagyobb eleme közötti intervallumot osztja fel 10 részre és számolja az egyes szakaszokba esõ pontok számát. Úgy az intervallum mérete, mint a részintervallumok számossága illetve mérete változhat.
Bevezetés
Matlap programozási nyelv
Matlab mûveletek
Kirajzolások, kész programok
Matlab függvények
contour – egy Z mátrix által definiált felület kontúrjait rajzolja ki. A felület generálásánál általában használjuk a meshgrid parancsot. A felületek rajzolására használhatjuk a surf parancsot is. figure – létrehoz egy új ábrát illetve, amennyiben létezik a kívánt ábra, akkor aktívvá teszi azt. subfigure mnk – létrehoz az ábrán egy részábrát úgy, hogy az eredeti ábra terét m × n részre osztja, majd annak a k-adik komponensét teszi aktívvá. xlim – az aktuális rajzon beállítja az X tengely alsó és felsõ határát. Ugyanígy mûködnek az ylim és zlim parancsok az Y illetve a Z tengelyekre. quadprog – az xT Hx + bT x + c másodfokú egyenlet minimumát határozza meg, ahol feltételezzük, hogy a megoldásokat az Ax > 0 konvex doméniumra szûkítjük.