Documente Academic
Documente Profesional
Documente Cultură
Pachetul de programe MATLAB (MATrix LABoratory) ofer un mediu performant avnd ca scop
principal simplificarea modului de prelucrare numeric a datelor. Matlab-ul permite exprimarea soluiilor unor
aplicaii cu caracter tiinific sau tehnico-ingineresc ntr-un limbaj simplu, apropiat de formularea analitic
(matematica) a problemei n cauz. n acest mod, utilizatorul se poate concentra n primul rnd asupra metodei
de rezolvare fr a ntmpina dificulti majore n traducerea soluiei n limbajul propriu MATLAB-ului.
Nucleul MATLAB ncorporeaz un numr mare de funcii predefinite destinate operaiilor
matematice de uz general (aritmetica n virgul mobil, calcul polinomial, funcii trigonometrice,
exponeniale, logaritmice, speciale, etc.), manipulrii tablourilor i matricelor, rezolvrii unor probleme de
analiz numeric, reprezentri grafice 2D i 3D, dezvoltrii de programe n limbaj MATLAB i interfarii
acestora cu sistemul de operare gazd. La aceste funcii predefinite disponibile n nucleul de baz se adaug
un numr nsemnat de pachete de programe (toolbox-uri) acoperind domenii specifice (procesarea
semnalelor, teoria controlului, statistica, reele neurale, calcul simbolic, procesarea imaginilor, optimizare,
etc.). Aceste toolbox-uri, ca i programele utilizatorilor, sunt fiiere surs scrise ntr-un limbaj de programare
simplu propriu mediului MATLAB.
Nucleul MATLAB poate opera att n regim de linie de comand - execuia imediat a comenzii
introduse de utilizator - ct i de interpretor - execuia unui program aflat n form surs ntr-un fiier.
Aceast particularitate a sporit extensibilitatea limbajului permind utilizatorilor s adauge funcii proprii la
setul deja existent (predefinit sau cele din toolbox-urile de firma). Flexibilitatea limbajului este avantajat i
de existena unui singur tip de dat de baz, tipul matriceal avnd ca elemente valori reale sau imaginare.
Spre deosebire de alte limbaje, variabilele nu trebuie declarate i nici dimensionate.
Varianta actual a nucleului MATLAB este scris n ntregime n C i poate rula pe diferite tipuri de
sisteme de calcul (IBM- PC, VAX, SUN, Macintosh). Ea ofer facilitile unui sistem complet integrat avnd
la baz un limbaj propriu i un interpretor performant. Aceasta permite ca exprimarea unui algoritm relativ
complicat s se fac ntr-o form compact, execuia acestuia s se desfoare ntr-un timp acceptabil i cu o
acuratee ridicat, iar afiarea soluiei s se realizeze ntr-un format convenabil, alfanumeric, eventual nsoit de
o form grafic.
1. Elemente fundamentale de utilizarea a nucleului MATLAB
1.1. Lansarea n execuie i interfaarea cu sistemul de operare
n varianta existent pe reeaua din laborator, nucleul Matlab se lanseaz n lucru prin intermediul shortcutului cu numele Matlab. Lansarea n execuie se va face din directorul curent (d:\Matlab\users) i tot aici se vor salva
fiierele temporare necesare relurii unei sesiuni MATLAB.
Odat ajuni sub controlul nucleului MATLAB, prompterul implicit este ">". Nucleul accept
introducerea unei comenzi MATLAB interne sau externe. Comenzile de tip extern sunt de fapt funcii scrise n
limbaj MATLAB (forma surs) care sunt ncrcate, interpretate i executate de nucleu. Execuia unei comenzi
externe poate fi realizat dac fiierul surs cu numele corespunztor i extensie .M se afla n directorul curent sau
n unul din directoarele specificate n calea de cutare a MATLAB- ului.
Exemplu:
afiarea directorului de lucru: dir
creerea unui fiier text se face cu ajutorul editorului notepad; fie acesta test.m
lansarea lui n lucru: test.
n timpul unei sesiuni MATLAB, utilizatorul poate crea i atribui valori unui numr de variabile aflate
n memoria intern afectat nucleului. Pentru a salva aceste valori i a relua ulterior execuia cu acelai context
de lucru se pot utiliza comenzi de salvare/restaurare de forma:
>save <nume-fiier> - salveaz variabilele n fiierul cu numele precizat
>load <nume-fiier> - restaureaz contextul de lucru folosind fiierul precizat
Extensia implicit pentru aceste fiiere este .MAT. Dac numele fiierului este omis atunci implicit se
folosete fiierul MATLAB.MAT.
Funcia "help" permite obinerea unor informaii cu caracter general despre comenzile interne i externe
MATLAB. Ea poate fi apelat n mai multe forme:
help - ofer informaii despre elementele limbajului MATLAB i a fiierelor .M din directorul curent.
help <nume-funcie> - ofer informaii despre funcia n cauz.
b. diag(A, k) - extrage elementele de pe diagonala k a unei matrici sau formeaz o matrice cu elementele desemnate n
vectorul A plasate pe diagonala k
c. tril(A) - reine elementele de sub diagonala principal, zerorizndu-le pe celelalte;
d. triu(A) - reine elementele de deasupra diagonalei principale, zerorizndu-le pe celelalte.
Operatori pe coloan acioneaz rnd pe rnd, asupra elementelor fiecrei coloane a unui masiv.
Rezultatul este un vector linie:
a) max(A) - determin elementul maxim pe fiecare coloan;
b) min(A) - determin elementul minim pe fiecare coloan;
c) mean(A) - determin valoarea medie pe fiecare coloan;
d) median(A) - determin valoarea median pe fiecare coloan;
e) sum(A) - suma elementelor pe coloan;
f) prod(A) - produsul elementelor pe coloan;
g) cumsum(A) - suma cumulativ a elementelor pe coloan;
h) cumprod(A) - produsul cumulativ a elementelor pe coloan;
i) cov(A) - matricea de covarian (fiecare coloan este considerat o variabil i fiecare linie o observaie);
j) std(A) - deviaia standard (sqrt(diag(cov(x))));
Observaie:
Dac argumentul din funciile de mai sus este un vector, rezultatul este un scalar.
Generarea matricilor utile se face folosind urmtoarele funcii :
a) zeros(M, N) - genereaz o matrice nul cu M linii i N coloane (la matricile ptrate se poate omite
numrul de coloane);
b) ones(M, N) - genereaz o matrice cu elemente unitare;
c) rand(M, N) - genereaz o matrice cu elemente aleatoare;
d) eye(M, N) - genereaz o matrice identitate.
1.6. Comenzi speciale
Faciliteaz lucrul n cadrul sesiunii de lucru :
a) clear X - terge variabila X din spaiul de lucru;
b) clear - terge toate variabilele din spaiul de lucru;
c) clc - terge ecranul de comanda;
d) ... - semnul de continuare a unei instruciuni pe a doua linie;
e) % - plasat la nceputul liniei, desemneaz o linie de tip comentariu;
f) disp - afiarea datelor i mesajelor sub forma :
disp(A) - afieaz matricea A;
disp('mesaj') - afieaz mesaj.
1.7. Exerciii
a.
b.
c.
d.
e.
Generarea un vector x cu elementele cuprinse ntre 0.0 i 3.0, cu pasul de incrementare de 0.2: x =
(0.0:0.2:3.0)';
Generarea unui vector y ale crui elemente s fie produsul dintre:
sinusul elementului corespunztor din primul vector;
rezultatul exponenierii elementului luat cu semn schimbat din primul vector: y = sin(x).*exp(-x);
S se formeze matricea ce are drept coloane vectorii x i y: A=[x y];
S se determine dimensiunea acestei matrici: size(A);
Sa se anuleze, n matrice, elementele de pe linia 5: A(5,:) = [0 0]
1 1 0 0 0
1 1 1 0 0
0 0 1 1 1
0 0 0 1 1
2. Faciliti MATLAB
Se urmrete o trecere n revist a facilitilor grafice i de lucru cu fiiere n cadrul mediului
MATLAB. De asemenea, se vor detalia instruciunile ce exercit controlul asupra execuiei comenzilor,
formatele de editare i modul n care se creeaz i se opereaz cu fiierele .M.
2.1. Structuri pentru controlul execuiei comenzilor
2.1.1. Bucla for
Forma general a unei bucle for este:
for variabila=start : pas : final
instruciuni
end
unde:
variabila reprezint variabila de contorizare a buclei;
start reprezint valoarea atribuit iniial variabilei de contorizare;
pas reprezint pasul de incrementare al variabilei de contorizare;
final reprezint valoarea final atribuit variabilei de contorizare;
instruciuni reprezint o succesiune de una sau mai multe comenzi MATLAB;
end marcheaz sfritul buclei for.
Dac instruciunile sunt urmate de caracterul ";" se inhib afiarea rezultatelor intermediare din bucla
for (se recomand folosirea lui).
Exemplu:
n=10;
for i=1:n
x(i)=i^2;
end;
Pot exista i situaii n care este necesar folosirea mai multor bucle for imbricate; n aceste cazuri
buclele trebuie s fie strict incluse una n cealalt i s respecte forma general de scriere.
Exemplu:
m=6; n=8;
for i=1:m
for j=1:n
A(i,j)=1/(i+j-1);
end
end
A
Observaie:
Neintroducerea terminatorului end n bucla for determin neexecuia buclei. Sistemul rmne n stare de
ateptare pn la introducerea lui end.
i=0;
for t=0:0.01:10
t=0:0.01:10;
i=i+1;
y=sin(t);
y(i)=sin(t);
end
O astfel de transformare determin o cretere a vitezei de lucru de aproximativ 25 de ori. O alt metod de
mrire a vitezei de lucru este cea de prealocare a oricror vectori pentru care se dorete determinarea elementelor.
Exemplu:
y=zeros(1,100);
for i=1:100
y(i)=2*i^2;
end
Fr prealocare, interpretorul MATLAB-ului redimensioneaz, la fiecare pas din for vectorul iniial
mrindu-i dimensiunea cu o unitate; acest pas este eliminat la prealocare, memoria fiind utilizat mult mai
eficient. Principalul inconvenient n memorarea n spaiul de lucru deriv din faptul c memoria tinde s
devin fragmentat n cursul unei sesiuni de lucru, astfel nct, dei exist suficient spaiu de stocare, acesta
nu este contiguu pentru a permite stocarea unei variabile de dimensiune mare. Spaiul de memorare
disponibil, afiat n urma lansrii comenzii who reprezint spaiul contiguu disponibil pentru memorare;
spaiul disponibil total este sensibil mai mare. Acest spaiu devine vizibil mai mare dac tergem variabila de
dimensiune maxim din spaiul de lucru.
2.1.4. Instruciunea BREAK
Aceast instruciune determin ieirea forat dintr-o bucl for, while sau dintr-un if.
Exemplu:
S se determine precizia de calcul pentru maina de lucru:
eps=1;
for i=1:1000
eps=eps/2;
if (eps+1<=1)
break;
end
end
eps=eps*2;
2.2. Fiiere de comenzi indirecte ( .M) i fiiere funcii
MATLAB-ul este capabil s execute secvene de comenzi memorate n fiiere cu extensie .M. Un
fiier.M este format dintr-o succesiune de instruciuni MATLAB ce pot include i referiri la alte fiiere .M,
incluznd chiar fiierul n cauz (apel recursiv). Lansarea n lucru a unui astfel de fiier se face prin
introducerea numelui su. n acest fel se pot memora i executa secvene mai lungi de comenzi fr ca ele s
fie introduse de fiecare dat de la tastatur. Prelucrrile efectuate afecteaz n mod global zona de variabile.
Exist i un al doilea tip de fiiere .M, care permite extinderea pachetului MATLAB i construire de noi
funcii. n acest caz se specific argumentele funciei iar variabilele folosite au caracter local. Ambele tipuri de fiiere .M
sunt fiiere text ASCII i pot fi create cu ajutorul unui editor de texte.
2.2.1. Fiiere de comenzi indirecte ("script files")
La apelarea unui fiier script, MATLAB-ul va executa instruciunile cuprinse n acesta, linie cu linie,
neateptnd nici o comand de la tastatur.
Exemplu:
%se calculeaz numerele lui Fibonnaci
f=[1 1];
i=1;
while f(i)+f(i+1)<1000
f(i+2)=f(i)+f(i+1);
i=i+1;
end
Dup execuia unui fiier.M controlul revine MATLAB-ului. Meniurile demonstrative ncorporate n
MATLAB reprezint un exemplu de folosire a fiierelor.M.
Observaie: Datele sunt autoscalate i axele x i y sunt desenate pe ecran. Desenul este afiat pe ecranul
grafic; pe sistemele cu varianta MATLAB sub Windows ambele ecrane - de comanda i grafic- pot fi
vizualizate simultan.
Acestei comenzi de desenare simpl i se pot adaug:
- inscriptionarea unui titlu;
- etichetarea axelor;
- trasarea verticalelor i orizontalelor n dreptul fiecrei diviziuni de pe axe;
Exemplu:
y = [0 48 84 1 91 6 14];
plot(y);
title('Primul desen'), xlabel('Abscisa'),
ylabel('Ordonata'), grid
Dac x i y sunt vectori de aceeai lungime, comanda: plot(x,y) deseneaz elementele lui y funcie de
elementele lui x.
Exemplu:
t = 0:0.05:4*pi;
y = sin(t);
plot(t,y)
Pentru a suprapune mai multe grafice pe aceeai fereastr, se va proceda astfel:
- dac y este o matrice i x este un vector, plot(x,y) va trasa graficele corespunztoare liniilor sau
coloanele lui y n funcie de vectorul x, folosind caractere diferite pentru fiecare dintre ele;
- dac x este o matrice i y un vector se aplic o regul similar trasndu-se graficele corespunztoare liniilor
lui x n funcie de vectorul y;
- dac x i y sunt matrici de aceeai dimensiune, se va trasa graficul corespunztor coloanelor lui y funcie
de coloanele lui x.
Un alt mod de a realiza desene multiple este exemplificat prin comanda:
plot(x1,y1,x2,y2,...,xn,yn)
unde (x1,y1),(x2,y2),... sunt perechi de vectori. n acest fel se obine reprezentarea grafic pentru fiecare pereche
(x,y). cest tip de grafic are avantajul c permite afiarea simultan a vectorilor de lungimi diferite. Fiecare pereche
de vectori va folosi un alt tip de linie pentru afiare. Se poate indica tipul de caracter cu care se face trasare.
Valorile posibile sunt:
solid
intrerupt(dashed)
-doua puncte(dotted)
:
linie-punct(dashdot)
-.
punct(point)
.
plus
+
stea(star)
*
cerc(circle)
o
x-mark
x
Pentru monitoare color se poate utiliza o opiune de culoare: 'w' (white), 'r' (red), 'g' (green), 'b' (blue).
2.3.2. Grafic n coordonate polare i logaritmice
Aceast facilitate permite folosirea altor tipuri de coordonate. Funciile specifice sunt similare cu
cele prezentate mai sus.
- polar(theta,rho) - reprezint grafic, n coordonate polare, unghiul "theta" (n radiani) n funcie de raza
"rho";
- loglog(x,y) - realizeaz grafice n coordonate logaritmice pentru ambele axe;
- semilogx(x,y) - realizeaz grafice reprezentnd pe x n coordonate logaritmice i pe y liniar.
- semilogy(x,y) - analog ca mai sus inversnd x cu y.
2.3.3. Suprafee mesh 3-D i grafice de tip contur
Comanda urmtoarea creeaz imaginea tridimensionala a matricii Z: mesh(Z).
O suprafa mesh este definit prin coordonatele de cot z determinate de elementele matricei
deasupra unei suprafee x-y, plane. Funcia mesh poate fi astfel folosit pentru vizualizarea matricilor de
dimensiune mare, imposibil de reprezentat sugestiv prin forma numeric. De asemenea, aceast comand
poate fi folosit pentru reprezentarea grafic a funciilor ce depind de dou variabile: z=f(x,y). Pentru a putea
face reprezentarea se creeaz mai nti, o reea plan, echidistant divizat pe cele dou axe sub forma unei
matrici:
Exemplu:
x = -8:0.5:8;
y = x';
X = ones(y)*x; % creeaz o matrice cu linii identice
Y = y*ones(x);
R =sqrt(X.^2 +Y.^2)+eps; % conine distanele de la centrul suprafeei plane;
Z = sin(R)./R;
mesh(Z)
Generarea matricilor X i Y poate fi optimizat prin apelul funciei meshdom.
Observaie:
Opiunile comenzii mesh permit diferite unghiuri de vedere i deprtri de suprafaa generat.
O alt categorie de grafice l constituie cele de tip "contur". Efectul lor se poate observa dup
secvena de forma:
p = rand(4,7);
contour(p)
2.3.4. Controlul ecranului
Comutarea ntre ecranul grafic i cel de comand precum i divizarea ecranului grafic sunt disponibile n
MATLAB cu ajutorul urmtoarelor comenzi:
- shg - comut pe ecranul grafic;
- clg - terge ecran grafic;
- home - mut cursorul n coltul stnga-sus al ecranului (analoga clc);
- subplot(m,n,p) - subdivizeaz ecranul grafic; parametrii m, n, p au urmtoarea semnificaie:
m reprezint numrul de grafice pe linie;
n reprezint numrul de grafice pe coloan;
p reprezint poziia primului grafic inscripionat n partiia ecran realizat;
Exemplu:
subplot(2, 1, 1), plot(abs([2 -7 3 5 17 -25]))
subplot(2, 1, 2), plot(rand(1,10));
Observaie:
1. Se pot scrie mai multe instruciuni pe aceeai linie, separate prin virgule.
2. n unele situaii se renun la scalarea automat a graficului n favoarea unei scalri manuale, cu ajutorul
comenzilor:
v = [x_min, x_max, y_min, y_max];
axis(v)
3. Pentru a evita efectul deformant introdus de ecran se poate utiliza comanda: axis('square')
4. Meninerea unui grafic pe ecran n vederea suprapunerii unui alt grafic poate fi obinut cu ajutorul
funciei hold.
2.4. Probleme propuse
1. S se scrie o funcie MATLAB, rangk(x, k) care s permit determinarea elementului aflat pe rangul k (dac x este
un vector) sau a vectorului de elemente aflate pe rangul k n coloanele matricei (dac X este o matrice).
function y=rangk(x, k) % RANGK elementele de pe rangul K
% Daca X este un vector, RANGK(X,K) furnizeaz elementul de pe
% rangul K din X. Daca X este o matrice, RANGK(X,K) furnizeaz un vector %linie continnd elementele de
pe rangul K al fiecrei coloane
if nargin ~= 2
error('argument missing');
end
[m,n]=size(x);
if(n == 1) x=x';
temp=m;
m=n;
n=temp;
end
10
x1 / 2 pentru x [ 50 ,100 ]
3. S se deseneze suprafaa mesh i contur pentru matricea 25x25:
- matrice de numere aleatoare uniform distribuite n intervalul (0,1);
- matrice de numere normal distribuite de medie zero i dispersie 1;
Obs. Pentru generarea numerelor aleatoare se folosesc funciile Matlab rand i randn.
4. S se genereze un vector de numere aleatoare uniform distribuite n intervalul (1,100); s se mpart
intervalul [1,100] n 10 intervale echidistante i s se determine cte numere aleatoare sunt n fiecare din
cele 10 intervale.
5. S se scrie o funcie MATLAB, coincid(x,y) care s primeasc ca argument doi vectori x, y i s ntoarc
numrul de coincidente ntre elementele acestora. Argumentele care lipsesc se vor prelua de la tastatur.
6. S se modifice funcia RANGK descris anterior astfel nct dac numrul de argumente este 1, vectorul
sau matricea x se citesc dintr-un fiier ASCII al crui nume se preia de la tastatur. Verificai existena
fiierului n cauz. (indicaie: folosii funciile LOAD, EXIST.)
11