aplicatia1
TRANSCRIPT
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
Laborator de Inteligenta artificiala - Capitolul Retele neuronale
Lect. Marieta Gata - Universitatea de Nord Baia Mare
- 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
Laborator de Inteligenta artificiala - Capitolul Retele neuronale
Lect. Marieta Gata - Universitatea de Nord Baia Mare
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]
Laborator de Inteligenta artificiala - Capitolul Retele neuronale
Lect. Marieta Gata - Universitatea de Nord Baia Mare
- 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:
Laborator de Inteligenta artificiala - Capitolul Retele neuronale
Lect. Marieta Gata - Universitatea de Nord Baia Mare
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.
Laborator de Inteligenta artificiala - Capitolul Retele neuronale
Lect. Marieta Gata - Universitatea de Nord Baia Mare
- 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
Laborator de Inteligenta artificiala - Capitolul Retele neuronale
Lect. Marieta Gata - Universitatea de Nord Baia Mare
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, …).
Laborator de Inteligenta artificiala - Capitolul Retele neuronale
Lect. Marieta Gata - Universitatea de Nord Baia Mare
- 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]
Laborator de Inteligenta artificiala - Capitolul Retele neuronale
Lect. Marieta Gata - Universitatea de Nord Baia Mare
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.
Laborator de Inteligenta artificiala - Capitolul Retele neuronale
Lect. Marieta Gata - Universitatea de Nord Baia Mare
- 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
Laborator de Inteligenta artificiala - Capitolul Retele neuronale
Lect. Marieta Gata - Universitatea de Nord Baia Mare
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.
Laborator de Inteligenta artificiala - Capitolul Retele neuronale
Lect. Marieta Gata - Universitatea de Nord Baia Mare
- 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')
Laborator de Inteligenta artificiala - Capitolul Retele neuronale
Lect. Marieta Gata - Universitatea de Nord Baia Mare