Sunteți pe pagina 1din 12

Sisteme inteligente de suport decizonal –Proiect 5

Introducere în MATLAB
În cele ce urmează ne propunem să revedem câteva dintre comenzile MATLAB utile în prelucrarea numerică a
semnalelor. Programul MATLAB integrează analiza numerică, calculul matriceal, procesarea semnalelor, reprezentările
grafice 2D şi 3D, realizarea interfeţelor grafice.
MATLAB (MATrix LABoratory) este un program interactiv, destinat prelucrării numerice a datelor furnizate
sub formă vectorială sau matriceală. MATLAB-ul include și aplicaţii specifice, strânse în TOOLBOX-uri. Acestea sunt
colecţii extinse de funcţii MATLAB (fişiere *.m) care dezvoltă mediul de programare de la o versiune la alta, pentru a
rezolva probleme specifice.

1. Prezentarea utilitarului MATLAB


Partea de documentare, inclusă în structura Help a produsului este aliniată sistemului WINDOWS. Există
posibilităţi de căutare a explicaţiilor atât prin index, cât şi prin cuprins (grup de funcţii – Table of Contents).
Programul MATLAB se lansează în execuţie din mediul WINDOWS astfel: Start→All Programs→MATLAB
R2012b

Selecţia unei comenzi, din bara de comenzi sau din meniul principal, se poate face cu mouse-ul sau cu
ajutorul săgeţilor, prin deplasarea zonelor active sau prin tastarea literei marcate în fiecare subcomandă.
După lansarea în execuţie, programul MATLAB intră în modul de comandă, afişând prompterul ‘>>’, şi
aşteaptă introducerea unei comenzi de către utilizator. De exemplu, comanda:
>> var = 0:5
va crea variabila var afişând cele 6 elemente ale vectorului linie var, de la v(1)=0 la v(6)=5:
var =
0 1 2 3 4 5

Comenzile introduse anterior pot fi readuse în linia de comandă prin folosirea săgeţilor de la tastatură, ‘↑’ şi
‘↓’ (căutarea se face ca într-o ‘listă’).
În afara modului de lucru în linia de comandă, MATLAB-ul lucrează cu programe conţinute în fişiere. Fişierele
ce conţin instrucţiuni MATLAB se numesc fişiere M (*.m). Un program MATLAB poate fi scris sub forma fişierelor script
sau a fişierelor function. Un fişier script este un fişier extern care conţine o secvenţă de comenzi MATLAB. După
execuţia completă a unui fişier script, variabilele create de acest tip de fişier rămân în zona de memorie a aplicaţiei.
Dacă prima linie a fişierului conţine cuvântul ‘function’, fişierul respectiv este fişier funcţie, care se caracterizează prin
faptul că poate lucra cu argumente. La terminarea execuţiei unei funcţii, în memoria calculatorului nu rămân decât
variabilele de ieşire ale acesteia.

• Meniul principal
Pentru a deschide un fişier în Editorul/Debugger-ul MATLAB-ului din meniul de comandă se procedează
astfel:
1. Pentru un fişier nou, se selectează File→New→M-file (figura 2);
2. Pentru un fişier existent se selectează File→Open şi apoi se selectează fişierul dorit (figura 3).

Figura 2. Crearea unui fişier nou Figura 3. Deschiderea unui fişier *.m existent

Din meniul principal se pot seta anumite proprietăţi, legate de formatul dorit la afişare, fonturi și opţiuni de copiere.
Pentru aceasta se selectează File→Preferences.

1
Sisteme inteligente de suport decizonal –Proiect 5
MATLAB-ul lucrează cu două tipuri de ferestre: o fereastră de comenzi şi una de reprezentări grafice. La un moment
dat poate fi deschisă numai o fereastră de comenzi. Fereastra grafică este utilizată în reprezentarea grafică a datelor; pot fi
deschise mai multe ferestre grafice în acelaşi timp. Selectarea ferestrei grafice se face în modul următor: File→New→Figure.
Pe monitor va apare o fereastră grafică ca în figura 4.

Figura 4. Deschiderea unei noi ferestre grafice

2. Funcţii de control în MATLAB


Mediul de programare MATLAB este sensibil la tipul de litere (mari sau mici), dar există comenzi care fac trecerea
între modurile sensibil şi nesensibil. Numele funcţie este obligatoriu să fie scris cu litere mici.
Liniile de comentariu dintr-un fişier script/funcţie sunt precedate de caracterul ‘%’.
• help – furnizează informaţii despre MATLAB şi funcţiile acestuia;
• what – listează fişierele *.m, *.mat, *.mex din directorul curent;
• lookfor – listează toate numele de fişiere care au în prima linie a help-ului cuvintele menţionate ca argument,
precum şi prima linie din help;
• path – returnează căile cu care lucrează MATLAB-ul, locul unde sunt căutate fişierele apelate;
• who – listează variabilele curente din memorie;
• whos – furnizează informaţii suplimentare referitoare la variabilele din spaţiul de lucru (nume, dimensiune, tip –
real sau complex);
• exist – verifică dacă o variabilă există în mediul MATLAB;
• format – stabileşte formatul extern de afişare al numerelor pe ecran;
Să se verifice toate tipurile de format folosind valoarea x = pi.
• clear – şterge din memorie una sau mai multe variabile.
• dir – afişează numele tuturor fişierelor din directorul curent sau din orice alt director precizat ca argument;
• cd – returnează numele directorului curent sau schimbă directorul de lucru;

Un anumit program MATLAB, aflat într-un anumit director, nu poate fi rulat decât dacă directorul respectiv este
directorul de lucru.

3. Fişiere MATLAB
Fişierele MATLAB *.m pot fi privite ca macro-uri ale comenzilor MATLAB salvate în fişiere cu extensia .m, adică
numefisier.m. Un fişier *.m poate fi o funcţie cu variabile de intrare şi ieşire sau o listă de comenzi.
MATLAB-ul cere ca fişierele *.m să fie salvate fie în directorul de lucru, fie într-un director care este specificat în lista
căilor din MATLAB. Pentru a putea accesa fişierul *.m dintr-un anumit director, trebuie să adăugam directorul/fişierul la calea
MATLAB. Acest lucru se realizează astfel: se apasă butonul Browse for folder, se caută directorul dorit, iar apoi se confirmă cu
OK, ca în figura 5.

3
Sisteme inteligente de suport decizonal –Proiect 5

Figura 5. Adăugarea directorului/fişierului dorit la calea MATLAB

Comanda addpath nume_director adaugă directorul nume_director la calea curentă din MATLAB. Această comandă este
echivalentă cu procedura prezentată anterior de adăugare a unei noi căi.

Fişierele MATLAB pot utiliza variabile definite de utilizator, variabile definite cu comanda input. Să presupunem că
dorim să rulăm un fişier MATLAB pentru diferite valori ale unei variabile N. Atunci, în fişierul MATLAB, se utilizează următoarea
comandă:
N = input(‘N=’)

4. Definirea variabilelor
Variabilelor li se atribuie valori numerice, tipărindu-se direct expresia numerică. Dacă se tastează în linia de comandă:
>> var1 = 1+2
vom obţine rezultatul:
var1 =
3

Rezultatul nu se afişează dacă se pune punct şi virgulă la sfârşitul expresiei, de exemplu:


>> var1=1+2;
Unei variabile i se poate atribui o formulă ce utilizează operatorii aritmetic definiţi în MATLAB (vezi tabel 1), şi una sau
mai multe mărimi definite anterior chiar în cadrul comenzii curente. De exemplu, presupunând că var1 este definită anterior:
>> var2 = var1^4
va returna valoarea:
var2=
81

În MATLAB se utilizează următorii operatori aritmetici:

Simbol Semnificaţie
+ Adunare
- Scădere
* Înmulţire
.* Înmulţire între două matrici (sau vectori) element cu element
/ Împărţire
./ Împărţire între două matrici (sau vectori) element cu element
^ Ridicare la putere
.^ Ridicare la putere a unei matrici (sau vector) element cu element
' Transpunere şi conjugare
.' Transpunere
() Specificarea ordinii de evaluare a operaţiilor
Tabel 1. Operatori aritmetici în MATLAB

În MATLAB există variabile predefinite – acestea nu pot fi declarate şi sunt accesibile global în orice fişier *.m. Aceste
variabile speciale sunt introduse în mod obişnuit în construcţiile funcţiilor MATLAB, ele returnând valorile scalare utile. Câteva
dintre variabilele şi constantele speciale sunt:
• ans – variabilă creată automat în care este returnat rezultatul unui calcul, atunci când expresia nu a avut asignat
un nume;
Dacă se tastează direct în fereastra de comandă:

4
Sisteme inteligente de suport decizonal –Proiect 5
>> 3
obţinem
ans = % nu s-a alocat nici un nume.
3
>> x = 2
x= % s-a alocat numele x.
2
• eps – variabilă permanentă în care este memorată eroarea relativă pentru calculele efectuate în virgulă mobilă.
Valoarea implicită este 2.2204e-016, dar poate fi redefinită la orice altă valoare;
• pi – variabilă permanentă care are asignată valoarea π = 3.141592653589 ;
• i= −1 - variabilă utilizată pentru introducerea numerelor complexe;
• j= −1 - alternativă pentru i;
• inf – variabilă utilizată pentru reprezentarea lui +∞ în aritmetica IEEE, rezultat al împărţirii 1.0 0.0 ;
• NaN – variabilă folosită pentru reprezentarea lui Not-a-Number, în aritmetica IEEE, rezultat al împărţirii
nedefinite 0.0 0.0 .
Utilizatorul poate defini şi alte variabile, cu ajutorul unor funcţii predefinite.

Se pot verifica următoarele exemple (tastând direct în fereastra de comenzi):


p = pi; % nu se va afişa valoarea p (dar există în memorie).
q = pi/2 % va afişa valoarea q.
% r = pi/4 % nu se ia în considerare această linie.
v = r/2 % va rezulta o eroare deoarece nu îl cunoaşte pe r.
s = 1+2+3+... enter % instrucţiunea se continuă şi pe linia următoare.
4+5+6

1. Operaţii asupra numerelor complexe


• abs – valoarea absolută (modulul);
• angle – faza;
• conj – valoarea complex conjugată;
• real – partea reală a unui număr complex;
• imag – partea imaginară a unui număr complex.

2. Funcţiile radical, exponenţială şi logaritm


• sqrt – radical de ordinul 2 (rădăcina pătrată);
• exp – exponeţiala (puteri ale numărului e );
• log – logaritm natural (logaritm în baza e );
• log2 – logaritm în bază 2;
• log10 – logaritm zecimal (logaritm în baza 10);
• pow2 – puteri ale lui 2.

3. Funcţiile trigonometrice directe şi inverse


• sin – sinus;
• cos – cosinus;
• cot – cotangenta;
• sec – secanta;
• csc – cosecanta.
• asin – arcsinus;
• acos – arccosinus;
• atan – arctangenta;
• atan2 – arctangenta pentru argument complex;
• acot – arccotangenta;
• asec – arcsecanta;
• acsc – arccosecanta.

4. Funcţiile hiperbolice directe şi inverse


• sinh – sinus hiperbolic;
• cosh – cosinus hiperbolic;
• tanh – tangetă hiperbolică;
• coth – cotangentă hiperbolică;
• sech – secantă hiperbolică;
• csch – cosecantă hiperbolică.

5
Sisteme inteligente de suport decizonal –Proiect 5
• asinh – arcsinus hiperbolic;
• acosh – arccosinus hiperbolic;
• atanh – arctangentă hiperbolică;
• acoth – arcotangentă hiperbolică;
• asech – arcsecantă hiperbolică;
• acsch – arccosecantă hiperbolică.
Pentru informaţii despre modul de utilizare al acestor funcţii folosiţi comanda help însoţită de numele funcţiei dorite.

5. Funcţii destinate analizei de date


Dacă v este un vector şi M este o matrice, atunci avem următoarele sintaxe:
sum(v); % calculează suma elementelor vectorului v;
prod(v); % calculează produsul elementelor vectorului v;
sum(M); % returnează un vector linie având ca elemente suma elementelor fiecărei coloane din
% matricea M;
prod(M); % returnează un vector linie având ca elemente produsul elementelor fiecărei coloane din
% matricea M.
max(v); % returnează elementul maxim al vectorului v;
[m, p] = max(v); % returnează elementul maxim al vectorului m şi indicele elementului maxim p;
% dacă există maxime multiple se returnează indicele primului dintre ele;
min(v); % returnează elementul minim al vectorului v;
[m, p] = min(v); % returnează elementul minim al vectorului m şi indicele elementului minim p;
% dacă există minime multiple se returnează indicele primului dintre ele;
max(M); % returnează un vector linie având ca elemente maximul elementelor din fiecare coloană a
% matricii M;
[m, p] = max(M); % returnează un vector linie m având ca elemente maximul elementelor din fiecare coloană a
% matricii M şi un vector linie p ce conţine poziţia maximului respectiv în cadrul fiecărei
% coloane.
min(M); % returnează un vector linie având ca elemente minimul elementelor din fiecare coloană a
% matricii M;
[m, p] = min(M); % returnează un vector linie m având ca elemente minimul elementelor din fiecare coloană a
% matricii M şi un vector linie p ce conţine poziţia minimului respectiv în cadrul fiecărei coloane.
mean(v); % calculează media aritmetică a elementelor vectorului v.
mean(M); % returnează un vector linie având ca elemente media aritmetică a elementelor fiecărei
% coloane din matricea M.

5. Scalari, vectori şi matrici


MATLAB este un pachet de programe care lucrează numai cu un singur tip de obiecte, matrici numerice rectangulare,
cu elemente reale sau complexe. În acest sens, scalarii sunt asimilaţi matricilor cu o linie şi o coloană ( 1× 1 ), iar vectorii sunt
asimilaţi matricilor cu o linie ( 1× n ) sau o coloană ( n × 1 ).
Introducerea matricilor în mediul de lucru se face prin una din metodele: introducerea explicită a listei de elemente;
generarea prin instrucţiuni şi funcţii; crearea de fişiere *.m; încărcarea din fişiere de date externe.
Cea mai simplă metodă constă în utilizarea unei liste explicite. Trebuie respectate următoarele reguli: elementele unei
linii trebuie separate prin spaţii libere sau virgulă; liniile se separă prin semnul punct-virgulă ‘;’; elementele matricei sunt
cuprinse între paranteze drepte ‘[ ]’.
Elementele matricilor pot fi numere reale sau complexe sau orice altă variabilă MATLAB. Elementele matricii A pot fi
identificate, în MATLAB, prin notaţia A(i, j) şi semnifică elementul de la intersecţia liniei i cu coloana j. Pentru a face referire la
un element al matricii sunt necesari doi indici, iar referirea la un element al unui vector se face cu un singur indice.

1 2 3  −1 
Fie matricea A =   şi vectorii B = ( 7 8 9 ) , C =   .
 4 5 6   −2 
>> A = [1, 2, 3; 4, 5, 6]
A=
1 2 3
4 5 6
>> A = [1 2 3; 4 5 6]
A=
1 2 3
4 5 6
>> A = [1 2 3 enter
4 5 6]
A=
1 2 3
4 5 6
>> B = [7 8 9]

6
Sisteme inteligente de suport decizonal –Proiect 5
B=
7 8 9
>> C = [-1; -2]
C=
-1
-2

Sintaxe:
Pentru o matrice M:
M(i, j ); % reprezintă elementul din matricea M corespunzător liniei i şi coloanei j;
M(i); % reprezintă elementul i din matrice, numărarea elementelor făcându-se pe coloane.
Pentru un vector v:
v(i); % reprezintă elementul de pe poziţia i din vector.
Pentru A, B şi C definite anterior verificaţi:
>> A(1, 3)
ans =
3
>> A(2)
ans =
4

Dacă dorim să schimbăm elementele unei matrici sau să adăugăm alte elemente, fără a rescrie întreaga matrice, se
procedează astfel:
>> A(1, 3) = 0
A=
1 2 0
4 5 6
>> A(3, 3) = -2
A=
1 2 0
4 5 6
0 0 -2
>> C(3) = 1
C=
-1
-2
1

Se pot construi matrici de dimensiuni mai mari pornind de la matrici de dimensiuni mai reduse. Pentru exemplificare,
vom folosi matricea A şi vectorii B şi C în ultima lor formă (A – 3 × 3 , B – 1× 3 , C – 3 × 1 ):
>> D = [A; B]
D=
1 2 0
4 5 6
0 0 -2
7 8 9 % s-a construit matricea D de dimensiune 4 × 3 , prin adăugarea vectorului B la matricea A
% (ca ultimă linie);
% A şi B au acelaşi număr de coloane (3) pentru a fi posibilă construcţia.
>> E = [A, C]
E=
1 2 0 -1
4 5 6 -2
0 0 -2 1
% s-a construit matricea E de dimensiune 3 × 4 , prin adăugarea vectorului C la matricea A
% (ca ultimă coloană);
% A şi C au acelaşi număr de linii (3) pentru a fi posibilă construcţia.

Dacă v este un vector şi M este o matrice, atunci avem următoarele sintaxe:


v(i:k); % selectează elementele de pe poziţiile i, i+1, i+2, ..., k ale vectorului v;
% dacă i>k, atunci vectorul rezultat este gol (nu are nici un element);
v(i:j:k); % selectează elementele de pe poziţiile i, i+j, i+2j, ..., k ale vectorului v (selectează cu
% pasul j);
% dacă j>0 şi i>k sau j>0 şi i<k, atunci vectorul rezultat este gol;
v([i, j, k]); % selectează elementele de pe poziţiile i, j, k;
v(:); % dacă vectorul este linie atunci el devine coloană;
% dacă vectorul este coloană atunci el rămâne nemodificat.
M(:, j); % selectează coloana j a matricii M;

7
Sisteme inteligente de suport decizonal –Proiect 5
M(i, :); % selectează linia i a matricii M;
M(:, i:j); % selectează coloanele de la i la j ale matricii M;
M(i:j, :); % selectează liniile de la i la j ale matricii M;
M(:, i:j:k); % selectează coloanele i, i+j, i+2j, ..., k ale matricii M (selectează cu pasul j);
M(i:j:k, :); % selectează liniile i, i+j, i+2j, ..., k ale matricii M;
M(i:j, k:l); % extrage submatricea formată cu elementele aflate la intersecţia liniilor de la i la j şi
% coloanelor de la k la l ale matricii M;
M(:, [i, j, k]); % selectează coloanele i, j, k ale matricii M;
M([i, j, k], :); % selectează liniile i, j, k ale matricii M;
M([i, j, k], [l, m, n]); % extrage submatricea formată cu elementele aflate la intersecţia liniilor i, j, k şi
% coloanelor l, m, n ale matricii M;
M(:, :); % selectează întreaga matrice M;
M(i:j); % selectează elementele de i la j ale matricii M şi le pune sub forma unui vector linie
% (elementele într-o matrice se numără pe coloane);
M(:); % selectează toate elementele matricii M şi le pune sub forma unui vector coloană (pune
% coloanele matricii M una sub alta,sub forma unui vector coloană).

Verificaţi sintaxele de mai sus folosind matricea A şi vectorii B şi C din exemplele anterioare sau construind alte matrici şi
vectori.

6. Vectori şi matrici uzuale

1. Generarea vectorilor cu pas liniar


Sintaxe:
v = initial:pas:final; % se generează un vector linie v cu elementele începând de la initial la final,
% cu pasul egal cu pas (pasul poate fi şi negativ dar atunci valoarea iniţială trebuie să fie mai
% mare decât valoarea finală);
v = initial:final; % se generează un vector linie v cu elementele începând de la initial la final, cu pasul
% egal cu 1;
v = linspace(minim, maxim, numar_de_elemente);
% se generează un vector linie v cu elementele începând de la minim la maxim, cu pas
% constant şi având un număr de elemente egal cu numar_de_elemente.

Verificaţi componenţa vectorilor:


>> v = 1:10:40
v=
1 11 21 31
>> u = 2:8
u=
2 3 4 5 6 7 8
>> d = 20:-2:2
d=
20 18 16 14 12 10 8 6 4 2
>> l = linspace(4, 16, 4)
l=
4 8 12 16
>> q = linspace(pi, -pi, 3)

2. Matricea goală
Sintaxă:
x = [] % generează o matrice goală (fără nici un element).
>> x = []
x=
[]

3. Matricea unitate
Sintaxe:
ones(n); % returnează o matrice de dimensiune nxn cu toate elementele egale cu 1;
ones(m, n); % returnează o matrice de dimensiune mxn cu toate elementele egale cu 1.
ones(size(M)); % returnează o matrice de dimensiunea matricii M cu toate elementele egale cu 1.

Verificaţi conţinutul următoarele matrici:


>> ones(2)
ans =
1 1

8
Sisteme inteligente de suport decizonal –Proiect 5
1 1
ones(1, 4)
ones(3, 2)
ones(size(D)) % unde D este matricea definită anterior.

4. Matricea zero
Sintaxe:
zeros(n); % returnează o matrice de dimensiune nxn cu toate elementele egale cu 0;
zeros(m, n); % returnează o matrice de dimensiune mxn cu toate elementele egale cu 0.
zeros(size(M)); % returnează o matrice de dimensiunea matricii M cu toate elementele egale cu 0.

Verificaţi dacă următoarele matrici au toate elementele nule:


zeros(4)
zeros(1, 3)
>> zeros(5, 2)
ans =
0 0
0 0
0 0
0 0
0 0
zeros(3, 1)
zeros(size(D)) % unde D este matricea definită anterior.

5. Matricea diagonală
Dacă v este un vector (linie sau coloană) şi M este o matrice, atunci avem următoarele sintaxe:
diag(v); % returnează o matrice pătrată diagonală, cu elementele vectorului v pe diagonala principală;
diag(v, k); % returnează o matrice pătrată cu elementele vectorului v pe diagonala k deasupra celei
% principale, dacă k>0, sau sub cea principală dacă k<0;
% restul elementelor sunt 0.
diag(M); % returnează un vector coloană ce conţine elementele de pe diagonala principală a matricii M;
diag(M, k); % returnează un vector coloană ce conţine elementele din matricea M de pe diagonala k
% deasupra celei principale, dacă k>0, sau sub cea principală, dacă k<0.

Se va defini un vector linie a şi o matrice A:


>> a = randn(1, 4);
>> A = randn(4);
Verificaţi structura matricilor:
diag(a)
diag(a, 1)
diag(a, -1)
diag(a, -2)
>> diag(A)
ans =
-2.1707e+000
1.6924e+000
-1.9511e-002
-1.8740e+000
diag(A, -2)
diag(diag(A))

7. Construirea unei funcţii


Dacă prima linie a unui fişier MATLAB (*.m) conţine la început cuvântul function, atunci fişierul respectiv este declarat
ca fişier funcţie. O funcţie diferă de un script prin faptul că poate lucra cu argumente. Variabilele definite şi manipulate în
interiorul fişierului funcţie sunt localizate la nivelul acesteia. La terminarea execuţiei unei funcţii, în memoria calculatorului,
rămân doar variabilele de ieşire ale acesteia. Aceste fişiere pot fi adăugate ca funcţii noi în structura MATLAB. Forma generală a
primei linii a unui fişier funcţie este:
function [parametrii_iesire] = nume(parametrii_intrare)
cu următoarele semnificaţii:
• function – cuvânt cheie care declară fişierul ca fişier funcţie (obligatoriu);
• nume – numele funcţiei; reprezintă numele sub care se salvează fişierul *.m (extensia .m nu face parte din nume);
acest nume nu poate fi identic cu cel al unui fişier *.m deja existent;
• parametrii_iesire – reprezintă parametrii de ieşire ai funcţiei; trebuie separaţi prin virgulă şi cuprinşi între
paranteze drepte; dacă funcţia nu are parametri de ieşire, parantezele drepte şi semnul egal nu mai au sens;
• parametrii_intrare – reprezintă parametrii de intrare ai funcţiei; trebuie separaţi prin virgulă şi cuprinşi între
paranteze rotunde; dacă funcţia nu are parametri de intrare, parantezele rotunde şi semnul egal nu mai au sens.

9
Sisteme inteligente de suport decizonal –Proiect 5
Exercițiu: Realizați o funcție care calculează media aritmetică a elementelor unui vector. Apelați această funcțe din linia de
comandă.

9. Instrucţiuni de control logic

1. Instrucţiunea condiţională ‘if’, clauza ‘else’, clauza ‘elseif’


Sintaxe:
if expresie_logica
grup_instructiuni
end % dacă expresie_logica este adevărată, se execută grup_instructiuni dintre
% instrucţiunea if şi instrucţiunea end;
% dacă expresie_logica este falsă, se trece la prima instrucţiune care urmează după end;

if expresie_logica_1
grup_instructiuni_A
else
grup_instructiuni_B
end % dacă expresie_logica_1 este adevărată, se execută grup_instructiuni_A dintre
% instrucţiunea if şi clauza else;
% dacă expresie_logica_1 este falsă, se execută grup_instructiuni_B dintre clauza
% else şi instrucţiunea end;

Dacă funcţia de calculat are mai multe nivele de instrucţiuni if-else, este dificilă determinarea expresiei logice
adevarate, care selectează grupul de istrucţiuni ce urmează a fi executat. În acest caz se foloseşte clauza elseif.

Sintaxă:
if expresie_logica_1
grup_instructiuni_A
elseif expresie_logica_2
grup_instructiuni_B
elseif expresie_logica_3
grup_instructiuni_C
end % dacă expresie_logica_1 este adevărată, se execută numai grup_instructiuni_A;
% dacă expresie_logica_1 este falsă şi expresie_logica_2 este adevărată, se execută
% numai grup_instructiuni_B;
% dacă expresie_logica_1 este falsă şi expresie_logica_2 este de asemenea falsă, iar
% expresie_logica_3 este adevărată, se execută doar grup_instructiuni_C;
% dacă mai multe expresii logice sunt adevărate, prima instrucţiune logică adevărată
% determină care grup de instrucţiuni este executat prima dată;
% dacă toate expresiile logice sunt false, nu se execută nici un grup de instrucţiuni din
% structura if;

2. Instrucţiunea repetitivă ‘for’


Instrucţiunea for permite repetarea unui grup de instrucţiuni (din corpul buclei) de un anumit număr de ori.
Sintaxă:
for index = expresie
grup_instructiuni
end % index – numele contorului;
% expresie – o matrice, un vector sau un scalar;
% de cele mai multe ori expresie este initial:pas:final, unde
• initial – prima valoare a lui index;
• pas – pasul pentru index (dacă este omis se consideră implicit 1);
• final – cea mai mare valoare pe care o poate lua index;
% pentru index parcurgând intervalul de la initial la final cu pasul pas, se execută
% grup_instructiuni, care poate fi orice expresie MATLAB, de un număr de ori egal
 final − initial 
= % cu n   + 1 , unde prin [ ] s-a notat valoarea întreagă a numărului;
 pas 
La utilizarea buclei for trebuie respectate următoarele reguli: indexul buclei for trebuie să fie o variabilă; dacă expresia
este o matrice goală, bucla nu se execută. Se va trece la următoare instrucţiune după instrucţiunea end; dacă expresia este un
scalar, bucla se execută o singură dată, cu indexul dat de valoarea scalarului; dacă expresia este un vector linie, bucla se
execută de un număr de ori egal cu numărul elementelor din vector, de fiecare dată indexul având valoarea egală cu următorul
element din vector; dacă expresia este o matrice, indexul va avea la fiecare iteraţie valorile conţinute în următoarea coloană a
matricii; la terminarea ciclurilor for, indexul are ultima valoare utilizată.

10
Sisteme inteligente de suport decizonal –Proiect 5
3. Instrucţiunea repetitivă ‘while’
Instrucţiunea while este o structură care se foloseşte pentru repetarea unui set de instrucţiuni, atât timp cât o condiţie
specificată este adevărată.
Sintaxă:
while expresie
grup_instructiuni
end % dacă expresie este adevărată se execută grup_instructiuni.

4. Instrucţiunea ‘break’
Instrucţiunea break se utilizează pentru a ieşi dintr-o buclă înainte ca aceasta să se fi terminat. Se recomandă utilizarea
acesteia la detectarea unei condiţii de eroare în interiorul buclei. Instrucţiunea break încetează execuţia ciclurilor for şi while. În
cazul unor cicluri imbricate, break comandă ieşirea din ciclul cel mai interior.
Sintaxă:
break

5. Operatori relaţionali şi operatori logici


În cadrul unui algoritm, de multe ori este necesară o selecţie a grupului de instrucţiuni ce urmează a fi executate,
condiţionată de valoarea de adevăr a unei expresii. Instrucţiunile condiţionale folosesc operatori relaţionali şi operatori logici.
În MATLAB există şase operatori relaţionali utilizaţi pentru a compara două matrici de dimensiuni egale (vezi tabelul
2).

Operatori relaţionali Semnificaţie


< mai mic
<= mai mic sau egal
> mai mare
>= mai mare sau egal
== identic
~= diferit
Tabel 2. Operatori relaţionali în MATLAB
Operatorii relaţionali compară două matrici sau două expresii matriceale, element cu element. Aceştia returnează o
matrice cu dimensiunea egală cu acea a matricilor care se compară, cu elementele
• 1 – dacă relaţia este ADEVĂRATĂ;
• 0 – dacă relaţia este FALSĂ.
Pentru combinarea a două sau mai multor expresii logice se folosesc operatorii logici din tabelul 3.

Operatori logici Semnificaţie Prioritate


~ NU 1
& ŞI 2
| SAU 3
Tabel 3. Operatori logici în MATLAB

9. Reprezentări grafice

1. Reprezentări grafice în coordonate liniare


Sintaxe:
Dacă v este un vector şi M este o matrice:
plot(v); % dacă v este un vector cu elemente reale, se vor reprezenta grafic elementele sale în funcţie
% de indici (primul indice este 1, ultimul indice este egal cu lungimea vectorului);
% dacă v este un vector cu elemente complexe, atunci reprezentarea sa se va face în funcţie
% de partea reală (pe abscisă) şi de partea imaginară (pe ordonată) a elementelor sale.
plot(M); % se vor reprezenta pe acelaşi grafic coloanele matricii M (fiecare din coloanele matricii este
% privită ca un vector şi reprezentat ca în sintaxa precedentă).

Dacă x şi y sunt doi vectori de aceeaşi lungime şi N este o matrice de aceeaşi dimensiune cu matricea M:
plot(x, y); % se vor reprezenta grafic elementele vectorului y în funcţie de elementele vectorului x;
% dacă lungimea vectorului x nu este egală cu lungimea vectorului y reprezentarea nu este
% posibilă.
plot(x, M); % dacă lungimea vectorului x este egală cu numărul de linii al matricii M, atunci se vor
% reprezenta pe acelaşi grafic coloanele matricii M în funcţie de elementele vectorului x;
% dacă lungimea vectorului x este egal cu numărul de coloane al matricii M atunci se vor
% reprezenta pe acelaşi grafic liniile matricii M în funcţie de elementele vectorului x;
% dacă lungimea vectorului x nu este egală cu una dintre dimensiunile matricii M, atunci

11
Sisteme inteligente de suport decizonal –Proiect 5
% reprezentarea nu este posibilă.
plot(M, N); % se vor reprezenta pe acelaşi grafic coloanele matricii N în funcţie de coloanele matricii M
% (coloana k din matricea N va fi reprezentată funcţie de coloana k din matricea M, unde
% k=1, 2, 3, …, număr coloane);
% dacă cele două matrici nu au aceeaşi dimensiune, atunci reprezentarea nu este posibilă.

Pentru reprezentarea mai multor grafice în aceeaşi fereastră, utilizând o singură comandă, folosim:
plot(x1, y1, x2, y2, ..., xn, yn);
% se vor reprezenta pe acelaşi grafic y1 în funcţie de x1, y2 în funcţie de x2, …, yn în
% funcţie de xn (pot fi vectori sau matrici);
% rămân valabile considerentele făcute în sintaxele anterioare, referitor la cazurile când avem
% vectori sau matrici;
% dacă xi şi yi (i=1, 2, ..., n), nu au aceeaşi dimensiune, atunci reprezentarea nu este
% posibilă.
Se pot folosi diverse linii, markere şi culori pentru reprezentarea graficelor (vezi tabelul 4).

Tip linie Tip marker Culoare


- continuă + plus r roşu
-- întreruptă o cerc g verde
: punctată * steluţă b albastru
-. linie-punct . punct c cyan
x cruce m magenta
‘cross’ sau s pătrat y galben
‘diamond’ sau d romb k negru
^ triunghi orientat cu vârful în sus w alb
v triunghi orientat cu vârful în jos
> triunghi orientat cu vârful spre dreapta
< triunghi orientat cu vârful spre stânga
‘pentagram’ sau p stea cu cinci vârfuri
‘hexagram’ sau h stea cu şase vârfuri
Tabel 4. Linii, markere şi culori pentru reprezentarea grafică în MATLAB

Observaţie: Funcţia stem realizează o reprezentare în formă discretă a datelor. Vezi help stem.

2. Divizarea ferestrei grafice


Dacă dorim ca fereastra grafică să conţină mai multe reprezentări grafice se poate folosi funcţia subplot (împarte
fereastra grafică în mai multe ‘subferestre’ - în fiecare dintre acestea putând fi plasat câte un grafic). Fereastra grafică este
privită astfel sub forma unei matrici cu m linii şi n coloane, deci în total mxn ‘subferestre’ [13]. Numărarea acestor ‘subferestre’
se face pe linii. Dacă vrem să împărţim fereastra grafică în 3 × 3 = 9 ‘subferestre’ vom avea:
1 2 3
4 5 6
7 8 9
Sintaxă:
subplot(m, n, p); % împarte fereastra grafică într-o matrice mxn (mxn ‘subferestre’) iar p reprezintă numărul
% fiecărei ‘subferestre’ în matricea grafică respectivă (numărarea se face pe linii);
% sintaxa respectivă este urmată de comanda propriu- zisă de afişare a graficului, care poate
% fi oricare din cele prezentate (stem, plot, loglog, semilogx, semilogy).

3. Schimbarea limitelor axelor


Dacă se doreşte vizualizarea numai a unei anumite porţiuni dintr-un grafic, corespunzătoare unor anumite intervale
pe abscisă şi ordonată, se va folosi comanda axis.
Sintaxă:
axis([x0 x1 y0 y1]);% pe abscisă se va vizualiza între valorile x0 şi x1, iar pe ordonată între y0 şi y1;
% această sintaxă se plasează după comanda de reprezentare grafică.

4. Precizarea titlului graficului şi a etichetelor axelor. Trasarea unei reţele pe grafic. Plasarea unui text pe grafic
Sintaxe:
title(’text’); % plasează deasupra graficului, ca titlu, textul text;
xlabel(’text’); % textul text devine eticheta de pe abscisă;
ylabel(’text’); % textul text devine eticheta de pe ordonată.
grid; % trasează pe grafic o reţea de linii, uşurând astfel citirea graficului;
gtext(’text’); % plasează pe grafic textul text (folosind mouse-ul).
Toate aceste sintaxe urmează după comanda de reprezentare grafică.

12
Sisteme inteligente de suport decizonal –Proiect 5
5. Suprapunerea succesivă a graficelor
Dacă dorim să reţinem graficul curent şi să adăugăm în aceeaşi fereastră grafică următoarele reprezentări grafice se
poate folosi funcţia hold.
Sintaxe:
hold on; % reţine graficul curent şi adaugă în aceeaşi fereastră grafică următoarele reprezentări grafice;
hold off; % dacă se doreşte în continuare reprezentarea în ferestre grafice separate (dezactivează comanda hold on).

Dacă se doreşte în cadrul unui program reprezentarea mai multor grafice în ferestre separate, fiecare comandă grafică
va trebui să fie precedată de un nume de forma figure(n), unde n este numărul figurii respective. În caz contrar, la sfârşitul
execuţiei programului va apărea numai ultima reprezentare grafică (se va folosi o singură fereastră grafică ce va fi ‘ştearsă’ de
fiecare dată la întâlnirea unei noi comenzi grafice).

Exercițiu: Să se reprezinte grafic funcţia f ( t ) = sin ( 2π 0.2t ) , cu culoarea albastră şi linie-plus şi g ( t ) = 1 − f ( t ) cu linie-steluţă
de culoare roşie. Să se scrie titlul ‘f(t) = sin(2 \pi 0.2 t) si g(t) = 1 - f(t)’ pe axa x să se scrie ‘timp’, iar pe axa y să se scrie
‘Amplitudine’. Pentru reprezentarea grafică se vor folosi atât funcţia plot (subfereastra 211), cât şi funcţia stem (subfereastra
212).

>> t = 0:0.1:5;
f = sin(2*pi*0.2*t);
g = 1-f;
figure(1); subplot(211); plot(t, f, '-+b', 'LineWidth', 1.5);
hold on
plot(t, g, '-*r', 'LineWidth', 2);
hold off; grid;
l1 = legend('f(t)', 'g(t)', 0);
title('f(t) = sin(2 \pi 0.2 t) si g(t) = 1 - f(t)');
ylabel('Amplitudine');
subplot(212); stem(t, f, 'ob', 'LineWidth', 1.5);
hold on
stem(t, g, '^r', 'LineWidth', 2);
hold off; grid;
l2 = legend('f(t)', 'g(t)', 0);
xlabel('timp'); ylabel('Amplitudine');

10. Interfețe grafice


MATLAB oferă posibilitatea de a realiza interfețe grafice, prin intermediul utilitarului GUIDE (graphic user interface
development environment). Utilitarul se lansează în execuție cu comanda
>> guide
Fereastra principală va arăta ca în figura 6.

Figura 6. Utilitarul GUIDE pentru editarea interfețelor grafice

Sunt predefinite 4 tipuri de interfețe grafice: interfață fără elemente implicite (blank), interfață cu elemente de
control (Uicontrols), interfață cu sistem de axe și meniuri (axes and menus), interfață cu ferestre de dialog (modal question
dialog). De asemenea, se pot deschide și edita interfețe existente. Toate interfețele vor fi salvate în mod automat cu extensia
.fig.

Exercițiu: Se va crea o intefață grafică, care să afișeze un semnal sinusoidal, amplitudine și frecvență introduse manual.

13

S-ar putea să vă placă și