Sunteți pe pagina 1din 56

Elemente de practica

programarii

MATLAB

Introducere n MATLAB
n prezent utilizarea limbajelor de programare este fcut
prin intermediul unor medii de programare, care ofer
programatorului pe lng limbaj i posibiliti facile de lucru:
- scrierea rapid a programului (un editor de texte);
- utilizarea unor funcii speciale (biblioteci de programe);
- verificarea sintaxei (prin compilare);
- executarea programului (prin compilare i lansare n
execuie);
- testarea funcionrii corecte a programului (execuie sub
control pas cu pas);
Aceste avantaje fac din programare o activitate plcut i
abordabil i de specialitii altor domenii de activitate dect cel
al informaticii.

Un exemplu de astfel de mediu de lucru este


MATLAB (MATrix LABoratory), un program
interactiv pentru rezolvarea de probleme
stiinifice. Aplicaiile includ:
calcul matriceal;
gsirea rdcinilor ecuaiilor polinomiale;
analiza i prelucrarea numeric a semnalelor;
reprezentri grafice att n dou ct i n trei
dimensiuni;
analiza i prelucrarea numeric a imaginilor;
De la an la an firma productoare (MathWorks,
1984, SUA - http://www.mathworks.com/) adaug funcii
noi, organizate n aa numitele Toolbox-uri, seciuni care
grupeaz instrumente ce pot rezolva problemele
specifice unui domeniu de activitate. Utilizatorului nu-i
rmne dect sarcina de a studia posibilitile oferite i

Fereastra de lucru in modul comanda:

Folosirea comenzii help


help disp
DISP Displays a matrix as text.
DISP(X) displays the matrix, without printing the matrix
name.
If X contains text, the text is displayed.

n exemplul anterior sunt cerute informaii despre


comanda de afiare disp. Remarcm explicaiile i
faptul c dei am cerut informaii despre disp, ni s-au
dat informaii despre DISP. Am putea trage concluzia
c nu are importan cu ce fel de litere scriem. FALS,
comenzile sunt case sensitive, i trebuie date cu
litere mici. Help-ul a folosit litere mari pentru a fi
distinse mai uor explicaiile de numele comenzii.

Folosirea comenzii help

Variabile MATLAB

Prin variabile nelege denumirea locaiilor de memorie n care


sunt stocate mrimile ce sunt folosite de program. Acestea n
general sunt definite de programator, n Matlab ns, pentru a
fi uurat munca utilizatorului, apar i generri automate de
variabile.
Exemplu, tastm 2+3 i s acionm tasta enter.
2+3
ans =
5

Matlab-ul face calculul i ne afieaz rezultatul ca


valoare a variabilei ans. Deci nici pentru calcule directe
Matlab-ul nu renun la utilizarea variabilelor!

Definirea unui nume de variabil

Numele de variabile nu trebuie s


depeasc 19 caractere (ce este suplimentar nu
este luat n considerare). Caracterele permise
sunt literele alfabetului englez, cifrele de la 0 la 9
i semnul _ (subliniere).
Atenie, numele de variabile sunt case senzitive!
De
exemplu,
"VaRIAbiLa_V",
"variabila_v",
"VARIABILA_V" i "variabila_V" sunt considerate
de Matlab variabile distincte!

Matricea, structura de baz a variabilelor Matlab

S generm de exemplu variabila g:


g=2;
whos
Name
g

Size
1 by 1

Elements
1

Bytes
8

Density Complex
Full
No

Grand total is 1 elements using 8 bytes

(Comanda whos este ne d informaii despre variabilele


existente)

Fiind deja generat ca matrice (i neavnd specific o


dimensiune fix) putem oricnd s-i nbogim
numrul de elemente:
g(2)=3
g=
2 3
g(2,1)=1
g=
2 3
1 0
whos
Name
g

Size
2 by 2

Elements
4

Bytes
32

Grand total is 4 elements using 32 bytes

Density Complex
Full
No

Exemplu, generarea matricei m de dimensiune 3


x 5:
m=[11 12 13 14 15; 21 22 23 24 25; 31 32 33 34 35]
m=
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35

Dac ni se pare mai simplu, putem suplini


caracterul separator de linii ; cu apsarea tastei
enter.
h=[11 12 13 14 15
21 22 23 23 25]
h=
11 12 13 14 15
21 22 23 23 25

Putem obine matrici noi i efectund


calcule, ntre elementele similare (element cu
element) ale unor matrici cu aceleai dimensiuni.
Operatorii utilizai sunt:
nmulire element cu element:
.*
mprire element cu element
/
Adunare element cu element
+
Scdere element cu element
Ridicare la putere element cu element
.^

Exemplu, matricea suma, obinut prin adunarea


matricilor a i b:
suma=a+b
suma =
11 13 15
17 19 21
23 25 27

Un caz particular de matrici sunt vectorii. Putem avea


n elemente, dispuse ntr-un vector linie (orizontal), caz
n care matricea corespunztoare este de dimensiune
1 x n, sau ntr-un vector coloana (vertical), pentru care
matricea corespunztoare este de dimensiune n x 1.
Exemplu de generare a unui vector linie:
vector_linie=[1 2 3 4 5 6]
vector_linie =
1 2 3 4 5 6

Exemplu de generare a unui vector coloan:


vector_coloana=[7; 8; 9; 10]
vector_coloana =
7
8
9
10

Introducerea datelor

n afar de definirea direct a valorilor


variabilelor (prezentat anterior), Matlab-ul poate
prelua valori din fiiere sau poate fi fcut s cear
actualizarea valorilor unor variabile.
Input comand prin care sunt introduse date de la
tastatur
Sintax
variabil=input('text explicativ')
variabila indicat
este actualizat numeric, de la tastatur
Se pot tasta inclusiv expresii.
Pentru a introduce o matrice se indic parantezele.
Dac nu se tasteaz nimic nainte de enter,
rezultatul este o matrice goal

Exemplu:
d=input('introduceti matricea d ')
introduceti matricea d [1 2 3; 4 5 6]
d=
1 2 3
4 5 6

Prezentarea rezultatelor i afiarea de mesaje

Orice variabil i prezint coninutul la simpla


apelare a numelui ei. Numele aprut, urmat de
coninut, nu este modul cel mai fericit de comunicare a
unor rezultate, utilizatorul poate fi derutat i poate s
ntrebe ce este cu valorile prezentate, ce reprezint
variabila indicat. Situaii de acest gen trebuiesc
evitate i fiecare mrime afiat pe ecran trebuie s fie
nsoit de explicaii, succinte dar clare!

disp funcie ce tiprete pe ecran, coninutul unei


variabile, rezultatul unui calcul sau un text explicativ.

Sintax
disp(x)
disp(sir caractere)


Exemple:
disp('un exemplu de matrice 2 x 3 este: ')
un exemplu de matrice 2 x 3 este:
d=[ 1 2 3
4 5 6];
disp(d)
1 2 3
4 5 6
disp(2+3*5)
17

Programarea in
MATLAB
Matlab-ul
ne
ofer
varianta
memorrii pe disc
a succesiunii de
comenzi, ntr-un
fiier text, avnd
extensia
.m
(numit i fiier M),
care poate fi apoi
lansat n execuie
din fereastra de
comenzi.

Lansarea n execuie a editorului cu care se poate creea un nou fiier M

Putem spune c n acest fel


alctuim programe (script-uri
M) scrise n limbajul Matlab.

Lansarea in executie a unui fisier .m


O variant simpl de indicare a locului este
folosirea comenzii cd, prin care ndreptm atenia
Matlab-ului spre locul n care se afl fiierul
nostru. Exemplu, am construit fiierul calcul.m pe
discul d: n subdirectorul amatlab. Putem utiliza
succesiunea de comenzi:
cd d:
cd amatlab
calcul
n loc de tastarea numelui programului exist i o
variant alternativ (bun mai ales atunci cnd
nu tim precis numele), lansarea din meniul File a
comenzii Run M-file.

Structuri de control

while Instruciune repetitiv, funcie de indeplinirea


unei condiii logice se repet execuia unui grup de
instruciuni
Sintax

while expresie
grup de instruciuni
end
grup de instruciuni este executat atta timp ct
expresie este adevrat.

Exemplu:
Calculul sumei elementelor vectorului
variabila suma:
v=[2 1 5 3 6];
n=length(v);
suma=0;
i=1;
while i<=n
suma=suma+v(i);
i=i+1;
end
disp('suma elementelor vectorului este ');
disp(suma);
Produce efectul:
suma elementelor vectorului este
17

for Instruciune repetitiv, un grup de


instruciuni se execut de un numr cunoscut de
ori
Sintax
for index=expresie
grup de instruciuni
end
grup de instruciuni este executat atta timp ct
indexul parcurge expresie.
De foarte multe ori index=expresie are forma:
contor=valoare iniial: pas: valoare final

Exemplu:
Acelai calcul, al sumei elementelor vectorului v
n variabila suma:
v=[2 1 5 3 6];
n=length(v);
suma=0;
for i=1:n
suma=suma+v(i);
end
disp('suma elementelor vectorului este ');
disp(suma);
Produce efectul:
suma elementelor vectorului este
17

If Instruciune condiional, funcie de


indeplinirea unor condiii logice sunt executate
anumite grupuri de instruciuni
Sintax
Varianta 1

if expresie
grup de instruciuni
end

grup de instruciuni este executat doar dac


expresie este adevrat, n caz contrar nu se
execut nimic.

Varianta 2

if expresie
grup de instruciuni 1
else
grup de instruciuni 2
end

grup de instruciuni1 este executat


dac
expresie este adevrat, n caz contrar se
execut grup de instruciuni 2.

Varianta 3

if expresie1
grup de instruciuni 1
elseif expresie2
grup de instruciuni 2
elseif expresie3
grup de instruciuni 3
else
grup de instruciuni 4
end

grup de instruciuni1 este


adevrat.

executat

dac

expresie1

este

Dac expresie1 nu este adevrat i este adevrat expresie2 se


execut grup de instruciuni 2
Dac expresie1 nu este adevrat i este adevrat expresie3 se
execut grup de instruciuni 3
n cazul n care nu este ndeplinit niciuna din situaiile anterioare
se execut grup de instruciuni 4.

Exemplu:
%gasirea valorii v intr-un sir de numere
v=input('indicati valoarea ce trebuie cautata ');
sir=input('indicati sirul de nr. sub forma unui vector ');
n=length(sir);
g=0; % nr de gasiri
for i=1:1:n
if v==sir(i)
disp('a fost gasit v in sir la pozitia ');
i
g=g+1;
end
end
if g==0
disp('v nu a fost gasit in sir')
else
disp('numarul de gasiri a fost ')
g
end

Produce efectul:
cautare
indicati valoarea ce trebuie cautata 2
indicati sirul de nr. sub forma unui vector [1 2 3 2 4 2 4 2]
a fost gasit v in sir la pozitia
i=
2
a fost gasit v in sir la pozitia
i=
4
a fost gasit v in sir la pozitia
i=
6
a fost gasit v in sir la pozitia
i=
8
numarul de gasiri a fost
g=
4

Operatori relaionali i expresii logice

Operatorii relaionali folosii n Matlab sunt:

mai mic
<
mai mic sau egal <=
mai mare

>

mai mare sau egal >=


identic
diferit

==
~=

Forma sub care se utilizeaz operatorii relaionali


este de regul:
rezultat = (expresie1) operator relational
(expresie2)
n funcie de mrimile implicate n expresie1 sau
expresie2, rezultat poate fi un scalar, un vector
sau o matrice, compus din elementele zero i
unu, dup cum n urma comparaiei acelorai
ranguri a rezultat adevr sau fals. Atenie,
valoarea de adevr a unei matrici este fals doar
atunci cnd toale elementele sunt zero.

n construirea expresiilor logice sunt utilizai i


operatorii logici:

Operator logic
Simbol
Prioritate
NU
~
1
I
&
2
SAU
|
3

Grafica MATLAB

Matlab-ul nu nseamn numai prelucrri


numerice, calcule i rezolvri de ecuaii,
deoarece ofer i instruciuni cu care s poat fi
ntocmite grafice, att n dou dimensiuni ct i
n trei dimensiuni. Mai mult chiar, imaginile pot fi
i ele afiate i prelucrate, existnd un toolbox
dedicat procesrii imaginilor.

Grafice 2 D
Matlab-ul ne ofer o instruciune apropriat de
definiiile de la matematic, n care ne este cerut un
domeniu de definiie i o relaie prin care s se ajung
la valorile funciei.
Sintax
fplot(list funcii, limite, marcaj)
list funcii descrie funcia de argument x sau funciile
(tot de argument x, separate prin virgul) ce dorim s
fie reprezentate. Exemple de descriere: sin(x), cos(x),
2*x+1, (x.^2)
limite este un vector cu 2 sau 4 elemente, ce fixeaz
prin primele 2 elemente, domeniul de definiie i prin
valorile 3 i 4 domeniul de valori ale funciei. Exemple:
[-1 1], [-1 1 2 6]
marcaj este un parametru opional, cu care impunem
forma curbei (putem pune suplimentar liniei continui i
nite semne speciale pe curba funciei). Valorile

Exemple:
>>fplot ( 'x* sin(x)', [ 0 10*pi ] ) % pi este 3,1415

fplot('[tan(x), sin(x), cos(x)]', [-2*pi 2*pi -2*pi 2*pi])

fplot('sin(x)', [0 4*pi], '-+')

Pe lng fplot, Matlab-ul ofer i funcia plot, o alt


instruciune pentru reprezentri grafice. Care este
diferena?
Fplot pleac de la o expresie i un domeniu de definiie,
creaz o imagine interpolat a domeniului de valori.
Plot pleac de la perechi valori pe care le consider coordonate
x,y (abscis, ordonat), le reprezint i le unete cu drepte.
Sintax
Varianta 1
plot(x,y) sunt reprezentate perechile de puncte ce au
abscisa n vectorul x i ordonata n vectorul y.
Varianta 2
plot(y) sunt reprezentate perechile de puncte ce au
abscisa
numrul
liniei
i
ordonata
valorea
corespunztoate de pe coloan. Pentru fiecare coloan
se construiete un grafic.

q=[3 5 6 9 10];
w=[1 2 3 7 4];
plot(q,w)

e=[3 4 5 2; 1 0 3 4; 2 1 5 6];
plot(e)

Instruciunea plot(x,y,s) ofer i posibilitatea de a


indica n ce culoare i sub ce form dorim s fie
realizate segmentele ce unesc punctele, utiliznd
parametrul s (un ir de cel mult 3 caractere):
simbol
y
m
c
r
g
b
w
k

culoare
galben
magenta
cyan
rou
verde
albastru
alb
negru

simbol

.
o
x
+
*
:
-.
--

Efect trasare
punct
cerc
marcare cu x
marcare cu plus
linie continu
stelue
puncte
linie punct
linie ntrerupt

Exemplu de grafic realizat cu stelue:


q=[3 4 5 6 7 8 9];
w=[7 2 3 5 4 6 1];
plot(q,w,'*')

Atunci cnd se doresc reprezentri ale mai multor


seturi de date, reprezentate prin triplete x,y,s,
instruciunea plot poate avea forma:
plot(x1,y1,s1, x2,y2,s2, x3,y3,s3,...)
Exemplu:
q=[3 4 5 6 7 8 9];
w=[7 2 3 5 4 6 1];
e=[4 6 8 9 10];
r=[10 6 7 4 8];
plot(q,w,'-',e,r,'--')

stem(y) face o reprezentare grafic cu segmente


verticale de lungimea valorilor indicate n vectorul y.
Fiecare segment se termin cu un cercule.
Exemplu:
c=[1 2 3 0 5 4 1];
stem(c)

stem(x,y) reprezint grafic, cu cerculee, n sistem


cartezian, valorile ce au abscisa indicat n vectorul x
i ordonata n vectorul y. Fiecare cerculet este unit cu
axa x cu un segment vertical.
Exemplu:
x=-1:0.25:1;
y=-(x.^2)+1;
stem(x,y)

bar(y) realizez un grafic, n care valorile din vectorul v sunt


reprezentate prin bare verticale.
bar(x,y) realizez un grafic n care pentru fiecare coordonat
x,y (definit prin vectorii x i y), se deseneaz o bar vertical.
Vectorul x trebuie s aib componentele ordonate cresctor.
Exemplu:
x=25:5:75;
y=x.^4;
bar(x,y)

hist(y) reprezint grafic o histogram nprind n 10


intervale egal spaiate, valorile din vectorul y. Fiecare
bar ne arat prin mrimea nlimii (ordonata), de
cte ori este prezent n vectorul y volarea de pe
ordonat. Se reprezint astfel distribuia elementelor
vectorului y.
Exemplu:
x=25:5:75;
y=x.^4;
hist(y)

hist(y,n) variant a comenzii, n care numrul de


intervale nu este 10 ci n.
hist(y,v) variant a comenzii, n care prin vectorul v
sunt centrate valorile din vectorul y, a cror distribuie
este dorit.
Exemplu:
a=[1 1 1 1 2 2 2 5 2 3 1 4 0];
b=[1 2 5];
hist(a,b)

Controlul axelor, comentarii, titluri


title('text') se folosete pentru indicarea de titluri,
textul aprnd n partea de sus a graficului.
xlabel('text') se folosete pentru indicarea unor
explicaii i a unitilor de msur pe abscis, textul
aprnd sub axa x.
ylabel('text') se folosete pentru indicarea unor
explicaii i a unitilor de msur pe ordonat, textul
aprnd pe axa y.
zlabel('text') se folosete la graficele n trei
dimensiuni pentru indicarea unor explicaii i a
unitilor de msur pe axa z.
legend(text1,text2,text3, ...) adaug legend
graficului, corespunztor fiecrui tip de linie cu care
este construit graficul, sunt prezentate explicaiile
text1, tex2,....
legend(tip-linie1, text1, tip-linie2, text2,...)

Exemplu:
title('Text titlu')
xlabel('text axa x')
ylabel('texy axa y')

axis([XMIN XMAX YMIN YMAX]) se folosete pentru a


scala axele graficului curent, axa x indicnd valori ntre
XMIN i XMAX, iar axa y indicnd valori ntre YMIN i
YMAX.
axis([XMIN XMAX YMIN YMAX ZMIN ZMAX]) se folosete
pentru a scala axele graficului tridimensional curent,
axa x indicnd valori ntre XMIN i XMAX, axa y indicnd
valori ntre YMIN i YMAX, iar axa z indicnd valori ntre
ZMIN i ZMAX.

axis('off') anuleaz afiarea att pentru axe ct i


pentru inscripiile lor
axis('on') readuce pe ecran desenul axelor ct i
inscripiile lor

grid on instruciune cu care generm o reea de linii


orizontale i verticale, cu care s putem citi corect
mrimea valorilor pe grafic

subplot(m,n,p) mparte matricial, n m x n zone,


fereastra curent pentru grafice, n a p-a zon trgnd
axele pentru urmtorul grafic. Pentru completarea
ferestrei cu alte grafice, fiecare nou grafic trebuie
precedat de o comand corespunztoare subplot. n
situaia n care noul grafic se suprapune peste grafice
existente, acestea dispar.
Revenirea la varianta n care ferestra gzduiete un
singur grafic se face cu comanda subplot(1,1,1).
Exemple:
subplot(3,3,1)

fplot('(x^3)', [0,1])

subplot(3,3,2)
subplot(3,3,3)
subplot(3,3,9)

Exemplu de grafic 2 D
t = linspace(0,8, 401);
y = t.*exp(-t).*cos(2*pi*4*t);
subplot(2,1,1)
plot(t,y);
xlabel(Timp (s));
ylabel(Amplitudine)
subplot(2,1,2)
stem(t,y);
axis([0 1 min(x) max(x)])
xlabel(Timp (s) detaliu);
ylabel(Amplitudine)