APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB -...

12

Click here to load reader

Transcript of APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB -...

Page 1: APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier

APLICAŢIA NR. 1

Introducere în MATLAB

1. Generalităţi

În cadrul acestei lucrări toate referinţele au în vedere MATLAB versiunea

5.3.0 (R11), 21.01.1999.

Matlab [1], [2] reprezintă un mediu de programare destinat calculului numeric

şi reprezentărilor grafice în domeniul ştiinţei şi ingineriei. Elementul de bază cu care

operează MATLAB este matricea. Este uşor de extins, prin faptul că orice utilizator

poate adăuga propriile funcţii sau le poate modifica pe cele existente. Folosind

funcţiile predefinite ale MATLAB-ului se obţine o importantă economie de timp în

crearea de noi aplicaţii. Deasemenea pachetul software include un set de funcţii

specifice (denumite “toolbox”) anumitor domenii, ca de exemplu:

- Reţele neuronale (“Neural Networks”);

- Logică fuzzy (“Fuzzy Logic”)

- Prelucrări de imagine (“Image Processing”);

- Prelucrări de semnal (“Signal Processing”);

- Undişoare (“Wavelet”)

- Achiziţie de date (“Data Aqusition”);

- Statistică (“Statistics”);

- Identificarea sistemelor (“System Identification”);

- Financiar (“Financial”).

Există posibilitatea modelarii, analizei şi simularii sistemelor dinamice, prin

descrierea acestora la nivel de schemă bloc prin intermediul mediului Simulink. În

Page 2: APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier

- 8 - Aplicaţia nr. 1 acestă categorie pot fi incluse, de exemplu, sisteme cu procesoare numerice de semnal

(“DSP Blockset”) sau sisteme bazate pe circuite electonice de putere (“Power System

Blockset).

Adăugând la cele de mai sus şi numeroasele posibilităţi de reprezentare

grafică 2 sau 3D a datelor şi posibilitatea interfaţării codului MATLAB cu cel scris în

“C” sau limbaj de asamblare pentru procesoarele de semnal, avem argumentele

necesare care să justifice implementarea aplicaţiilor cu reţele neuronale prin

intermediul MATLAB.

Se oferă în continuare noţiuni MATLAB elementare [3], necesare unei bune

înţelegeri ale aplicaţiilor prezentate în capitolele următoare.

2. Elemente de bază MATLAB

2.1 Linia de comandă

Se foloseşte de regulă pentru lansarea în execuţie a programelor sau pentru

diverse comenzi MATLAB. Un program MATLAB se aplelează tastând în linia de

comandă numele fişierului. O condiţie necesară rulării programului este setarea căii în

care acesta se găseşte (din meniul principal, opţiunea “File”, submeniu “Set path”). În

modul linie de comandă fiecare linie este prelucrată imediat şi rezultatele sunt afişate.

Linia de comandă nu este recomandată pentru scrierea fişierelor MATLAB.

2.2 Crearea programelor MATLAB (fişierelor script şi fişiere funcţie)

Un program MATLAB, caracterizat de extensia *.m, constă dintr-o

succesiune de instrucţiuni MATLAB, cu posibilitatea apelării altor fişiere. El

presupune mai multe linii de cod care se pot scrie apelând editorul MATLAB implicit.

Acesta se lansează prin comanda “Edit”.

Un fişier script conţine o secvenţă de comenzi. Dacă prima linie a fişierului

Page 3: APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier

Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier funcţie. O funcţie

diferă de un script prin faptul că poate lucra cu argumente.

Editorul oferă şi facilităţi de depanare (“debugging”) a programului prin

setarea unor puncte de oprire (“breakpoints”) şi rularea pas cu pas a programului.

Exemplul 1.1 Scrieţi o funcţie denumită “suma” care să preia drept argument două

variabile şi să returneze suma acestora.

Se apelează editorul prin comanda “edit” (fig.1.1).

Fig.1.1 Lansarea editorului pentru fişiere MAT:AB de tip *.m.

În urma acestei comenzi se poate introduce codul MATLAB aferent funcţiei

“suma” (fig.1.2). După salvarea fişierului (“File”, “Save As…”, suma.m) se poate

apela din linia de comandă nouă funcţie definită (fig.1.3).

2.3 Operaţii cu matrici

!" Definirea unei constante. Exemplu: » x = 2

!" Definirea unui vector. Exemplu: » y = [1 2 3 4 5]

Page 4: APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier

- 10 - Aplicaţia nr. 1

Fig.1.2 Editorul/debbuger-ul MATLAB folosit pentru scrierea şi depanarea fişierelor *.m.

Fig.1.3 Apelul funcţiei sumă, cu parametrii (6,4). Logic, rezultatul returnat va fi 6+4 = 10.

!" Definirea unei matrici. Exemplu: » A = [1 2 3;4 5 6;7 8 9]. Rezultatul va fi o

matrice 3x3 de forma:

Page 5: APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier

Introducere în MATLAB - 11 -

A =

1 2 3

4 5 6

7 8 9

!" Referirea unui elemet al unei matrici. Exemplu: » A(2,1)

ans =

4

!" Adunare +

!" Scădere –

!" Inmulţire *

!" Inmulţirea elementelor elementelor corespondente .*

!" Ridicarea la putere ^

!" Ridicarea la putere a elementelor corespondente .^

!" Impărţirea la stânga \ sau la dreapta /

!" Impărţirea la stânga .\ sau la dreapta ./ a elementelor corespondente

!" Transpusa unei matrici '

!" Schimbarea dimensiunilor matricii – funcţia reshape (X, M, N). Întoarce o

matrice de M linii şi N coloane cu elemente obţinute din matricea originală X .

2.4 Generarea vectorilor şi matricilor

!" Matrice nulă – funcţia zeros (M, N). Generează o matrice MxN cu toate

elementele egale cu 0.

!" Matrice unitate – funcţia ones (M, N). Generează o matrice MxN cu toate

elementele egale cu 1.

!" Matrice identică – funcţia eye (N, M). Generează o matrice MxN în care

diagonala matricii are elementele egale cu 1, restul elementelor matricii fiind

0.

Page 6: APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier

- 12 - Aplicaţia nr. 1 !" Generarea vectorilor cu pas liniar. Dacă se cunosc limitele intervalului şi pasul

dintre două elemente, vectorul va fi generat cu instrucţiunea:

x = xmin : pas : xmax

Dacă se cunosc limitele intervalului şi numărul de elemenete N se foloseste

comanda următoare:

x = linspace (xmin, xmax, N).

!" Generarea vectorilor cu pas logaritmic. Un vector x care va conţine N

elemente distribuite logaritmic între decadele [10xmin, 10xmax] se generează

astfel:

x = logspace (xmin, xmax, N)

2.5 Informaţii despre vectori/matrici

!" Dimensiunea unei matrici – funcţia size (A). Returnează un vector coloană

[M N] în care M reprezintă numărul de linii iar N reprezintă numărul de

coloane pentru matricea A.

!" Lungimea unui vector – funcţia length (x). Întoarce numărul de elemente ale

vectorului x.

2.6 Instrucţiuni şi fucţii de control

!" Repetarea unei secvenţe de program de un anumit număr de ori – instrucţiunea

FOR:

FOR variabilă = expresie,

grup de instrucţiuni,

END

!" Executarea condiţionată a instrucţiunilor – instrucţiunile IF, ELSEIF, ELSE.

Forma generală este:

IF expresie_1

Page 7: APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier

Introducere în MATLAB - 13 -

declaraţii_1

ELSEIF expresie_2

declaraţii_2

ELSE

declaraţii_3

END

Dacă expresie_1 este adevărată se vor executa numai declaraţii_1. Altfel, dacă

expresie_2 este adevărată, se vor executa numai declaraţii_2. În caz contrar, când

nici expresie_1 şi nici expresie_2 nu e adevărată, se execută declaraţii_3.

!" Repetarea unui grup de instrucţiuni de un număr nedefinit de ori – instrucţiunea

WHILE. Forma generală este:

WHILE expresie

grup de instrucţiuni

END

şi se execută “grup de instrucţiuni” până când “expresie” are toate elementele

nenule.

2.7 Reprezentarea graficelor 2D şi 3D

!" Grafice 2D elementare, în coordonate liniare. Sunt generate prin intermediul

instrucţiunilor: plot (y), plot (x, y), plot (x, y, s). Prima formă reprezintă grafic

argumentul y în funcţie de indici. A II-a formă reprezintă graficul vectorului y în

funcţie de vectorul x. A III-a formă permite specificarea culorii şi a modului de

reprezentare a punctelor graficului. Controlul axelor unui grafic se realizează prin

intermediul instrucţiunilor loglog, semilogx, semilogy, folosite cu aceeaşi sintaxă

ca instrucţiunea plot.

Există posibilitatea specificării denumirii graficului title(‘text’), axelor

graficului xlabel (‘text’) şi ylabel(‘text’), sau a legendei graficului legend (string1,

string2, …).

Page 8: APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier

- 14 - Aplicaţia nr. 1 !" Grafice 3D elementare. Există numeroase funcţii care permit diverse reprezentări

3D. Dintre acestea cele mai des folosite sunt funcţia plot3 (x, y, z) care reprezintă

o linie în spaţiul 3D care trece prin punctele ale căror coordonate sunt tripleţi

(x, y, z).

Pentru reprezentarea 3D a suprafeţelor se poate folosi funcţia mesh (X, Y, Z). În

aceste condiţii o suprafaţă este parametrizată prin două variabile independente care

variază continuu în interiorul uni dreptunghi; fiecare punct este specificat prin trei

funcţii: X(i, j), Y(i, j) şi Z(i, j).

Există posibilitatea controlul culorii (mesh (X, Y, Z, C)), al luminozităţii (lighting),

al punctului de observaţie (view (az, el)) sau se pot modifica diverse alte proprietăţi ale

unei suprafeţe.

3. Experimente

3.1 Scrieţi un program MATLAB care să implementeze operaţiile cu matrici descrise

în § 2.3.

Rezolvare: %Operatii cu matrici

clear all close all clc disp('definirea unei constante: x=2') x=2 pause disp('definirea unui vector: y = [1 2 3 4 5]') y = [1 2 3 4 5] pause disp('definirea unei matrici: A = [1 2 3; 4 5 6; 7 8 9]')disp('B=[10 7 6;3 2 1;2 4 5]')) A = [1 2 3; 4 5 6; 7 8 9] B = [10 7 6;3 2 1;2 4 5]

Page 9: APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier

Introducere în MATLAB - 15 - pause disp('referirea unui element al unei matrici: A(2,1)') A(2,1) pause disp('adunarea a doua matrici: C = A + B') C = A + B pause disp('scaderea a doua matrici: D = A - B') D = A - B pause disp('inmultirea a doua matrici: E = A * B') E = A * B pause disp('inmultirea elementelor corespondente: F = A .* B') F = A .* B pause disp('ridicarea la puterea x: G = A ^ x') G = A ^ x pause disp('ridicarea la putere a elementelor corespondente: H = A .^ x') H = A .^ x pause disp('impartirea a doua matrici: I = A / B') I = A / B pause disp('impartirea elementelor corespondente a doua matrici:')disp('J=A ./ B')) J = A ./B pause disp('transpusa unei matrici: K = A` ') K = A' pause disp('schimbarea dimensiunii unei matrici: reshape(A,1,9)') L = reshape(A,1,9) 3.2 Scrieţi un program MATLAB care să genereze vectori/matrici după specificaţiile

din § 2.4 şi să afişeze informaţii referitoare la aceştia/acestea conform § 2.5.

Page 10: APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier

- 16 - Aplicaţia nr. 1 Rezolvare: %Generarea vectorilor si matricilor

clear all close all clc disp('generarea unei matrici nule cu 2 linii si 4 coloane:')disp('zeros(2,4)')A = zeros(2,4) pause disp('generarea unei matrici unitate cu 3 linii si 2 coloane')disp('ones(3,2)')ones(3,2) pause disp('generarea unei matrici identice cu 3 linii si 3 coloane:')disp('eye(3)')eye(3) pause disp('generarea unui vector cu pas liniar: a = 1:0.1:2') a = 1:0.1:2 pause disp('generarea unui vector cu pas logaritmic')disp('b=logspace(1,3,5)')b = logspace(1,3,5) pause disp('afisarea dimensiunilor unei matrici: size(A)') A size(A) pause disp('afisarea dimensiunii unui vector: length(x)') a length (a)

3.3 Scrieţi un program MATALB care să folosească instrucţiunile de control descrise

în § 2.6.

Rezolvare: %Instructiuni de control

Page 11: APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier

Introducere în MATLAB - 17 - clear all close all clc disp('repetarea unei secvente de instructiuni de un nr. de ori: FOR')

disp(' ') for i=1:1:4 disp('acest text va fi afisat de 4 ori') end pause disp(' ') disp('executarea conditionata a instructiunilor: IF, ELSEIF, ELSE')

disp(' ') nr = input('introduceti un numar: ') if nr > 10 disp('nr > 10') elseif nr < 10 disp('nr < 10') else disp ('nr = 10') end pause disp(' ') disp('Repetarea unui grup de instructiuni de un numar nedefinit de ori: WHILE')

disp(' ') i=4 while i>0 i=i-1 end

3.4 Scrieţi un program MATLAB care să ilustreze posibilităţile de creare a graficelor

2D şi 3D pe baza funcţiilor descrise în § 2.7. În acest sens reprezentaţi o distribuţie

gaussiană 2D respectiv 3D. Ecuaţiile de generare sunt:

###

$

%

&&&

'

()

*2

2

2

221 +

,+

x

ey , pentru cazul 2D

şi:

##$

%&&'

( -)

*2

22

222

1 +

,+

yx

ez , pentru cazul 3D.

Page 12: APLICAŢIA NR. 1 - ubm.romarietag/fisiere/laboratoare_ia/Aplicatia1.pdf · Introducere în MATLAB - 9 - conţine cuvântul “function”, fişierul respectiv este declarat ca fişier

- 18 - Aplicaţia nr. 1 Rezolvare: %Grafice 2D si 3D

clear all close all clc sigma=3; disp('grafic 2D') x=-1:.005:1; y=(1/2*pi*sigma^2)*exp(-(x.^2/2*sigma^2)); plot(x,y) title('Gaussian 2D') xlabel('Axa Ox') ylabel('Axa Oy') pause disp('grafic 3D') x=-1:.01:1; y=-1:.01:1; [X,Y] = meshgrid(x,y); Z=(1/2*pi*sigma^2)*exp(-(X.^2+Y.^2)/2*sigma^2); figure mesh(Z) title('Gaussian 3D') xlabel('Axa Ox') ylabel('Axa Oy') zlabel('Axa Oz')