Sunteți pe pagina 1din 32

Limbaje de programare

inginereti
Tema 5
Matlab

Matlab Elemente de programare


MATLAB lucreaza fie in modul linie de comanda, caz in
care fiecare linie este prelucrata imediat si rezultatele
sunt afisate, fie utilizand programe scrise in fisiere.
Fisierele care contin instructiuni MATLAB se
numesc fisiere M sau M-files, intrucat au extensia .m.
Un fisier M poate fi de doua tipuri, script sau functie.
Ambele tipuri de fisiere sunt scrise in format ASCII,
iar algoritmul implementat poate fi urmarit si
modificat cu usurinta daca se cunosc conventiile si
sintaxa limbajului de programare MATLAB. Aceste
tipuri de fisiere M permit crearea unor noi functii
care le pot completa pe cele existente. Astfel
MATLAB poate fi extins, permitand abordarea
anumitor aplicatii specifice din stiinta si inginerie.

Matlab Elemente de programare


Fisierele script

Fisierele script sunt fisiere externe de tip text care contin


secvente de comenzi MATLAB. Prin apelarea
numelui fisierului, se executa secventele de comenzi
MATLAB continute in fisier. Dupa executia completa
a unui fisier script variabilele cu care acesta a operat
raman in workspace. Aceste fisiere nu permit
integrarea in programe mari, realizate pe principiul
modularizarii. Fisierele script pot fi folosite la
rezolvarea unor probleme care necesita un numar
relativ mare de instructiuni a caror lansare la linia de
comanda ar deveni greoaie

Matlab Elemente de programare


Fisierele functie

In cazul in care prima linie a unui fisier M contine


cuvantul cheie function fisierul respectiv
intra in categoria fisierelor de tip functie. Un
fisier de tip functie difera de un fisier de tip
script prin faptul ca accepta argumente de
intrare. Astfel, la terminarea executiei unei
functii, in memoria calculatorului nu raman
decat variabilele de iesire ale functiei
respective

Matlab Elemente de programare


Forma generala a primei linii a unui fisier functie este:
function [par_iesire1, par_iesire2 ... ] = nume_functie(par_intrare1,
par_intrare2 ... )
unde :
function reprezinta un cuvant cheie obligatoriu care declara ca fisierul este
de tip functie
nume_functie reprezinta numele functiei, adica numele sub care este salvat
fisierul, insa fara extensie. Numele functiei nu poate fi identic cu
cel al unui fisier M pre-existent.
par_iesire1, par_iesire2 reprezinta parametri de iesire care trebuiesc
separati prin virgula si cuprinsi intre paranteze drepte. Daca functia
nu are parametri de iesire parantezele drepte si semnul egal nu mai
au sens.
par_intrare1, par_intrare2 reprezinta parametri de intrare care trebuiesc
separati prin virgula si cuprinsi intre paranteze rotunde. Daca
functia nu are parametri de intrare parantezele rotunde nu mai au
sens

Matlab Elemente de programare


Fisierele functie pot fi adaugate ca functii noi in structura
MATLAB. Instructiunile si comenzile utilizate de
noua functie sunt inregistrate intr-un fisier cu
extensia .m. De pilda fisierul de tip functie avand
numele medie.m calculeaza media aritmetica a
elementelor unui vector si are sintaxa de mai jos:
function m = medie (x)
n = length (x)
m = sum (x)/n
y = [Media numerelor este: num2str(m)];
disp(y)
Aceste instructiuni trebuiesc salvate in fisierul cu numele
medie.m

Matlab Elemente de programare


Fiecare functie MATLAB are alocata o anumita cantitate de
memorie diferita de workspace-ul de baza
MATLAB. Aceasta memorie reprezinta workspace-ul
functiei respective. In cursul rularii MATLAB-ului,
singurele variabile pe care le puteti accesa sunt cele
din workspace-ul curent, fie ca acesta este
workspace-ul de baza sau workspace-ul unei functii.
Variabilele pe care le transmiteti unei functii trebuie
sa apartina workspace-ului curent si functia intoarce
argumente de iesire spre workspace-ul curent. Puteti
totusi sa definiti variabile ca variabile globale,
acestea putand fi accesate din mai multe workspaceuri.

Matlab Elemente de programare


Includerea comentariilor si a help-ului intr-un program
Introducerea unui comentariu intr-un program se realizeaza prin
adaugarea caracterului procent (%) plasat la inceputul liniei.
Daca semnul procent (%) apare pe prima pozitie intr-o linie,
aceasta va fi omisa de compilator, iar daca apare in oricare
alta pozitie intr-o linie de program, partea de program care
urmeaza dupa acest caracter va fi omisa. Intr-un program un
comentariu poate aparea in oricare pozitie insa este
recomandata prezenta unui comentariu dupa prima linie care
declara o functie. In acest caz, comentariul care apare
imediat dupa linia de declarare a functiei, constituie help-ul
fisierului respectiv. Daca se apeleaza : help nume_functie se
afiseaza liniile care incep cu semnul procent si sunt situate
intre prima linie dupa declararea functiei si prima linie libera
sau prima instructiune ce urmeaza acestui grup compact de
linii.

Matlab Elemente de programare


Pentru a atasa un help unui program MATLAB se scriu liniile de program
incepand cu semnul procent (%) si sunt situate intre prima linie
dupa declararea functiei si prima linie libera sau prima
instructiune ce urmeaza acestui grup compact de linii.
Dupa ultima linie a help-ului se lasa o linie libera sau se trece direct la o
instructiune MATLAB, ca in exemplul de mai jos:
Function nume_functie % Aceasta linie lipseste la fisierele script
% Prima linie de help
% A doua linie de help
% ...
% Ultima linie de help
Linie libera (aceasta este obligatorie daca urmeaza un alt comentariu
care nu este de tip help)
Instructiuni MATLAB

Matlab Elemente de programare


Daca un program MATLAB salvat intr-un fisier M care are
structura prezentata mai sus este apelat astfel:
help nume_functie
MATLAB va afisa mesajul:
% Prima linie de help
% A doua linie de help
% ...
% Ultima linie de help

Matlab Elemente de programare


Crearea, editarea si depanarea fisierelor M

Exista mai multe metode de creare, editare si depanare a fisierelor M,


dupa cum urmeaza:
Functie / Metoda
Crearea si editarea fisierelor M Folosind MATLAB Editor
Folosind MATLAB Editor de sine statator fara a lansa MATLAB
Folosind oricare editor de text, cum ar fi Notepad, WordPad, etc.
Depanarea fisierelor M

Folosind instructiunile generale de depanare

Folosind MATLAB Debugger


Folosind MATALB Debugging Functions

Matlab Elemente de programare


In afara functiilor de editare obisnuite, MATLAB Editor prezinta si functii specifice cum ar fi:
Functie Mod de lucru
Transformarea unor linii de cod in comentarii sau a unor comentarii in linii de cod prin
adaugarea sau eliminarea simbolului %
Se selecteaza liniile respective in
MATLAB Editor si apoi fie se selecteaza meniul Text -> Comment/Uncomment fie
se apasa Ctrl+R/Ctrl+T fie se selecteaza Comment/Uncomment din meniul
contextual
Alinierea inteligenta a instructiunilor
Se selecteaza liniile respective in MATLAB
Editor si apoi fie se selecteaza meniul Text -> Smart Indent fie se apasa Ctrl+I fie
se selecteaza Smart Indent din meniul contextual
Identificarea parantezelor si acoladelor
Se pozitioneaza cursorul intre doua paranteze sau
acolade ( ), [ ], { }, si apoi fie se selecteaza meniul Text -> Balance Delimiters, fie
se apasa Ctrl+B. Daca nu exista nici o pereche de paranteze delimitatoare
MATLAB lanseaza un beep sonor.
Indentare Se selecteaza liniile respective in MATLAB Editor si apoi fie se selecteaza meniul
Text -> Decrease Indent/ Increase Indent fie se apasa Ctrl+[/Ctrl+]
Fisierele M pot fi creeate si editate si utilizand editoare exterioare MATLAB-ului, cum ar fi
Notepad, Wordpad etc. Pentru a fi considerate de catre MATLAB drept fisiere M,
fisierele create cu aceste editoare trebuiesc salvate cu extensia .m.

Matlab Elemente de programare


Depanarea fisierelor M folosind MATLAB Debugger. Depanarea sau
Debugging este procesul prin care sunt identificate si rezolvate
problemele din cadrul codului dvs. MATLAB. In principiu
exista doua tipuri de erori:
Erori de sintaxa de pilda, introducerea gresita a unui nume de functie
sau omiterea unei paranteze. Cand lansati un fisier M cu o
eroare de sintaxa, in mod normal MATLAB o va detecta si va
afisa un mesaj de eroare in Command Window descriind
eroarea si numarul liniei in fisierul M. Clicati pe portiunea
subliniata a mesajului de eroare, sau pozitionati cursorul pe
mesajul de eroare si apasati Ctrl+Enter. Fisierul M ce contine
eroarea se deschide in Editor, cu linia eronata afisata in prim
plan.
Erori run-time aceste erori sunt in general de algoritm. Erorile runtime sunt vizibile cand fisierul M produce rezultate neasteptate

Matlab Elemente de programare


Identificarea erorilor de sintaxa nu este de regula dificila daca se tine cont de
mesajele de eroare MATLAB. Erorile run-time sunt insa mai dificil de
identificat deoarece acestea pot apare in interiorul anumitor functii. Iata
cateva sfaturi pentru identificarea si inlaturarea erorilor run-time:
Stergeti simbolurile ; din instructiunile fisierelor M cu pricina. In urma acestei
operatiuni MATLAB va afisa rezultatelor pe ecran pe durata executiei
fisierului M.
Adaugati instructiunii keyboard la fisierul M. Instructiunile keyboard opresc
executia fisierului M la un anumit punct unde acestea apar si va permit
examinarea si modificarea workspace-ul local al functiei. Acest mod
este indicat de un prompt special: K>> Continuarea executiei functiei
se realizeaza tastand return si apasand tasta Return.
Folositi MATLAB Debugger sau functiile debugging. Acestea sunt folositoare
pentru corectarea erorilor run-time deoarece puteti accesa workspaceul functiilor si apoi puteti examina sau schimba valorile pe care le
contin. Puteti defini sau sterge puncte de intrerupere sau breakpoints,
pentru oprirea executiei programului la o anumita locatie (la o anumita
linie de program) in interiorul fisierelor M.

Matlab Operatori
Operatori relationali. Operatorii relationali permit compararea
cantitativa a doua marimi si sunt prezentati in tabelul de mai jos.
Operator

Descriere

<

Mai mic decat

<=

Mai mic sau egal cu

>

Mai mare decat

>=

Mai mare sau egal cu

==

Egal cu

~=

Diferit de

Matlab Instructiuni
Instructiuni de control logic
Exista opt instructiuni de control logic care se folosesc in MATLAB.
Instructiunea if. Instructiunea if impreuna cu else si elseif, executa un
grup de instructiuni in cazul in care este indeplinita o anumita
conditie logica:
if expresie_logica
instructiuni
end
Daca expresie_logica este adevarata (1), MATLAB executa toate
instructiunile cuprinse intre if si end. Ulterior programul
continua executia cu instructiunea situata pe linia imediat dupa
instructiunea end. Daca expresia logica este falsa (0), MATLAB
sare peste toate instructiunile cuprinse intre if si end si continua
executia incepand cu linia plasata imediat dupa instructiunea
end

Matlab Instructiuni
Instructiunea switch. Instructiunea switch, impreuna cu case si
otherwise, executa diferite grupuri de instructiuni in functie de
valoarea anumitor conditii logice:
switch expresie
case valoare1
instructiuni % Executate daca expresie este valoare1
case valoare2
instructiuni % Executate daca expresie este valoare2
...
otherwise
instructiuni % Executate daca expresie nu ia nici o valoare amintita
mai sus
end

Matlab Instructiuni
Instructiunea while. Instructiunea while executa
un grup de instructiuni de un numar indefinit
de ori, avand la baza anumite conditii logice.
Sintaxa instructiunii while este:
while expresie_logica
instructiuni
end
Daca expresie_logica este adevarata sunt executate
instructiunile cuprinse intre while si end.

Matlab Instructiuni
Instructiunea for. Instructiunea for executa un grup de instructiuni de un anumit
numar impus de ori. Sintaxa instructiunii este:
for index = start:increment:end
instructiuni
end
Incrementul implicit este 1. Puteti specifica orice increment, inclusiv unul negativ.
Pentru indici pozitivi, executia se termina cand valoarea indexului
depaseste valoarea end; pentru increment negativ, bucla se incheie cand
indexul devine mai mic decat valoarea end
m=3;
n=5;
for i = 1:m
for j = 1:n
A(i,j) = 1/(i + j - 1)
end
end

Matlab Instructiuni
Instructiunea continue. Instructiunea continue cedeaza controlul
iteratiei urmatoare in cazul unei bucle for sau while, neglijand
orice alta instructiune existenta in corpul buclei, ca in exemplul
de mai jos.
m=3;
n=5;
for i = 1:m
for j = 1:n
if ( i>2) continue
end
A(i, j) = 1/(i + j - 1)
end
end

Matlab Instructiuni
Instructiunea break. Instructiunea break termina executia unei bucle for
sau while.
clc;
clear all;
m=30;
for i = 1:m
A(i) =floor(10*rand(1))
if (A(i) ==0) break
end
end
Instructiunile try...catch si return. Instructiunea try...catch este folosita
in general la detectarea erorilor in cursul executiei, iar
instructiunea return permite intoarcerea la programul sau
functia invocatoare

Matlab Elemente de programare


Comenzi de manipulare a datei si orei
MATLAB contine o multitudine de comenzi de manipulare a datei si
orei. Iata cateva dintre aceste comenzi ce au o utilitate practica
imediata.
Functie Descriere
Clock Data curenta si ora ca vector de tip data
Date
Data curenta ca sir de caractere de tip data
Calendar
Afiseaza calendarul lunii curente
Cputime
Afiseaza CPU time in secunde de cand MATLAB a
fost lansat
Etime Afiseaza timpul scurs in secunde
Tic,toc Afiseaza timpul scurs intre cele doua comenzi

Polinoame n Matlab
Notaia obinuit utilizat la polinoame este una simbolic.
MATLAB utilizeaz n calcule doar un vector ce are ca
elemente
coeficienii monoamelor. Numrul acestor elemente este cu 1
mai mare
dect gradul polinomului.
De exemplu polinomul x5-5x+4, presupune ca matlab s
utilizeze vectorul obinut cu comanda [1 0 0 0 -5 4]
Se observa ca avem coeficient zero pentru termenii lipsa.
Numarul elementelor vectorului este 6, adica 5+1 (5 fiind
gradul polinomului)

Polinoame n Matlab
Notaia obinuit utilizat la polinoame este una simbolic.
MATLAB utilizeaz n calcule doar un vector ce are ca
elemente
coeficienii monoamelor. Numrul acestor elemente este cu 1
mai mare
dect gradul polinomului.
De exemplu polinomul x5-5x+4, presupune ca matlab s
utilizeze vectorul obinut cu comanda [1 0 0 0 -5 4]
Se observa ca avem coeficient zero pentru termenii lipsa.
Numarul elementelor vectorului este 6, adica 5+1 (5 fiind
gradul polinomului)

Functii aplicate vectorilor


coeficientilor polinoamelor
1.

conv, - Inmultirea a doua polinoame,


W=conv(u,v), unde u si v sunt vectorii coeficientilor
polinoamelor care se inmultesc

p=[1 0 4 3 1]
q=[1 3 5]
w=conv(p,q)
w= 1 3
18 5

15

30

Functii aplicate vectorilor


coeficientilor polinoamelor
2.

deconv, este functia prin care are loc


impartirea a doua polinoame
[c,r]=deconv(p,q)
Unde c este vectorul coeficientilor catului, iar r este
vectorul coeficientilor restului
Pentru exemlu anterior
[c,r]=deconv(p,q)
c=
1 -3 8, adica catul este x2-3x+8
r=
0 0 0 -6 -39, iar restul este x-39

Functii aplicate vectorilor


coeficientilor polinoamelor
3.

roots functia care permite determinarea radacinilor unui


polinom
De exemplu
roots(p)
ans =
0.3679 + 2.0430i
0.3679 - 2.0430i
-0.3679 + 0.3110i
-0.3679 - 0.3110i
roots(q)
ans =
-1.5000 + 1.6583i
-1.5000 - 1.6583i

Functii aplicate vectorilor


coeficientilor polinoamelor
4.

poly(q), functia care gaseste un polinom ale


carui radacini sunt elementele unui vector q.
De exemplu pentru polinomul anterior q, avem
poly(q)
ans =
1 -9 23 -15
Deci polinomul gasit este x3-9x2+23x-15

Functii aplicate vectorilor


coeficientilor polinoamelor
5. polyval(p, x0), este functia care afiseaza valoarea
polinomului p intr-un punct x0.
De exemplu pentru polinomul q, in 2, putem scrie
polyval(q,2)
ans =
15

Functii aplicate vectorilor


coeficientilor polinoamelor
6.

polyder(p),
este functia care calculeaza
derivata unui polinom, rezultatul fiind un
vector cu voeficientii polinomului derivat
De exemplu pentru polinomul p definit anterior
polyder(p)
ans =
4 0 8 3
Adica polinomul 4x3+8x+3

Functii aplicate vectorilor


coeficientilor polinoamelor
7. polyfit(x,y,n) este polinomul de un anumit grad care
aproximeaza un set de date experimentale in sensul
metoei celei mai mici patrate.
Rezultatul este vectorul coeficientilor polinomului
cautat, vectorii x si y fiind vectorii datelor
experimentale, iar n este gradul polinomului cautat.
Exemplu x=0:pi/10:pi;
y=sqrt(x);
polyfit(x,y,4)
ans =
-0.0611 0.4699 -1.3008 1.8971 0.0229
Adica polinomul
-0.0611x4+0.4699x3-1.3008x2+1.8971x+0.0229

Functii aplicate vectorilor


coeficientilor polinoamelor
8. interp1(x,y,x0,metoda) este functia care permite aflarea
valorii care interpoleza setul de date experimentale x,y intrun punct stabilit x0. metoda este :nearest, linear, spline si
cubic. Ultimile doua luand mai mult timp de calcul dar
fiind mai precise.
De exemplu pentru setul de date x, si y definite anterior, in punctul
1.1, se obtin rezultatele
interp1(x,y,1.1,'nearest')
ans = 1.1210
>> interp1(x,y,1.1,'linear')
ans = 1.0461
>> interp1(x,y,1.1,'spline')
ans = 1.0495
>> interp1(x,y,1.1,'cubic')
ans = 1.0489 este valoarea cea mai exacta