Sunteți pe pagina 1din 9

Lab 1.

Introducere n Matlab

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


generaie. Dezvoltat de MathWorks, MATLAB permite manipularea
matricelor, trasarea de funcii i date, punerea n aplicare a
algoritmilor, crearea de interfee pentru utilizator, si interfatarea cu
programe scrise n alte limbaje, inclusiv C, C + +, i Fortran.

Simulink pachet adiional, ce ofer posibilitatea de a realiza simulri a


sistemelor dinamice i mbarcate utiliznd modele matematice.

1. Matlab Mediul de lucru Linia de comanda Workspace

Editor
Linia de comand
n Linia de comand se declar i se iniializeaz variabile, se execut funcii Matlab,
fiiere .m sau modele Simulink i se afieaz rezultate.

Editor
Editorul Matlab pune la dispoziie 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 adugate n workspace prin apel de funcii, rulare de fiiere surs
.m, executare de modele Simulink sau ncrcare de variabile salvate anterior n fiiere .mat.
Vizualizare coninut workspace : comanda who / whos.

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


variabil declarat / iniializat n linie de comand va fi recunoscut i n Editor i n
modelele Simulink.

2. Tipuri de fiiere n Matlab :


.m fiiere Matlab ce conin cod surs;
.mat fiiere n care se salveaz date. Sunt create ca urmare a apelului funciei save.
Pentru recuperarea unei variabile salvate anterior ntr-un fiier .mat se apeleaz funcia
load;
.mdl model Simulink.

3. Instruciuni de baz n Matlab

Urmtoarele instruciuni vor fi testate n linie de comand. (Coninutul 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 / iniializare de variabile :

% comentariu
a = 10; % nu se declar tipul variabilei; mediul i atribuie un tip implicit, n funcie de
valoarea de iniializare;
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, iniializate cu valoarea
1;
v_z = zeros(10,1); % declarare vector coloan cu zece elemente, iniializate cu
valoarea 0;
v_z = rand(10,2); % declarare matrice 10x2 cu elemente aleatoare;
v_it = 1:100; % declarare vector linie ce conine toate numerele de la 1 la 100;
v_par = 0:2:100; % declarare vector linie ce conine 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 spaiul de lucru active
whos listeaza n ordine alfabetic toate variabilele din spaiul 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. Funcii matematice : bmin = min(b); bmax = max(b);

3.9. Afiare date n Matlab :


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

3.10. Salvare / recuperare date :


save filename1 var1; % salveaz variabila var1 n fiierul filename1.mat
load filename2 var2; % ncarc variabila var2 din fiierul filename2.mat

!!! Dac nu cunoatei sintaxa unei funcii, tastai help nume_funcie n linia de comand
i vei avea acces la descrierea funciei i a parametrilor afereni.

3.11. Operaii 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; % nmuleste cei doi vectori element cu element;
v5 = rand(4,1);
v6 = v2*v5; % nmulete cei doi vectori dup regula nmulirii matricilor.

Atenie! Numrul de coloane al primului element trebuie s coincid cu numrul 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];
x3 = -5:1:5;
y2 = dirac(x3);
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 !
Matlab-ul, 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 execuie.

4.1. Optimizare de cod :

1. Implementai (ntr-un fiier .m) operaia de nmulire a dou matrici M1(m,n) i


M2(n,p), folosind varianta clasic (cu 3 bucle for). Folosind funcia cputime,
calculai timpul necesar pentru execuia operaiei de nmulire a matricilor.
Sintaxa for : for i=1:n
Instr_1;
Instr_n;
end

2. Implementai acelai cod folosind operaii de nmulire pe vectori (recuperai o linie


i o coloan ntregi i folosii nmulirea pe vectori). Calculai din nou timpul de
execuie i comparai. Considerai matrici de dimensiuni mari pentru a vedea
diferena.
3. Implementai acelai cod folosind nmulirea direct a dou matrici M =
M1*M2 i evaluai timpul de execuie.

M1=rand(300,300);
M2=rand(300,300);
R=zeros(300,300);
R2=zeros(300,300);
R3=zeros(300,300);
t=cputime;
for i=1:300
for j=1:300
for k = 1:300
R(i,j)=M1(i,k)*M2(k,j);
end
end
end
disp('inmultire cu 3 for-uri');
t2=cputime-t
t3=cputime;
for i=1:300
for j=1:300
a=M1(i,:);
b=M2(:,j);
R2(i,j)=a*b;
end
end
disp('inmultire cu vectori');
t4=cputime-t3
t5=cputime;
R3=M1.*M2;
disp('inmultire cu martici');
t6=cputime-t5

4.2. Operaii cu matrici tridimensionale Conversia unei imagini color n niveluri de


gri.

im = imread(football.jpg); % citete imaginea football.jpg;


% Determinai dimensiunea imaginii !
imshow(im); % afieaz imaginea;
img = rgb2gray(im); % conversie imagine color n imagine n niveluri de gri;
imshow(img); % afiare imagine n niveluri de gri;

tiind c relaia de calcul pentru conversia unei imagini color n niveluri de gri este:
0.2989 * R + 0.5870 * G + 0.1140 * B , calculai i afiai imaginea n
niveluri de gri.
Rezultatul ar trebui s fie identic cu cel obinut n urma apelului funciei rgb2gray.

im=imread('atm.jpg');
s=size(im);
x=s(1);
y=s(2);
figure
subplot(1,3,1)
imshow(im);
img=rgb2gray(im);
subplot(1,3,2)
imshow(img);
myimg=zeros(255,255);
for i=1:x
for j=1:y

myimg(i,j)=0.2989*im(i,j,1)+0.5870*im(i,j,2)+0.1140*im(i,j,3);
end
end
subplot(1,3,3)
imshow(uint8(myimg));

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