Sunteți pe pagina 1din 8

Lab 1.

Introducere în Matlab

MATLAB – este un mediu de calcul numeric şi limbaj de programare de-a patra


generaţie. Dezvoltat de MathWorks, MATLAB permite manipularea
matricelor, trasarea de funcţii şi date, punerea în aplicare a
algoritmilor, crearea de interfeţe pentru utilizator, si interfatarea cu
programe scrise în alte limbaje, inclusiv C, C + +, şi Fortran.

Simulink – pachet adiţional, ce oferă posibilitatea de a realiza simulări a


sistemelor dinamice şi îmbarcate utilizând modele matematice.

1. Matlab – Mediul de lucru Linia de comanda Workspace

Editor
Linia de comandă
În Linia de comandă se declară şi se iniţializează variabile, se execută funcţii Matlab,
fişiere .m sau modele Simulink şi se afişează rezultate.

Editor
Editorul Matlab pune la dispoziţie o interfaţă grafică pentru editarea de cod Matlab şi
pentru debug.

Workspace – set de variabile construit în timpul unei sesiuni de lucru Matlab şi stocat în
memorie. Variabilele sunt adăugate în workspace prin apel de funcţii, rulare de fişiere sursă
.m, executare de modele Simulink sau încărcare de variabile salvate anterior în fişiere .mat.
Vizualizare conţinut workspace : comanda who / whos.

Workspace-ul este comun liniei de comandă, editorului şi modelelor Simulink, i.e. o


variabilă declarată / iniţializată în linie de comandă va fi recunoscută şi în Editor şi în
modelele Simulink.

2. Tipuri de fişiere în Matlab :


.m – fişiere Matlab ce conţin cod sursă;
.mat – fişiere în care se salvează date. Sunt create ca urmare a apelului funcţiei save.
Pentru recuperarea unei variabile salvate anterior într-un fişier .mat se apelează funcţia
load;
.mdl – model Simulink.

3. Instrucţiuni de bază în Matlab

Următoarele instrucţiuni vor fi testate în linie de comandă. (Conţinutul liniei de comandă


nu poate fi salvat.)
 help
 listează toate subiectele primare de ajutor în Command Window
 sintaxa : help topic (ex: help sin; help modelname.mdl, help
classname.name etc.)
 lookfor
 cauta cuvinte cheie in toate intrarile din help
 sintaxa : lookfor topic (ex: lookfor sin)
 doc
 afiseaza documentatia online in browser-ul Help din MATLAB
 sintaxa : doc topic (ex: doc sin)

3.1. Declarare / iniţializare de variabile :

% comentariu
a = 10; % nu se declară tipul variabilei; mediul îi atribuie un tip implicit, în funcţie de
valoarea de iniţializare;
b = [0 2 5]; % declarare vector cu 3 elemente.
m = [0 2 5; 5 7 9; 1 4 3]; % declarare matrice 3x3
v_o = ones(1,10); % declarare vector linie cu zece elemente, iniţializate cu valoarea
1;
v_z = zeros(10,1); % declarare vector coloană cu zece elemente, iniţializate cu
valoarea 0;
v_z = rand(10,2); % declarare matrice 10x2 cu elemente aleatoare;
v_it = 1:100; % declarare vector linie ce conţine toate numerele de la 1 la 100;
v_par = 0:2:100; % declarare vector linie ce conţine toate numerele pare de la 0 la
100;

3.2. Vizualizare variabile din workspace şi tipul lor : whos / who

 who - enumeră în ordine alfabetică toate variabilele din spaţiul de lucru active
 whos – listeaza în ordine alfabetică toate variabilele din spaţiul de lucru active în
prezent, împreună cu dimensiunile şi tipurile lor.

3.3. Conversie variabilă : a = uint8(a);

3.4. Indexare elemente în vector/matrice :

x1 = b(2);
x2 = m(2,3);
xend = m(end,1); % end permite accesarea ultimei linii sau coloane.

3.5. Dimensiune variabile : s = size(m);

3.6. Recuperare linie / coloană dintr-o matrice : l = m(1,:); c = m(:,2);

3.7. Funcţii matematice : bmin = min(b); bmax = max(b);

3.9. Afişare date în Matlab :


t = 1:0.1:20;
f = 10;
s = sin(2*pi*f*t);
plot(s);
plot(t,s);

3.10. Salvare / recuperare date :


save filename1 var1; % salvează variabila var1 în fişierul filename1.mat
load filename2 var2; % încarcă variabila var2 din fişierul filename2.mat

!!! Dacă nu cunoaşteţi sintaxa unei funcţii, tastaţi help nume_funcţie în linia de comandă
şi veţi avea acces la descrierea funcţiei şi a parametrilor aferenţi.

3.11. Operaţii cu vectori / matrici:


v1 = [1 2 3 4];
v2 = rand(1,4);
v3 = v1+v2; % adună cei doi vectori element cu element;
v4 = v1.*v2; % înmulţeste cei doi vectori element cu element;
v5 = rand(4,1);
v6 = v2*v5; % înmulţeşte cei doi vectori după regula înmulţirii matricilor.

Atenţie! Numărul de coloane al primului element trebuie să coincidă cu numărul de linii


al celui de-al doilea element.
3.12. Lucrul cu fisiere:

Functii folosite:

 fopen : fileID = fopen(filename) – deschide fisierul cu numele filename cu acces de


citire
fileID = fopen(filename, permission) deschide fisierul filename cu
urmatoarele tipuri de acces (permission):

 'r' deschide fisierul pentru citire


 'w' deschide fisierul pentru scriere (modificare continut existent)

 'a' deschide sau creeaza fisierul pentru scriere adaugand datele la


sfarsitul acestuia

 'r+' deschide (nu creeaza) fisierele pentru citire si scriere

 'w+' deschide sau creeaza fisierele pentru citire si scriere; modifica


continutul fisierului

 'a+' deschide sau creeaza fisierele pentru citire si scriere adaugand


datele la sfarsit

 fclose : fclose (filename) - inchide fisierul filename


 fread : fread (filename) – citeste datele binar din fisierul filename intr-un vector A
 fwrite: fwrite (filename, A) – scrie elementele fisierului filename in vectorul A

3.13. Functii elementare:

 sin
 sawtooth (dinte de fierastrau)
 dirac
 step unit

Ex:

x = 0:1/100:2*pi;
y = sin(x);
x1 = 0:1/100:10*pi;
y1 = sawtooth(x1);
x2 = [-4 -3 -2 -1 0 1 2 3 4 5];
y2 = dirac(x3);
x3 = -5:1:-5;
y3 = (x3 >= 0);

figure
subplot (411), plot (x,y); grid on;
subplot (412), plot (x1,y1); grid on;
subplot (413), plot (x2,y2); grid on;
subplot (414), stem (x3,y3); grid on;

3.14. Operatii elementare

 structuri : struct – creeaza un vector cu campurile specificate


o sintaxa:
 s=struct (‚field1’, {},’field2’, {}) - creeaza o structura cu
campurile field1, field2
 s= struct - creeaza o structura 1-la-1
 s=struct([]) - creaza o structura fara niciun camp
 s=struct (obj) - creeaza o structura s care este identica
cu structura de baza
 celule : cell - creeaza o matrice cu campurile specificate
o sintaxa:
 c=cell (n) – creeaza o matrice de NxN elemente
 c=cell (m,n) – creaza o matrice de NxM elemente
 c=cell (m,n,p) – creeaza o matrice de NxMxP elemente
 c=cell(javaobj) –converteste un obiect java intr-o
matrice

3.15 Derivare si integrare

 Derivare : Pentru mai multe detalii folositi „ help diff ”


 diff (function) \ h ---> (h = f(x+h) – f(x)) ( help diff )
Ex:
h=0.001;
x=1:h:10;
y=diff((x))\h;
figure
subplot(211);plot(x);grid on;
subplot(212);plot(y);grid on;

 Integrare : Pentru mai multe detalii folositi „help cumtrapz ”


 cumtrapz (function)
Ex:
h=0.001;
x=0:h:10;
y=heaviside(x);
z=cumtrapz(y);
figure
subplot(211); plot(y); grid on;
subplot(212); plot(z); grid on;
3.15 Subplot : - permite afisarea mai multor grafice in aceeasi fereastra
 sintaxa: „subplot(m,n,p)”:
- parametrul „m” indica numarul de grafice care doriti
sa le afisati
- parametrul „n” indica axa
- parametrul „p” indica numarul graficului curent in
care se va afisa
Pentru mai multe informatii despre cum se foloseste comanda „subplot” folositi
„doc subplot”.

4. TEME :
Important !
Matlabul, ca limbaj interpretat (şi nu compilat), este optimizat pentru calculul matricial,
de aceea se recomandă lucrul cu vectori/matrici şi evitarea buclelor pentru a avea o bună
viteză de execuţie.

4.1. Optimizare de cod :

1. Implementaţi (într-un fişier .m) operaţia de înmulţire a două matrici M1(m,n) şi


M2(n,p), folosind varianta clasică (cu 3 bucle for). Folosind funcţia cputime,
calculaţi timpul necesar pentru execuţia operaţiei de înmulţire a matricilor.
Sintaxa for : for i=1:n
Instr_1;
Instr_n;
end

2. Implementaţi acelaşi cod folosind operaţii de înmulţire pe vectori (recuperaţi o linie


şi o coloană întregi şi folosiţi înmulţirea pe vectori). Calculaţi din nou timpul de
execuţie şi comparaţi. Consideraţi matrici de dimensiuni mari pentru a vedea
diferenţa.
3. Implementaţi acelaşi cod folosind înmulţirea directă a două matrici M =
M1*M2 şi evaluaţi timpul de execuţie.

4.2. Operaţii cu matrici tridimensionale – Conversia unei imagini color în niveluri de


gri.

im = imread(‘football.jpg’); % citeşte imaginea football.jpg;


% Determinaţi dimensiunea imaginii !
imshow(im); % afişează imaginea;
img = rgb2gray(im); % conversie imagine color în imagine în niveluri de gri;
imshow(img); % afişare imagine în niveluri de gri;

Ştiind că relaţia de calcul pentru conversia unei imagini color în niveluri de gri este:
0.2989 * R + 0.5870 * G + 0.1140 * B , calculaţi şi afişaţi imaginea în
niveluri de gri.
Rezultatul ar trebui să fie identic cu cel obţinut în urma apelului funcţiei rgb2gray.

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