Sunteți pe pagina 1din 77

Curs 1.

Instruciuni de control al ciclurilor


Cu ajutorul instruciunilor de control al ciclurilor se poate executa n mod repetat un bloc de comenzi,
revenind la nceputul blocului, n funcie de o anumit condiie. Pentru a executa blocul de comenzi de
un numr specificat de ori, se folosete instruciunea for. Pentru a executa repetitiv anumite instruciuni
ct timp o condiie continu s fie adevrat sau fals, se folosete comanda while. Instruciunile
continue i break ofer un control suplimentar asupra ciclurilor. Instruciunea return permite ncheierea
execuiei programului.
1.1 Instruciunea for-end
Instruciunea for este folosit pentru executarea unui grup de instruciuni de un numr predeterminat
de ori. Corespunde structurii iterative din programarea structurat.
Sintax:
for index = start:increment:sfrit
instruciuni
end

Descriere:
n momentul execuiei instruciunii for, valoarea index parcurge intervalul [start, sfrit], cu pasul
de parcurgere stabilit prin increment. Pentru fiecare valoare a lui index, se execut n mod repetat
una sau mai multe instruciuni.
Incrementul implicit este 1. n acest caz el nu mai trebuie specificat. Incrementul poate lua i valori
negative, caz n care valoarea index descrete.
Exemple:
1. S se construiasc irul x, coninnd primele n puteri ale lui 2. Valoarea n se va citi de la tastatur.
% Script pentru calculul puterilor lui 2
n = input('Introduceti numarul de elemente: ');
x = []; % sau clear x
x(1)=1;
for m = 2:n
x(m) = 2 * x(m - 1);
end
display(x)

Pentru n = 10, se obin urmtoarele rezultate:


Introduceti numarul de elemente: 10
x =
1 2 4 8 16 32 64 128 256 512

2. Se citete de la tastatur o matrice ptrat A. Se cere s se determine suma elementelor de deasupra


diagonalei secundare.
% suma elementelor de deasupra diagonalei secundare
%% initializare
A = [];
suma = 0;
%% citire matrice
disp('Introduceti matricea A:')
A = input('');
%% verificari
[row col] = size(A);
if row~=col
disp('Matricea nu este patrata!')
return
end Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 1. Instruciuni de control al ciclurilor

11 | P a g e

%% calcul suma
for m = 1:row-1
for n=1:row-m
suma = suma + A(m, n);
end
end
%% afisare
disp(['Suma este: ', num2str(suma)])

Cazul 1
Introduceti matricea A:
[1 2 3 4;
5 6 7 8;
9 0 -1 -2;
-3 -4 -5 -6]
Suma este: 26

Cazul 2
Introduceti matricea A:
[1 2 3;
4 5 6]
Matricea nu este patrata!

Sf C1, 25/02/15.
1.2 Instruciunea while-end
Instruciunea while corespunde structurii repetitive condiionate anterior, din programarea structurat.
Sintax:
while expresie
instruciuni
end

Descriere:
Instruciunea while este folosit pentru executarea unui grup de instruciuni n mod repetat, ct timp
expresia de control este adevrat.
Dac expresie este evaluat la o matrice (nu este un scalar), atunci toate elementele acesteia trebuie
s aib valoarea logic adevrat, pentru ca execuia s continue.
Exemple:
1. S se determine primul numr ntreg n pentru care n! este un numr cu 50 de cifre. Se va folosi
funcia factorial().
% primul numar intreg n pentru care n! este un numar cu 50 de cifre
n = 1;
while factorial(n) < 1e49 % 10^49 are 50 de cifre
n = n + 1;
end
disp(['Numarul este: ', num2str(n)])
disp(['n! = ', num2str(factorial(n))])

n urma rulrii, rezult:


Numarul este: 41
n! = 33452526613163803000000000000000000000000000000000

1.3 Instruciunea break


Instruciunea break ntrerupe execuia unui ciclu for sau while. Conf.dr.ing. Ovidiu-Aurelian Detean Programare
si limbaje II Curs 1. Instruciuni de control al ciclurilor

12 | P a g e

Sintax:
break

Descriere:
Instruciunile care apar dup instruciunea break, din corpul unui ciclu for sau while, vor fi ignorate.
Urmtoarea instruciune care se execut este cea care urmeaz dup instruciunea end, de nchidere a
ciclului.
Exemple:
1. S se citeasc de la tastatur un ir de maxim 30 de caractere care s nu conin caracterul punct (.).
Citirea se va ncheia dac se introduce caracterul punct.
% citire sir max 30 caractere, fara punct
str = [];
disp('Introduceti sirul de caractere.')
disp('Tastati enter dupa fiecare caracter introdus:')
n = 1;
while n <= 30
str(n) = input('','s');
if str(n) == '.'
break
end
n = n + 1;
end
disp(['Sirul introdus este: ', char(str)])

n urma rulrii, rezult:


Introduceti sirul de caractere:
a
e
r
t
y
u
1
@
#
$
.
Sirul introdus este: aertyu1@#$.

1.4 Instruciunea continue


Instruciunea continue transfer controlul urmtoarei iteraii a unui ciclu for sau while.
Sintax:
continue

Descriere:
Instruciunile care rmn n corpul unui ciclu, dup instruciunea continue, vor fi ignorate. Execuia se
reia de la nceputul ciclului unde a fost ntlnit instruciunea continue.
Exemple:
1. S se citeasc de la tastatur un ir de 10 de caractere. n cazul n care se citete caracterul punct (.),
acesta se va ignora.
% citire sir 10 caractere, fara punct
str = [];
disp('Introduceti sirul de caractere.')
disp('Tastati enter dupa fiecare caracter introdus:') Conf.dr.ing. Ovidiu-Aurelian Detean
Programare si limbaje II Curs 1. Instruciuni de control al ciclurilor

13 | P a g e

n = 1;
while n <= 10
str(n) = input('','s');
if str(n) == '.'
continue
end
n = n + 1;
end
disp(['Sirul introdus este: ', char(str), ' si are ',num2str(n-1), '
caractere.'])

n urma rulrii, rezult:


Introduceti sirul de caractere.
Tastati enter dupa fiecare caracter introdus:
1
2
w
s
.
f
g
.
;
g
f
d
Sirul introdus este: 12wsfg;gfd si are 10 caractere.

1.5 Instruciunea return


Sintax:
return

Descriere:
Instruciunea return, de control al terminrii programului, permite ieirea din program din orice punct al
su, nainte de punctul normal de terminare.
return mai este folosit i pentru a incheia modul keyboard.

1|Page
Programare si limbaje II
Anul I, AR+ITT
1 Recapitulare
Curs 1 + Laborator 3
1.1 Comenzi
if
else
elseif
end
switch
case
otherwise
for

while
break
continue
return
keyboard
1.2 Funcii
isprime()
isscalar()
num2str()
str2num()
factorial()

Curs 2. Funcii definite de utilizator


2.1 Definirea unei funcii MATLAB. Comanda function
Funciile sunt rutine de program care accept argumente de intrare i returneaz argumente de ieire.
Funciile pot fi implementate n fiiere M de tip funcie, adic n fiiere text cu extensia .m i care ncep
cu o linie care conine cuvntul cheie function. Prima linie dintr-un fiier M de tip funcie, cu excepia
comentariilor, poart numele de linie de definire a funciei.
Sintax:
function [out1, out2, ...] = nume_functie(in1, in2, ...)

Descriere:
Instruciunea function definete funcia nume_functie, care accept valorile de intrare in1, in2,
... i returneaz valorile de ieire out1, out2, ... .
2.1.1 Reguli de denumire a unei funcii
1. Numele funciei trebuie obligatoriu s nceap cu o liter i poate conine caractere alfanumerice i
caracterul underscore (_). Numrul maxim de caractere din numele unei funcii trebuie s fie mai mic
sau egal cu dimensiunea maxim permis de ctre implementarea specific MATLAB.
Pentru verificarea dimensiunii maxime, se folosete comanda namelengthmax.
De exemplu, versiunea R2009b permite definirea de funcii cu nume de maxim 63 caractere.
>> version Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 2. Funcii definite de utilizator

2|Page

ans =
7.9.0.529 (R2009b)
>> namelengthmax
ans =
63

n cazul n care numrul de caractere este mai mare, MATLAB va folosi doar primele 63 de caractere (n
acest caz) pentru identificarea funciei respective.
Deoarece numele de funcii respect aceleai reguli ca i numele de variabile, se poate folosi funcia
isvarname() pentru verificarea valabilitii numelui de funcie ales. Rezultatul este de tip boolean.
Exemple de nume valide sau invalide de funcii:
>> isvarname ipotenuza
ans =
1
>> isvarname Inf
ans =
1
>> isvarname _functie
ans =
0
>> isvarname NumeFoaaaarteLuuungDeFunctie
ans =
1
>> islogical(ans)
ans =
1

2. Numele unei funcii nu poate fi acelai cu al unui cuvnt cheie MATLAB. Verificarea unui cuvnt cheie
MATLAB se face cu ajutorul comenzii iskeyword.
>> iskeyword
ans =
'break'
'case'
'catch'
'classdef'
'continue'
'else'
'elseif'
'end'
'for'
'function'
'global'
'if'
'otherwise'
'parfor'
'persistent'
'return'
'spmd'
'switch'
'try'
'while'

3. Numele funciei definite ntr-un fiier M de tip funcie trebuie s coincid cu numele fiierului, cu
excepia extensiei .m. n cazul n care numele funciei i numele fiierului nu coincid, numele intern al
funciei va fi ignorat. De exemplu, funcia tg() definit ntr-un fiier cu numele tangenta.m, va fi apelat
prin expresia tangenta.
O funcie nu se poate defini ntr-un fiier script sau n fereastra de comenzi.

2.1.2 Argumentele unei funcii


Dac o funcie are mai multe argumente de ieire, acestea se vor include ntre paranteze ptrate,
separate prin virgul: Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 2. Funcii definite de utilizator
3|Page

function [perimetru, arie] = cerc(raza)

Dac o funcie are mai multe argumente de intrare, acestea se vor include ntre paranteze rotunde,
dup numele funciei, separate prin virgul:
function aria = dreptunghi(lungime, latime)

Dac o funcie nu are nici un argument de ieire, ieirea se va lsa vid:


function afisare(text)

sau se vor folosi paranteze ptrate vide:


function [] = afisare(text)

Parametrii transmii funciei (parametrii actuali) nu este obligatoriu s coincid ca nume cu cei linia de
definire a funciei (parametrii formali), dar trebuie s coincid ca i numr, tip i ordine.
2.1.3 Sfritul unei funcii
O funcie se poate ncheia fie la intlnirea instruciunii end, fie la ntlnirea unei alte linii de definire a
unei funcii, fie la sfritul fiierului M n care este definit. Utilizarea instruciunii end la final este
obligatorie doar dac funcia definit conine una sau mai multe funcii imbricate.
2.2 Spaiul variabilelor unei funcii
Fiecare funcie definit ntr-un fiier M are alocat o zon de memorie, diferit de spaiul global al
variabilelor (Workspace), n care ea funcioneaz. Aceast zon se numete spaiul variabilelor funciei
(Function Workspace) i reprezint contextul propriu de lucru al funciei date.
2.3 Exemplu de definire a unei funcii
ipotenuza.m
function c = ipotenuza( a, b )
%IPOTENUZA - Calculeaza ipotenuza unui triunghi dreptunghic, pe baza
%catetelor sale
% Sintaxa: c = ipotenuza( a, b )
c = sqrt(a^2 + b^2);
end

Informaii de tip help:


>> help ipotenuza
IPOTENUZA - Calculeaza ipotenuza unui triunghi dreptunghic, pe baza
catetelor sale
Sintaxa: c = ipotenuza( a, b )
>> doc ipotenuza

Apelul funciei:
>> ipotenuza(2,3)
ans =
3.6056
>> ipotenuza(3,4)
ans =
5

2.4 Tipuri de funcii


n mediul MATLAB pot fi definite urmtoarele tipuri de funcii: Conf.dr.ing. Ovidiu-Aurelian Detean Programare
si limbaje II Curs 2. Funcii definite de utilizator

4|Page

2.4.1 Funcii primare


Funcia primar reprezint prima funcie definit ntr-un fiier M de tip funcie. Dup funcia primar, n
fiierele M pot exista mai multe funcii secundare, folosite ca i subrutine ale funciei principale.
De obicei, funcia primar este singura funcie definit ntr-un fiier M de tip funcie.
2.4.2 Funcii secundare (subfunctions)
Funciile secundare sunt definite ntr-un fiier M de tip funcie, ca i funcii adiionale funciei primare,
acestea fiind vizibile doar din funcia primar sau din alte funcii secundare definite n acelai fiier.
Exemplu:
dreptunghi.m
function [ p a ] = dreptunghi( lungime, latime )
%DREPTUNGHI( lungime, latime )
% calculeaza perimetrul si aria unui dreptunghi
p = perimetru( lungime, latime );
a = arie( lungime, latime );
end
function per = perimetru( lungime, latime)
%PERIMETRU( lungime, latime )
% calculeaza perimetrul unui dreptunghi
per = 2 * (lungime + latime);
end
function ari = arie( lungime, latime)
%ARIE( lungime, latime )
% calculeaza aria unui dreptunghi
ari = lungime * latime;
end

Informaii de tip help:


>> help dreptunghi
DREPTUNGHI( lungime, latime )
calculeaza perimetrul si aria unui dreptunghi
>> help dreptunghi>perimetru
PERIMETRU( lungime, latime )
calculeaza perimetrul unui dreptunghi
>> help dreptunghi>arie
ARIE( lungime, latime )
calculeaza aria unui dreptunghi

Apelul funciei dreptunghi():


>> [p a]= dreptunghi(1,2)
p =
6
a =
2

2.4.3 Funcii imbricate (Nested Functions)


Funciile imbricate sunt funcii definite n interiorul corpului altor funcii. Se pot defini funcii imbricate
pe mai multe nivele, dar nu pot fi definite n interiorul unei instruciuni de control al programului (if,
else, elseif, switch, for, while, try sau catch).
cerc.m
function [ p a ] = cerc( raza )
%CERC( raza )
% calculeaza perimetrul si aria unui cerc
p = perimetru( raza );
a = arie( raza );
function per = perimetru( raza ) Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 2.
Funcii definite de utilizator

5|Page

%PERIMETRU( raza )
% calculeaza perimetrul unui cerc
per = 2 * pi * raza;
end
function ari = arie( raza )
%ARIE( raza )
% calculeaza aria unui cerc
ari = pi * raza^2;
end
end

Informaii de tip help:


>> help cerc
CERC( raza )
calculeaza perimetrul si aria unui cerc
>> help cerc>perimetru
PERIMETRU( raza )
calculeaza perimetrul unui cerc
>> help cerc>arie
ARIE( raza )
calculeaza aria unui cerc

Apelul funciei cerc():


>> [p a] = cerc(3)
p =
18.8496
a =
28.2743

2.4.4 Funcii anonime


Pentru definirea lor se folosesc manipulatoarele de funcie (function handles):
h = @(lista_arg) expr

Exemplu:
>> patrat = @(x) x^2
patrat =
@(x)x^2

creeaz o funcie anonim care calculeaz ptratul valorii primite ca i parametru:


>> patrat(5)
ans =
25

2.4.5 Funcii suprancrcate (Overloaded Functions)


Funciile suprancrcate sunt utile atunci cnd dorim s crem funcii care rspund diferit la date de
intrare diferite. Utilizarea funciilor suprancrcate necesit cunotine de programare orientat
obiectual.
Pentru a verifica toate definiiile unei funcii suprancrcate, se folosete comanda which cu opiunea all. De exemplu, la executarea instruciunii help pentru funcia disp, se obine urmtorul rezultat:
>> help disp
DISP Display array.
DISP(X) displays the array, without printing the array name. In
all other ways it's the same as leaving the semicolon off an
expression except that empty arrays don't display.
If X is a string, the text is displayed.
See also int2str, num2str, sprintf, rats, format. Conf.dr.ing. Ovidiu-Aurelian Detean Programare si
limbaje II Curs 2. Funcii definite de utilizator

6|Page

Overloaded methods:
opaque/disp
MException/disp
inline/disp
cdfepoch/disp
timer/disp
serial/disp
memmapfile/disp
ftp/disp
mmreader/disp
audiorecorder/disp
audioplayer/disp
ccsstructure/disp
ccsstring/disp
ccsrtdx/disp
ccspointer/disp
ccsnumeric/disp
ccsfunction/disp
ccsenum/disp
ccsdebug/disp
ccsbitfield/disp
seqgen.disp
modem.disp
fittype/disp
cfit/disp
digitalio/disp
daqchild/disp
analogoutput/disp
analoginput/disp
distribution2d/disp
distribution1d/disp
distributed/disp
codistributor2d/disp
codistributor1d/disp
codistributed/disp
quantizer/disp
qfft/disp
strel/disp
imagemodel/disp
imaqdevice/disp
imaqchild/disp
iviconfigurationstore/disp
instrument/disp
icgroup/disp
xregpointer/disp
ghsmulti/disp
network/disp
opcda/disp
daitem/disp
dagroup/disp
piecewisedistribution/disp
gmdistribution/disp
classregtree/disp
dataset/disp
categorical/disp
sym/disp
vdspdebug/disp
vrworld/disp
vrnode/disp
vrfigure/disp
wptree/disp
wdectree/disp
ntree/disp

laurpoly/disp
laurmat/disp
dtree/disp
Reference page in Help browser
doc disp

Se observ c dup afiarea informaiilor help despre funcia de baz, apare lista Overloaded methods,
n care sunt afiate toate funciile suprancrcate, avnd acelai nume, disp, denumite n programarea
obiectual, metode.
Pentru a verifica toate apariiile funciei suprancrcate disp(), se folosete comanda: Conf.dr.ing. OvidiuAurelian Detean Programare si limbaje II Curs 2. Funcii definite de utilizator

7|Page

>> which -all disp


built-in (C:\Program Files\MATLAB\R2008b\toolbox\matlab\lang\disp)
C:\Program Files\MATLAB\R2008b\toolbox\matlab\lang\@opaque\disp.m % opaque method
disp is a built-in method % MException method
disp is a built-in method % hgsetget method
disp is a built-in method % gbtmcos.figure method
disp is a built-in method % handle method
disp is a built-in method % function_handle_workspace method
disp is a built-in method % gbtmcos.uitoolbar method
disp is a built-in method % gbtmcos.uipushtool method
disp is a built-in method % gbtmcos.uitoggletool method
disp is a built-in method % gbtmcos.uitogglesplittool method
disp is a built-in method % gbtmcos.uimenu method
disp is a built-in method % meta.class method
disp is a built-in method % helpUtils.helpProcess method
C:\Program Files\MATLAB\R2008b\toolbox\matlab\lang\@MException\disp.m % MException
method
C:\Program Files\MATLAB\R2008b\toolbox\matlab\funfun\@inline\disp.m % inline method
C:\Program Files\MATLAB\R2008b\toolbox\matlab\imagesci\@cdfepoch\disp.m % cdfepoch
method
C:\Program Files\MATLAB\R2008b\toolbox\matlab\iofun\@timer\disp.m % timer method
C:\Program Files\MATLAB\R2008b\toolbox\matlab\iofun\@serial\disp.m % serial method
C:\Program Files\MATLAB\R2008b\toolbox\matlab\iofun\@memmapfile\disp.m % memmapfile
method
C:\Program Files\MATLAB\R2008b\toolbox\matlab\iofun\@ftp\disp.m % ftp method
C:\Program Files\MATLAB\R2008b\toolbox\matlab\audiovideo\@mmreader\disp.m % mmreader
method
C:\Program Files\MATLAB\R2008b\toolbox\matlab\audiovideo\@audiorecorder\disp.m %
audiorecorder method
C:\Program Files\MATLAB\R2008b\toolbox\matlab\audiovideo\@audioplayer\disp.m %
audioplayer method
C:\Program Files\MATLAB\R2008b\toolbox\ccslink\ccslink\@ccsstructure\disp.m %
ccsstructure method
C:\Program Files\MATLAB\R2008b\toolbox\ccslink\ccslink\@ccsstring\disp.m % ccsstring
method
C:\Program Files\MATLAB\R2008b\toolbox\ccslink\ccslink\@ccsrtdx\disp.m % ccsrtdx
method
C:\Program Files\MATLAB\R2008b\toolbox\ccslink\ccslink\@ccspointer\disp.m % ccspointer
method
C:\Program Files\MATLAB\R2008b\toolbox\ccslink\ccslink\@ccsnumeric\disp.m % ccsnumeric
method
C:\Program Files\MATLAB\R2008b\toolbox\ccslink\ccslink\@ccsfunction\disp.m %
ccsfunction method
C:\Program Files\MATLAB\R2008b\toolbox\ccslink\ccslink\@ccsenum\disp.m % ccsenum
method
C:\Program Files\MATLAB\R2008b\toolbox\ccslink\ccslink\@ccsdebug\disp.m % ccsdebug
method
C:\Program Files\MATLAB\R2008b\toolbox\ccslink\ccslink\@ccsbitfield\disp.m %
ccsbitfield method
C:\Program Files\MATLAB\R2008b\toolbox\comm\comm\@seqgen\disp.m % seqgen method
C:\Program Files\MATLAB\R2008b\toolbox\comm\comm\@modem\disp.m % modem method
C:\Program Files\MATLAB\R2008b\toolbox\curvefit\curvefit\@fittype\disp.m % fittype
method
C:\Program Files\MATLAB\R2008b\toolbox\curvefit\curvefit\@cfit\disp.m % cfit method
C:\Program Files\MATLAB\R2008b\toolbox\daq\daq\@digitalio\disp.m % digitalio method
C:\Program Files\MATLAB\R2008b\toolbox\daq\daq\@daqchild\disp.m % daqchild method
C:\Program Files\MATLAB\R2008b\toolbox\daq\daq\@analogoutput\disp.m % analogoutput
method
C:\Program Files\MATLAB\R2008b\toolbox\daq\daq\@analoginput\disp.m % analoginput
method
C:\Program Files\MATLAB\R2008b\toolbox\distcomp\parallel\@distribution2d\disp.m %
distribution2d method

C:\Program Files\MATLAB\R2008b\toolbox\distcomp\parallel\@distribution1d\disp.m %
distribution1d method
C:\Program Files\MATLAB\R2008b\toolbox\distcomp\parallel\@distributed\disp.m %
distributed method
C:\Program Files\MATLAB\R2008b\toolbox\distcomp\parallel\@codistributor2d\disp.m %
codistributor2d method
C:\Program Files\MATLAB\R2008b\toolbox\distcomp\parallel\@codistributor1d\disp.m %
codistributor1d method
C:\Program Files\MATLAB\R2008b\toolbox\distcomp\parallel\@codistributed\disp.m %
codistributed method Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 2. Funcii definite de
utilizator

8|Page

C:\Program Files\MATLAB\R2008b\toolbox\filterdesign\quantization\@quantizer\disp.m %
quantizer method
C:\Program Files\MATLAB\R2008b\toolbox\filterdesign\quantization\@qfft\disp.m % qfft
method
C:\Program Files\MATLAB\R2008b\toolbox\images\images\@strel\disp.m % strel method
C:\Program Files\MATLAB\R2008b\toolbox\images\imuitools\@imagemodel\disp.m %
imagemodel method
C:\Program Files\MATLAB\R2008b\toolbox\imaq\imaq\@imaqdevice\disp.m % imaqdevice
method
C:\Program Files\MATLAB\R2008b\toolbox\imaq\imaq\@imaqchild\disp.m % imaqchild method
C:\Program
Files\MATLAB\R2008b\toolbox\instrument\instrument\@iviconfigurationstore\disp.m %
iviconfigurationstore method
C:\Program Files\MATLAB\R2008b\toolbox\instrument\instrument\@instrument\disp.m %
instrument method
C:\Program Files\MATLAB\R2008b\toolbox\instrument\instrument\@icgroup\disp.m % icgroup
method
C:\Program Files\MATLAB\R2008b\toolbox\mbc\mbc\@xregpointer\disp.m % xregpointer
method
C:\Program Files\MATLAB\R2008b\toolbox\multilink\multilink\@ghsmulti\disp.m % ghsmulti
method
C:\Program Files\MATLAB\R2008b\toolbox\nnet\nnet\@network\disp.m % network method
C:\Program Files\MATLAB\R2008b\toolbox\opc\opc\@opcda\disp.m % opcda method
C:\Program Files\MATLAB\R2008b\toolbox\opc\opc\@daitem\disp.m % daitem method
C:\Program Files\MATLAB\R2008b\toolbox\opc\opc\@dagroup\disp.m % dagroup method
C:\Program Files\MATLAB\R2008b\toolbox\stats\@piecewisedistribution\disp.m %
piecewisedistribution method
C:\Program Files\MATLAB\R2008b\toolbox\stats\@gmdistribution\disp.m % gmdistribution
method
C:\Program Files\MATLAB\R2008b\toolbox\stats\@classregtree\disp.m % classregtree
method
C:\Program Files\MATLAB\R2008b\toolbox\shared\statslib\@dataset\disp.m % dataset
method
C:\Program Files\MATLAB\R2008b\toolbox\shared\statslib\@categorical\disp.m %
categorical method
C:\Program Files\MATLAB\R2008b\toolbox\symbolic\@sym\disp.m % sym method
C:\Program Files\MATLAB\R2008b\toolbox\vdsplink\vdsplink\@vdspdebug\disp.m % vdspdebug
method
C:\Program Files\MATLAB\R2008b\toolbox\vr\vr\@vrworld\disp.m % vrworld method
C:\Program Files\MATLAB\R2008b\toolbox\vr\vr\@vrnode\disp.m % vrnode method
C:\Program Files\MATLAB\R2008b\toolbox\vr\vr\@vrfigure\disp.m % vrfigure method
C:\Program Files\MATLAB\R2008b\toolbox\wavelet\wavelet\@wptree\disp.m % wptree method
C:\Program Files\MATLAB\R2008b\toolbox\wavelet\wavelet\@wdectree\disp.m % wdectree
method
C:\Program Files\MATLAB\R2008b\toolbox\wavelet\wavelet\@ntree\disp.m % ntree method
C:\Program Files\MATLAB\R2008b\toolbox\wavelet\wavelet\@laurpoly\disp.m % laurpoly
method
C:\Program Files\MATLAB\R2008b\toolbox\wavelet\wavelet\@laurmat\disp.m % laurmat
method
C:\Program Files\MATLAB\R2008b\toolbox\wavelet\wavelet\@dtree\disp.m % dtree method
Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 2. Funcii definite de utilizator

9|Page

2.4.6 Funcii private


Funciile private sunt funcii definite n subdirectoare cu numele special private. Ele sunt vizibile doar din
cadrul funciilor i fiierelor script care ndeplinesc urmtoarele condiii:
1. O funcie care apeleaz o funcie privat trebuie s fie definit ntr-un fiier M situat ntr-un director
imediat deasupra subdirectorului private.
2. Un script care apeleaz o funcie privat trebuie s fie apelat dintr-un fiier M de tip funcie care are
acces la funcia privat, conform regulii anterioare.
De exemplu, presupunnd c directorul cerc_dir se afl n calea de cutare MATLAB, un subdirector din
cerc_dir, avnd numele private, poate conine funcii care pot fi apelate doar din funciile definite n
cerc_dir.
Se definiete funcia cerc() n directorul cerc_dir.
function [per, ari] = cerc( raza )
%CERC( raza )
% Calculeaza perimetrul si aria unui cerc
per = perimetru(raza);
ari = arie(raza);
end

Se definesc funciile perimetru() i arie() n directorul private din directorul cerc_dir.


function per = perimetru( raza )
%PERIMETRU( raza )
% Calculeaza perimetrul unui cerc
per = 2*pi*raza;
end
function ari = arie( raza )
%ARIE( raza )
% Calculeaza aria unui cerc
ari = pi*raza^2;
end

La apelul funciei cerc(), aceasta apeleaz, la rndul ei, funciile private perimetru() i arie().
>> [p a]=cerc(5)
p =
31.4159
a =
78.5398

Obinerea informaiilor help despre cele trei funcii se face astfel:


>> help cerc
CERC( raza )
Calculeaza perimetrul si aria unui cerc
>> help private/perimetru
PERIMETRU( raza )
Calculeaza perimetrul unui cerc
>> help private/arie
ARIE( raza )

Calculeaza aria unui cerc

Pentru afiarea informaiilor de tip help despre funciile private, numele acestora se prefixeaz cu
expresia private/.

1|Page
Programare si limbaje II
Anul I, AR+ITT
1 Recapitulare

Curs 2 + Laborator 3 + Laborator 4


1.1 Comenzi
function
namelengthmax
version
iskeyword

1.2 Funcii
isvarname()

Curs 3. Funcii predefinite MATLAB. Calculul simbolic n MATLAB


3.1 Funcii matematice predefinite
3.1.1 Funcii trigonometrice
acos Arc cosinus; rezultat n radiani
acosd Arc cosinus; rezultat n grade
acosh Arc cosinus hiperbolic
acot Arc cotangent; rezultat n radiani
acotd Arc cotangent; rezultat n grade
acoth Arc cotangent hiperbolic
asin Arc sinus; rezultat n radiani
asind Arc sinus; rezultat n grade
asinh Arc sinus hiperbolic
atan Arc tangent; rezultat n radiani
atan2 Arc tangent 2 (cu reprezentare n 4 cadrane)
atand Arc tangent; rezultat n grade
atanh Arc tangent hiperbolic
cos Cosinus cu argument n radiani
cosd Cosinus cu argument n grade
cosh Cosinus hiperbolic
cot Cotangent cu argument n radiani
cotd Cotangent cu argument n grade
coth Cotangent hiperbolic
hypot Rdcin ptrat din suma ptratelor
sin Sinus cu argument n radiani
sind Sinus cu argument n grade
sinh Sinus hiperbolic cu argument n radiani
tan Tangent cu argument n radiani
tand Tangent cu argument n grade
tanh Tangent hiperbolic.
3.1.2 Funcii exponeniale
exp Exponenial
expm1 Calculeaz exp(x)-1 cu precizie mare, pentru valori mici ale lui x
log Logaritm natural
log10 Logaritm n baza 10
log1p Calculeaz log(1+x) cu precizie mare, pentru valori mici ale lui x
nextpow2 Urmtoarea putere mare a lui 2 Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 3.
Funcii predefinite n MATLAB. Calculul simbolic n MATLAB

2|Page

nthroot Rdcin real de ordinul n din numere reale


reallog Logaritm natural pentru tablouri de numere reale nenegative
realsqrt Rdcin ptrat pentru tablouri de numere reale nenegative
sqrt Rdcin ptrat.
3.2 Calculul simbolic n MATLAB
Spre deosebire de calculul numeric, unde att datele de intrare, ct i rezultatele reprezint valori
numerice, de obicei numere reale, calculul simbolic opereaz cu obiecte simbolice, datele de intrare
fiind date simbolice i, uneori, numerice, iar datele de ieire expresii algebrice. Avantajul utilizrii
calculului simbolic n ingineria mecanic este acela c genereaz direct ecuaiile modelului matematic al
mecanismului, dispozitivului sau fenomenului studiat, sub form simbolic. Datele simbolice din aceste
ecuaii pot fi prelucrate n continuare prin substituie numeric, utiliznd valori concrete, caracteristice
att structurii mecanice analizate, ct i a parametrilor de funcionare a acestuia, realizndu-se
simularea numeric a mecanismului sau dispozitivului, n condiiile de funcionare impuse.
Dintre programele software care implementeaz calculul simbolic se pot enumera: Maple,
Mathematica, MATLAB, Derive.
Programele realizate n cadrul acestei lucrri conin calcule simbolice ncorporate n mediul numeric al
MATLAB. Aceste programe utilizeaz funcii i comenzi aparinnd modulului Symbolic Math Toolbox din
MATLAB. Acest modul suplimenteaz facilitile numerice i grafice ale mediului MATLAB, adugnd
cteva tipuri diferite de calcule matematice, printre care se menioneaz:
calcul diferenial, integral, limite, sume i serii Taylor;
algebr linear: inverse, determinani, valori proprii, valori singulare, descompunere i forme canonice
ale matricelor simbolice;
metode de simplificare a expresiilor algebrice;
soluii simbolice i numerice ale ecuaiilor algebrice i difereniale;
funcii speciale din matematica aplicat clasic;
evaluarea numeric a funciilor matematice cu orice precizie specificat.
Motorul de calcul care st la baza funciilor simbolice este nucleul sistemului MuPAD, cu care se poate
interaciona prin dou moduri:
1. Prin modulul Symbolic Math Toolbox, care este o colecie de peste 100 de funcii MATLAB care asigur
accesul la nucleul MuPAD, folosind o sintax i un stil specifice limbajului MATLAB.
2. Folosind interfaa grafic MuPAD, pentru realizarea calculelor n limbajul MuPAD.
3.2.1 Obiecte simbolice
Modulul Symbolic Math Toolbox definete un nou tip de dat MATLAB denumit obiect simbolic sau sym.
Din punct de vedere al reprezentrii interne, un obiect simbolic este o structur de date care
memoreaz reprezentarea sub form de ir de caractere a simbolului. Modulul Symbolic Math Toolbox
utilizeaz obiecte simbolice pentru a reprezenta variabile, expresii i matrice simbolice.
3.2.2.1 Funcia sym()
Funcia sym(), specific modulului Symbolic Math Toolbox, creeaz numere, variabile sau obiecte
simbolice.
Sintaxa:
S = sym(A) x = sym('x') x = sym('x','real') k = sym('k','positive') x =
sym('x','clear') S = sym(A,flag)
Forma S = sym(A) construiete un obiect S aparinnd clasei sym, pornind de la valorile lui A. Dac

argumentul de intrare este un ir de caractere, rezultatul va fi o constant sau o variabil simbolic.


Dac argumentul de intrare este un scalar numeric sau o matrice numeric, rezultatul va fi o
reprezentare simbolic a valorilor numerice date. Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II
Curs 3. Funcii predefinite n MATLAB. Calculul simbolic n MATLAB

3|Page

Opiunea 'real' presupune c variabila simbolic este de tip real, adic partea imaginar este zero.
Opiunea 'positive' creeaz o variabil simbolic este de tip real i pozitiv.
Opiunea 'clear' construiete variabile simbolice pur formale, fr proprieti suplimentare. Din
motive de compatibilitate cu versiunile anterioare, opiunea 'unreal' are exact acelai efect.
Parametrul flag Reprezentare
poate lua valorile:
'r', 'd', 'e',
sau 'f' i
convertete o
constant scalar
sau matriceal la
forma simbolic.
Parametrul flag
'r'
Raional
'd'
Zecimal
'e'
Estimare de erori
'f'
Virgul flotant

1|Page
Programare si
limbaje II
Anul I, AR+ITT
1 Recapitulare
Curs 3 +
Laborator 5 +
Laborator 6
1.1 Comenzi
syms

1.2 Funcii
acos()
acosd()
acosh()
acot()
acotd()
acoth()
asin()
asind()
asinh()
atan()
atan2()
atand()
atanh()
cos()
cosd()
cosh()
cot()
cotd()
coth()
hypot()
sin()

sind()
sinh()
tan()
tand()
tanh()
exp()
expm1()
log()
log10()
log1p()
nextpow2()
nthroot()
reallog()
realsqrt()
sqrt()
sym()
subs()
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

2|Page

Recapitular
e parial a
elementelor
de limbaj
MATLAB
1.1 Operatori
Operatori
aritmetici
Operatori
relaionali
Operatori logici
Operatori pe bii
Operatori pe
mulimi
1.2 Comenzi
break
case
continue
demo
diary
doc
echo
edit
else
elseif
end
for
format

function
help
if
iskeyword
keyboard
load
more
namelengthmax
open
otherwise
return
save
switch
syms
type
version
while
whos

1.3 Variabile
ans

1.4 Constante
eps
false
i
Inf
j
NaN
pi
true

1.5 Funcii
acos()
acosd()
acosh()
acot()
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

3|Page
acotd()
acoth()
asin()
asind()
asinh()
atan()
atan2()
atand()
atanh()
cellplot()
char()
cos()
cosd()
cosh()
cot()

cotd()
coth()
cumprod()
cumsum()
det()
diag()
disp()
display()
double()
exp()
expm1()
eye()
factorial()
find()
full()
functions()
geomean()
hypot()
input()
int16()
int32()
int64()
int8()
intmax()
intmin()
inv()
ischar()
isfinite()
isinf()
isnan()
isprime()
isscalar()
issparse()
isvarname()
length()
log()
log10()
log1p()
logical()
magic()
max()
mean()
mean()
min()
nextpow2()
nnz()
nonzeros()
nthroot()
num2str()
ones()
plot()
prod()
rand()
randn()
Conf.dr.ing. OvidiuAurelian Detean
Programare si

limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

4|Page
reallog()
realmax()
realmin()
realsqrt()
repmat()
round()
sin()
sind()
single()
sinh()
size()
sort()
sparse()
speye()
spones()
sprintf()
spy()
sqrt()
sscanf()
str2num()
struct()
subs(S)
sum()
sym()
tan()
tand()
tanh()
title()
tril()
triu()
uint16()
uint32()
uint64()
uint8()
xlabel()
ylabel()
zeros()

1.6 Caractere
speciale
. Punct
zecimal
. Operaii cu
tablouri
( )
Parantezele
rotunde
[ ]
Parantezele
ptrate
, Virgula
; Punct
virgul

: Dou puncte
@numefunctie
{ } Acolade
% Comentariu
%% Celule de
cod
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

5|Page

Curs 4.
Reprezentr
i grafice 2D
i 3D n
MATLAB
4.1
Reprezentri
grafice 2D
Grafice pentru
funciile cu o
singur variabil.
4.1.1
Reprezentarea
funciilor
elementare.
Funcia plot()
Sintax:
plot(Y)
plot(X1,Y1,..
.)
plot(X1,Y1,Li
neSpec,...)
plot(...,'Prop
ertyName',Prop
ertyValue,...
)
plot(axes_han
dle,...) h =
plot(...)
hlines =
plot('v6',...
)
plot(Y)

reprezint grafic
coloanele
tabloului Y n
raport cu indicele
acestora, dac Y

este un tablou de
numere reale.
Dac Y conine
valori complexe,
plot(Y) este
echivalent cu
plot(real(Y),
imag(Y)). n

toate celelalte
cazuri de utilizare
ale lui plot,
componenta
imaginar este
ignorat.
Observaie:
real(Y)

returneaz partea
real a variabilei
complexe Y.
imag(Y)

returneaz partea
imaginar a
variabilei
complexe Y.
plot(X1,Y1,..
.) reprezint

grafic toate liniile


definite prin
perechi (Xn , Yn).
Dac doar una
dintre cele dou
variabile Xn i Yn
este matrice, se
va face
reprezentarea
grafic a
vectorului, n
raport cu liniile
sau coloanele din
matrice, n
funcie potrivirea
dimensional
dintre vector si
matrice (dac
vectorul este
linie, plotarea se
va face n raport
cu liniile din

matrice, iar daca


este coloan, n
raport cu
coloanele din
matrice). Dac Xn
este scalar i Yn
este un vector,
valorile din Yn
vor fi afiate ca i
puncte discrete,
aranjate dup o
direcie vertical,
n dreptul valorii
Xn.
plot(X1,Y1,Li
neSpec,...)

ploteaz toate
liniile definite de
tripletele
Xn,Yn,LineSpe
c, unde
LineSpec este

un specificator de
linie, care
determin tipul
de linie, simbolul
punctelor de pe
grafic i culoarea
liniei trasate.
Tripletele
Xn,Yn,LineSpe
c pot fi

combinate cu
pereche de forma
Xn,Yn, astfel:
plot(X1,Y1,X2
,Y2,LineSpec,
X3,Y3).

4.1.2 Definirea
stilurilor i
culorilor de
linie
4.1.2.1
Specificarea
tipului de linie
n
reprezentrile
2D. Opiunea
LineSpec

Proprietile liniei
utilizate pentru
reprezentrile
grafice pot fi
specificate de
ctre
programator,
astfel nct s
acesta s dein
controlul asupra:
Stilului de
linie;
Grosimii liniei;
Culorii;
Tipului de
marker;
Mrimii
marker-ului;
Culorii
conturului
marker-ului;
Culorii
interiorului
marker-ului.
Stilurile de linie,
tipurile de
markeri i culorile
dorite pot fi
specificate prin
iruri de
caractere, pe
baza
urmtoarelor
tabele:
Tab. 4.1
Specificatori de
stiluri de linie
Specificator
Stil de linie
-

Linie continu
(implicit)
--

Linie ntrerupt
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice

2D i 3D n
MATLAB

6|Page
:

Linie punctat
-.

Linie-punct
Tab. 4.2
Specificatori de
marker
Specificator
Stil de marker
+

Semn plus
O

Cerc
*

Asterisc
.

Punct
(dimensiunea se
schimb doar
dac valoarea
specificat este
mai mare sau
egal cu 5)
X

Cruce oblic
'square' or s

Ptrat
'diamond' or
d

Diamant (romb)
^

Triunghi cu vrful
n sus
V

Triunghi cu vrful
n jos
>

Triunghi cu vrful
la dreapta
<

Triunghi cu vrful
la stnga
'pentagram'
or p

Stea cu cinci
coluri
(pentagram)

'hexagram' or
h

Stea cu ase
coluri
(hexagram)
Tab. 4.3
Specificatori de
culoare
Specificator
Culoare
R

Rou
G

Verde
B

Albastru
C

Cyan (albastru
deschis)
M

Magenta
Y

Galben
K

Negru
W

Alb
Ex1. S se
reprezinte grafic
funcia sin(x), pe
intervalul [0, 2],
cu pasul de
parcurgere /12,
folosind linie
punctat, marker
triunghi cu vrful
n sus, att
markerul, ct i
linia
reprezentndu-se
prin culoarea
verde.
Fiierul script
C04S1.m
a
=
b
=
h
=

= input('a
');
= input('b
');
= input('h
');

x = a:h:b;
y = sin(x);
plot(x, y,
':^g')

n urma rulrii, se
introduc
urmtoarele date:
a=0
b = 2*pi
h = pi/12
i se obine
graficul din figura
4.1.
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

7|Page
Fig. 4.1 Graficul
funciei sin(x),
folosind opiunile
':^g'

Dac se dorete
reprezentarea
grafic a unei
funcii fr linia
ce unete
markerii, stilul de
linie nu trebuie
specificat n
opiunea
LineSpec. De
exemplu, n figura
4.2, se utilizeaz
marker-ul 'd', de
culoare roie, fr
linie.
Fig. 4.2 Graficul
funciei sin(x),
folosind opiunile
'dr'

4.1.2.2
Specificarea
culorii.
Opiunea
ColorSpec
Exist trei moduri
de a specifica o

culoare n
MATLAB:
Tripletul RGB;
Numele scurt;
Numele lung.
Tripletul RGB este
un vector linie cu
trei elemente,
reprezentnd
intensitile, n
domeniul [0, 1],
ale
componentelor R
(Red - Rou), G
(Green - Verde) i
B (Blue - Albastru)
ale culorii.
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

8|Page
n tabelul 4.4 sunt
prezentate
echivalenele
ntre cele trei
moduri de
specificare ale
aa-numitelor
culori fixe (cele
opt culori
predefinite).
Tab. 4.4 Modurile
de specificare ale
culorilor
predefinite
Triplet RGB
Nume scurt
Nume lung
[1 1 0]
y
yellow
[1 0 1]
m
magenta
[0 1 1]
c
cyan

[1 0 0]
r
red
[0 1 0]
g
green
[0 0 1]
b
blue
[1 1 1]
w
white
[0 0 0]
K
black

Modificarea
culorii de fundal a
ferestrei grafice
se obine apelnd
funcia
whitebg(Color
Spec). De

exemplu,
obinerea culorii
albastru pe
fundalul ferestrei
de tip figur (fig.
4.3) se realizeaz
folosind apelul
whitebg('blue')

, a se vedea
fiierul script
C04S2.m.
Deoarece noile
figuri definite
utilizeaz ultima
culoare de fundal
definit, pentru
revenirea la
culoarea
implicit, se va
folosi apelul
whitebg('w').
Fig. 4.3 Graficul
funciei sin(x), pe
fundal albastru
Ex2. S se
reprezinte grafic
funcia sin(x), pe
intervalul [0, 2],

cu pasul de
parcurgere /12,
folosind linie
punctat, marker
triunghi cu vrful
n sus, att
markerul, ct i
linia
reprezentndu-se
prin culoarea
rou. Se va alege
drept culoare de
fundal, albastru.
Fiierul script
C04S2.m
a = input('a =
');
b = input('b =
');
h = input('h =
');
x = a:h:b;
y = sin(x);
whitebg('blue')
plot(x, y,
':^r')
whitebg('w')

Pentru obinerea
culorii roz pe
fundalul zonei
axelor (fig. 4.4),
se folosete
funcia
set(gcf,'Colo
r',[1,0.4,0.6
])
unde gcf

reprezint
manipulatorul
figurii curente.
Forma general a
funciei set() este
urmtoarea:
set(H,'Property
Name',Propert
yValue,...)
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

9|Page
n exemplul de
mai sus,
proprietatea
figurii curente,
care urmeaz s
fie modificat,
poart numele
'Color', iar
valoarea acesteia
va fi specificat
prin tripletul RGB
reprezentat de
vectorul linie [1,
0.4, 0.6].
Fig. 4.4 Graficul
funciei cu
opiunile din fig
4.2, dar cu fundal
roz pe zona
axelor
4.1.2.3
Specificarea
altor
caracteristici
ale liniei i
markerilor
LineWidth
specific
grosimea liniei, n
puncte (1 punct =
1/72 inci).
Grosimea
implicit este de
0.5 puncte.
MarkerEdgeCol
or seteaz

culoarea
conturului
markerului,
pentru markerii
de tip contur
nchis: cerc,
ptrat, romb,
pentagram,
hexagram,
triunghi. Culoarea
se poate specifica

folosind opiunea
ColorSpec.
Opiunea none
determin
desenarea unui
contur
transparent.
MarkerFaceCol
or seteaz

culoarea de
umplere a
markerilor de tip
contur nchis.
Culoarea de
umplere se poate
specifica folosind
opiunea
ColorSpec.
Opiunea none
produce un
interior
transparent de
marker.
MarkerSize
specific mrimea
unui marker, n
puncte. Valoarea
implicit este de
6 puncte.
Markerul de tip
punct este
reprezentat la o
dimensiune de
1/3 din mrimea
specificat.
Ex3. S se
reprezinte grafic
funcia cos(*),
unde parcurge
intervalul [-, ],
cu pasul de
parcurgere /10,
iar parcurge
intervalul [1, 10],
acesta fiind
mprit n acelai
numr de puncte
ca i intervalul

parcurs de
variabila .
Graficul se va
reprezenta prin
linie continu,
albastr, cu
markeri n form
de cerc, grosimea
liniei va fi de 2
puncte, culoarea
conturului
markerilor va fi
mov, mrimea
markerilor va fi
de 8 puncte, iar
culoarea de
umplere a
acestora va fi
galben.
Fiier script
C04S3.m
omega = pi:pi/10:pi;
tau =
1:9/(length(o
mega)-1):10;
y =
cos(omega.*ta
u);
plot(omega,y,
'bo','LineWidt
h',2,...
'MarkerEdgeCo
lor',[0.5 0
1],...
'MarkerFaceCo
lor','y',...
'MarkerSize',
8)
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

10 | P a g e
Fig. 4.5 Graficul
funciei cos(*)
4.1.3 Stabilirea
titlului si a
etichetelor

axelor.
Funciile title(),
xlabel(),
ylabel().
Afiarea de
text formatat
Titlul unui grafic
reprezint un ir
de caractere
afiat deasupra
zonei de
reprezentare
grafic. El poate fi
specificat folosind
funcia title().
Exemplu: pentru
graficul
reprezentat n fig.
4.5, s se
stabileasc un
titlu sugestiv.
Prin adugarea
liniei
title('Graficul
functiei
cos(\omega*\tau
)',
'FontWeight',
'bold')

imediat dup
apelul funciei
plot(), va aprea
rezultatul din fig.
4.6.
De remarcat c
literele greceti
i au fost scrise
folosind
secvenele
\omega i \tau,
incluse n irul de
caractere din
descrierea titlului.
Fig. 4.6
Specificarea unui
titlu graficului
funciei cos(*)
Conf.dr.ing. OvidiuAurelian Detean
Programare si

limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

11 | P a g e
Lista comenzilor
TeX care pot fi
utilizate pentru a
produce apariia
caracterelor
speciale n
legend este
prezentat n
tabelul 4.5.
Tab. 4.5 Caractere
speciale i
secvene prin
care acestea pot
fi reproduse n
MATLAB
Character
Sequence Symbol
Character
Sequence Symbol
Character
Sequence Symbol
\alpha
\upsilon
\sim ~ \beta
\phi \leq
\gamma \chi
\infty
\delta \psi
\clubsuit
\epsilon
\omega
\diamondsuit
\zeta
\Gamma
\heartsuit
\eta \Delta
\spadesuit
\theta
\Theta
\leftrightarr
ow
\vartheta
\Lambda
\leftarrow

\iota \Xi
\uparrow
\kappa \Pi
\rightarrow
\lambda
\Sigma
\downarrow
\mu \Upsilon
\circ \nu
\Phi \pm
\xi \Psi
\geq \pi
\Omega
\propto
\rho \forall
\partial
\sigma
\exists
\bullet
\varsigma
\ni \div
\tau \cong
\neq \equiv
\approx
\aleph \Im
\Re \wp
\otimes
\oplus
\oslash \cap
\cup
\supseteq
\supset
\subseteq
\subset
\int \in
\o \rfloor
\lceil
\nabla
\lfloor
\cdot \ldots
... \perp \neg
\prime
\wedge
\times x \0
\rceil \surd
\mid | \vee
\varpi
\copyright

\langle
\rangle
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

12 | P a g e
Etichetele unui
grafic reprezint
iruri de caractere
afiate n
apropierea
axelor, cu scopul
de a oferi
informaii despre
coninutul
valorilor de pe
axele respective.
Ele pot fi
specificate
folosind funciile
xlabel(), ylabel(),
pe graficele 2D,
respectiv
xlabel(), ylabel()
i zlabel() pe
graficele 3D.
Exemplu: pentru
graficul
reprezentat n fig.
4.6, s se
stabileasc
etichete sugestive
pe axe.
Prin adugarea
liniilor:
xlabel('\omeg
a')
ylabel('cos(\
omega*\tau)')

imediat dup
apelul funciei
title(), va aprea
rezultatul din fig.
4.7.
Fig. 4.7
Specificarea

etichetelor pe
axele graficului
funciei cos(*)
4.1.4 Afiarea
grilei.
Comanda grid
Grila reprezint
un set de linii
orizontale i
verticale,
prezente ntr-o
fereastr grafic,
cu rolul de a
facilita
interpretarea
graficului sau
culegerea de date
de pe graficul
funciei
reprezentate.
Exemplu: pentru
graficul
reprezentat n fig.
4.7, s se afieze
grila.
Prin adugarea
liniei:
grid on

imediat dup
apelul funciei
ylabel(), va
aprea rezultatul
din fig. 4.8.
Comanda grid n
varianta
grid off

va realiza
dezactivarea
grilei.
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

13 | P a g e
Fig. 4.8 Afiarea
grilei pentru

graficul funciei
cos(*)
4.1.5
Reprezentri
grafice multiple
n situaia n care
este necesar
reprezentarea
mai multor
grafice n aceeai
fereastr de tip
figur, se pot
specifica la apelul
funciei plot() mai
multe seturi de
date care s fie
reprezentate,
fiecare cu setrile
respective de stil
de linie, markeri
etc.
Ex4. S se
reprezinte
simultan graficele
funciilor sin 2x,
respectiv cos 2x,
n acelai sistem
de axe carteziene,
pentru valorile lui
x cuprinse n
intervalul [0, ].
S se reprezinte
titlul graficelor,
etichetele pe axe,
grila.
Fiierul script
C04S4.m
x = 0:pi/20:pi;
y1 = sin(2*x);
y2 = cos(2*x);
plot(x,y1,'b',x,y2,'g--',
'LineWidth', 2)
title('Reprezen
tari grafice
multiple')
xlabel('Valoril
e lui x')
ylabel('sin(2*x
), cos(2*x)')
grid on

Conf.dr.ing. OvidiuAurelian Detean


Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

14 | P a g e
Fig. 4.9
Reprezentri
grafice multiple
4.1.6 Definirea
legendei.
Funcia
legend()
n cazul
reprezentrilor
grafice multiple,
pentru a face
distincie ntre
reprezentrile
grafice, este util
definirea unei
legende. n acest
scop se va folosi
funcia legend().
Adugnd la
scriptul C04S4.m
linia
legend('sin(2*x
)', 'cos(2*x)')

aceasta va
produce apariia
legendei,
prezente n fig.
4.10.
Fig. 4.10 Definirea
unei legende
4.1.7 Comanda
hold
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

15 | P a g e
n situaia n care
se dorete
reprezentarea
grafic a mai

multor funcii n
aceeai fereastr,
dar adugarea
funciilor
suplimentare se
dorete s se fac
n etape distincte
n program, se
poate utiliza
comanda hold.
Prin utilizarea
opiunii
hold on

graficul curent va
fi meninut n
fereastra grafic,
iar graficele
ulterioare vor fi
reprezentate n
acelai sistem de
axe, pn la
ntlnirea
comenzii
hold off

Comanda hold
fr niciun
parametru
comut starea
acesteia, din on n
off i invers.
Fiierul script de
mai jos are, prin
urmare, acelai
efect cu cel
anterior.
Fiierul script
C04S5.m
x = 0:pi/20:pi;
y1 = sin(2*x);
y2 = cos(2*x);
plot(x,y1,'b','LineWidth',
2)
hold on
plot(x,y2,'g-', 'LineWidth',
2)
title('Reprezen
tari grafice
multiple')
xlabel('Valoril
e lui x')

ylabel('sin(2*x
), cos(2*x)')
grid on
legend('sin(2*x
)', 'cos(2*x)')
hold off

4.1.8 Tiprirea
graficului sau
exportarea ntrun fiier grafic.
Comanda print
n vederea
tipririi la
imprimant a
graficului dintr-o
fereastr de tip
figur, se poate
utiliza comanda
print. De o
importan
deosebit o are
exportarea
graficului ntr-un
fiier grafic, de
exemplu JPEG pe
24 bii i
importarea
acestuia ntr-un
document de tip
office. Comanda
>>print -djpeg
fig_sin_cos
introdus n script
sau chiar n
fereastra de
comenzi, produce
exportarea
ferestrei curente
(de exemplu,
reprezentarea
grafic multipl
de la ultimul
exemplu), n
fiierul grafic
fig_sin_cos.jpg.
Salvarea acestui
fiier se face n
directorul curent,
pentru o

consultare
ulterioar.
4.1.9 Divizarea
ferestrei
grafice. Funcia
subplot()
n funcie de
necesitate,
fereastra grafic
poate fi mprit
ntr-un tablou de
m x n ferestre
mai mici, n
fiecare dintre ele
putndu-se
reprezenta grafic
una sau mai
multe funcii.
Ferestrele sunt
numerotate n
ordine, pornind
de la 1, pn la
mxn.
Ex5. S se
reprezinte grafic
funciile sin 3x,
cos 3x, sin 6x,
cos 6x, ntr-un
tablou de 2x2
subplot-uri.
Fiierul script
C04S6.m
x = 0:0.01:1;
subplot(221)
plot(x,sin(3*pi
*x))
xlabel('x')
ylabel('sin
3\pix')
subplot(222)
plot(x,cos(3*pi
*x))
xlabel('x')
ylabel('cos
3\pix')
subplot(223)
plot(x,sin(6*pi
*x))
xlabel('x')
ylabel('sin
6\pix')
subplot(224)

plot(x,cos(6*pi
*x))
xlabel('x')
ylabel('cos
6\pix')

n scriptul de mai
sus, apelul
funciei
subplot(221),
similar
subplot(2,2,1),
produce divizarea
ferestrei ntr-un
tablou 2x2, din
care se selecteaz
prima
subfereastr.
Efectul execuiei
acestui script
poate fi verificat
n fig. 4.11.
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

16 | P a g e
Fig. 4.11
Reprezentri
grafice multiple
sub form de
tablou
4.1.10
Mrirea/micor
area
reprezentrii
grafice.
Comanda
zoom
4.1.11
tergerea unei
reprezentri
grafice.
Comanda clf
4.1.12
Deschiderea
unei ferestre
grafice noi.
Comanda
figure

4.1.13
Controlul
axelor. Funcia
axis()
4.2
Reprezentri
grafice 3D.
Reprezentri
de suprafee
O suprafa este
definit
matematic printro funcie f(x, y),
pentru care,
corespunztor
fiecrei perechi
de valori (x, y)
trebuie s se
calculeze cota z:
z = f(x, y).
n vederea
reprezentrii
grafice 3D, se
folosesc
urmtoarele
funcii:
meshgrid()
genereaz
tablouri X i Y
pentru
reprezentri 3D;
mesh() creeaz
suprafee
parametrice de
tip wireframe;
contour()
reprezentare
grafic sub form
de curbe de nivel.
Ex6. S se
reprezinte grafic
suprafaa definit
prin funcia
f(x, y) = (x 3)2
(y 2)2
pentru 2 x 4 i
1 y 3.

Fiierul script
C04S7.m
[X,Y] =
meshgrid(2:.2:4
, 1:.2:3);
Z = (X-3).^2(Y-2).^2;
mesh(X,Y,Z)
title('Functia
Sa (de pus pe
cal)')
xlabel('x')
ylabel('y')
zlabel('z')
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

17 | P a g e
Fig. 4.12
Reprezentarea
grafic 3D a
funciei a
Ex7. S se
reprezinte grafic
suprafaa definit
prin funcia
f(x, y) = 2( ) 2 2
xye x y
pentru -2 x 2
i -2 y 2. S se
determine
valorile i poziiile
maximelor i
minimelor
funciei.
Fiierul script
C04S7.m
[X,Y] =
meshgrid(2:.1:2,2:.2:2);
f = X.*Y.*exp(2*(X.^2+Y.^2));
figure (1)
mesh(X,Y,f)
xlabel('x')
ylabel('y')
zlabel('z')
grid on
figure (2)
contour(X,Y,f)

xlabel('x')
ylabel('y')
grid on
hold on
fmax =
max(max(f))
kmax =
find(f==fmax)
Pos = [X(kmax),
Y(kmax)]
plot(X(kmax),Y(
kmax),'*')
text(X(kmax),Y(
kmax),'
Maximum')
Conf.dr.ing. OvidiuAurelian Detean
Programare si
limbaje II Curs 4.
Reprezentri grafice
2D i 3D n
MATLAB

Fig. 4.13
Reprezentarea
grafic 3D a
funciei f(x, y) =
2( ) 2 2 xye x y

Fig. 4.14
Reprezentarea
grafic de tip
contour, cu
evidenierea
extremelor

1|Page
Programare si limbaje II
Anul I, AR+ITT
1 Recapitulare
Curs 4 + Laborator 7 + Laborator 8
1.1 Comenzi
grid
hold
print

1.2 Funcii
real()
imag()
whitebg()
set()
title()
xlabel()
ylabel()
zlabel()
legend()
subplot()
meshgrid()
mesh()
contour()
figure()
text()

1.3 Diverse
Specificatori de stiluri de linie
Specificatori de marker
Specificatori de culoare
LineWidth
MarkerEdgeColor
MarkerFaceColor
MarkerSize
Comenzi TeX Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 5. Derivare, integrare, limite, ecuaii n
MATLAB

2|Page

Curs 5. Derivarea i integrarea n MATLAB. Calculul limitelor. Rezolvarea


ecuaiilor, a sistemelor de ecuaii i a ecuaiilor difereniale
5.1 Derivarea n MATLAB
5.1.1 Derivarea folosind calculul simbolic. Funcia symbolic/diff()
Sintax:
diff(S) diff(S,'v') diff(S,n) diff(S,'v',n)

Descriere:
Forma diff(S) difereniaz expresia simbolic S n raport cu variabila sa liber, determinat de funcia
findsym().
Forma diff(S,'v') sau diff(S,sym('v')) difereniaz expresia simbolic S n raport cu variabila
v.
Forma diff(S,n) difereniaz expresia simbolic S de n ori (n mrime ntreag i pozitiv).
Forma diff(S,v,n) sau diff(S,n,v)difereniaz expresia simbolic S de n ori (n mrime
ntreag i pozitiv) n raport cu variabila v.
Ex.1. Fie variabila simbolic x:
>> syms x

i funcia:
>> y = sin(3*x)
y =
sin(3*x)

Comanda
>> diff(y)

deriveaz funcia y n raport cu variabila x:


ans =
3*cos(3*x)

Ex.2. Fie funcia z definit astfel:


>> z = exp(x)*cos(x)
z =
exp(x)*cos(x)

Derivata acesteia n raport cu x este:


>> diff(z)
ans =
exp(x)*cos(x) - exp(x)*sin(x)

Derivata de ordin doi se poate calcula aa:


>> diff(z,2)
ans =
(-2)*exp(x)*sin(x) Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 5. Derivare, integrare, limite,
ecuaii n MATLAB

3|Page

sau aa:
>> diff(diff(z))
ans =
(-2)*exp(x)*sin(x)

Ex.3. Parametru de intrare - matrice simbolic:


>> syms a x
>> A = [cos(a*x),sin(a*x);-sin(a*x),cos(a*x)]
A =
[ cos(a*x), sin(a*x)]
[ -sin(a*x), cos(a*x)]
>> diff(A)
ans =
[ -a*sin(a*x), a*cos(a*x)]
[ -a*cos(a*x), -a*sin(a*x)]

Ex.4. Derivate pariale (derivarea expresiilor cu mai multe variabile):


>> syms s t
>> f = sin(s*t)
f =
sin(s*t)
>> diff(f,t)
ans =
s*cos(s*t)
>> diff(f,s)
ans =
t*cos(s*t)

Observaii:
1. Funcia findsym() determin variabilele dintr-o expresie sau matrice simbolic.
Sintax:
findsym(S) findsym(S,n)

Descriere:
findsym(S) returneaz toate variabilele simbolice din expresia sau matricea simbolic S, n ordine

alfabetic, separate prin virgul. Dac S nu conine variabile simbolice, va fi returnat tabloul vid.
findsym(S,n) returneaz cele n variabile cel mai apropiate alfabetic de x.
Exemple:
>> syms a x y z t
>> findsym(sin(pi*t))
ans =
t
>> findsym(x+i*y-j*z)
ans =
x,y,z
>> findsym(a+y,1)
ans =
y

2. n cazul n care, din cauza complexitii expresiilor simbolice, MATLAB nu simplific n mod automat
rezultatul, se poate folosi funcia symbolic/simplify().
Sintax: Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 5. Derivare, integrare, limite, ecuaii n MATLAB
4|Page

R = simplify(S)
R = simplify(S, n)

Descriere:
R = simplify(S) simplific fiecare element din matricea simbolic S, folosind regulile de simplificare

MuPAD.
R = simplify(S, n) utilizeaz numrul ntreg i pozitiv n pentru a controla numrul de ncercri de

simplificare. Valoarea implicit: n = 50 (dac n nu este specificat).


Exemple:
>> syms x a b c
>> simplify(sin(x)^2 + cos(x)^2)
ans =
1 >> simplify(exp(c*log(sqrt(a+b))))
ans =
(a + b)^(c/2)
>> S = [(x^2+5*x+6)/(x+2),sqrt(16)]
S =
[ (x^2 + 5*x + 6)/(x + 2), 4]
>> R = simplify(S)
R =
[ x + 3, 4]

5.1.2 Derivarea numeric. Funcia diff()


Funcia diff() difereniaz i aproximeaz derivate.
Sintax:
Y = diff(X)
Y = diff(X,n)
Y = diff(X,n,dim)

Descriere:
Y = diff(X) calculeaz diferenele ntre elementele adiacente ale lui X. Dac X este un vector,
diff(X) returneaz un vector mai scurt cu un element, al diferenelor ntre elementele nvecinate:
[X(2)-X(1) X(3)-X(2) ... X(n)-X(n-1)]
Y = diff(X,n) aplic diferenierea recursiv de n ori, rezultnd diferena de ordin n. Astfel,
diff(X,2) este echivalent cu diff(diff(X)).
Y = diff(X,n,dim) calculeaz diferena de ordin n n raport cu dimensiunea specificat de scalarul

pozitiv dim. Dac ordinul n este mai mare sau egal cu lungimea dimensiunii dim, rezultatul va fi tabloul
vid.
Ex.1. Cantitatea diff(y)./diff(x) este o derivat numeric aproximativ.
>> x = [1 2 3 4 5];
>> y = diff(x)
y =
1 1 1 1
>> z = diff(x,2)
z =
0 0 0

Ex.2. Fiind dat matricea 4D:


>> A = rand(1,3,2,4);
diff(A) este diferena de ordin 1 n raport cu dimensiunea 2:
>> diff(A)
ans(:,:,1,1) = Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 5. Derivare, integrare, limite,
ecuaii n MATLAB

5|Page

0.0911 -0.7788
ans(:,:,2,1) =
-0.2810 -0.5348
ans(:,:,1,2) =
0.2684 0.4106
ans(:,:,2,2) =
-0.8073 0.8130
ans(:,:,1,3) =
-0.4718 0.3149
ans(:,:,2,3) =
0.2799 0.4940
ans(:,:,1,4) =
0.1673 -0.3038
ans(:,:,2,4) =
0.8134 0.0849
iar diff(A,3,4) este diferena de ordin 3 n raport cu dimensiunea 4:
>> diff(A,3,4)
ans(:,:,1) =
-2.0585 0.2382 1.0004
ans(:,:,2) =
1.5913 -0.5757 1.0010

5.2 Integrarea n MATLAB


5.2.1 Integrarea folosind calculul simbolic. Funcia symbolic/int()
Sintax:
int(S) int(S,v) int(S,a,b) int(S,v,a,b)

Descriere:
int(S) returneaz integrala nedefinit din expresia simbolic S n raport cu variabila sa simbolic,
determinat de funcia findsym().
int(S,v) returneaz integrala nedefinit din expresia simbolic S, n raport cu variabila v.
int(S,a,b) returneaz integrala definit de la a la b (a, b scalari simbolici sau de tip double) din
expresia simbolic S, n raport cu variabila simbolic implicit.
int(S,v,a,b) returneaz integrala definit de la a la b din expresia simbolic S, n raport cu variabila
v.
Ex.1. Fie variabilele simbolice:
>> syms x t z alpha;

Expresia:
>> int(-2*x/(1+x^2)^2)

returneaz:
ans =
1/(x^2 + 1)

Expresia:
>> int(x/(1+z^2),z)

returneaz: Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 5. Derivare, integrare, limite, ecuaii n
MATLAB

6|Page

ans =
x*atan(z)

Expresia:
>> int(x*log(1+x),0,1)

returneaz:
ans =
1/4

5.3 Calculul limitelor n MATLAB


5.3.1 Calculul limitelor din expresii simbolice. Funcia limit()
Sintax:
limit(F,x,a) limit(F,a) limit(F) limit(F,x,a,'right') limit(F,x,a,'left')

Descriere:
limit(F,x,a) calculeaz limita din expresia simbolic F, cnd x -> a.
limit(F,a) folosete findsym(F) pentru determinarea variabilei independente.
limit(F) folosete a = 0 pentru calculul limitei.
limit(F,x,a,'right') sau limit(F,x,a,'left') specific direcia unei limite unilaterale.

Exemple. Fie variabilele simbolice:


>> syms x a t h;

Se calculeaz urmtoarele limite:


>> limit(sin(x)/x)
ans =
1
>> limit(1/x,x,0,'right')
ans =
Inf
>> limit(1/x,x,0,'left')
ans =
-Inf
>> limit((sin(x+h)-sin(x))/h,h,0)
ans =
cos(x)
>> v = [(1 + a/x)^x, exp(-x)];
>> limit(v,x,inf)
ans =
[ exp(a), 0]

5.4 Rezolvarea simbolic a ecuaiilor i a sistemelor de ecuaii algebrice n MATLAB


5.4.1 Rezolvarea simbolic a ecuaiilor i a sistemelor de ecuaii algebrice. Funcia solve()
Sintax:
solve(eq) solve(eq,var) Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 5. Derivare,
integrare, limite, ecuaii n MATLAB

7|Page

solve(eq1,eq2,...,eqn) g = solve(eq1,eq2,...,eqn,var1,var2,...,varn)

Descriere:
solve(eq) rezolv ecuaia eq = 0, specificat printr-o expresie simbolic sau un ir de caractere care

nu conine semnul egal, n raport cu variabila implicit, determinat de findsym().


solve(eq,var) rezolv ecuaia eq = 0, n raport cu variabila var.
solve(eq1,eq2,...,eqn) rezolv sistemul de ecuaii dat, n raport cu n variabile determinate de
findsym().
g = solve(eq1,eq2,...,eqn,var1,var2,...,varn) determin soluiile sistemului de ecuaii,
n raport cu variabilele specificate.
Exemple:
>> solve('a*x^2 + b*x + c')
ans =
-(b + (b^2 - 4*a*c)^(1/2))/(2*a)
-(b - (b^2 - 4*a*c)^(1/2))/(2*a)
>> solve('a*x^2 + b*x + c','b')
ans =
-(a*x^2 + c)/x
>> S = solve('x + y = 1','x - 11*y = 5')
S =
x: [1x1 sym]
y: [1x1 sym]
>> S.x
ans =
4/3
>> S.y
ans =
-1/3
>> A = solve('a*u^2 + v^2', 'u - v = 1', 'a^2 - 5*a + 6')
A =
a: [4x1 sym]
u: [4x1 sym]
v: [4x1 sym]
>> A.a
ans =
3
2
2
3
>> A.u
ans =
(3^(1/2)*i)/4 + 1/4
(2^(1/2)*i)/3 + 1/3
1/3 - (2^(1/2)*i)/3
1/4 - (3^(1/2)*i)/4
>> A.v
ans =
(3^(1/2)*i)/4 - 3/4
(2^(1/2)*i)/3 - 2/3
- (2^(1/2)*i)/3 - 2/3
- (3^(1/2)*i)/4 3/4

5.5 Rezolvarea simbolic a ecuaiilor i a sistemelor de ecuaii difereniale n MATLAB


5.4.1 Rezolvarea simbolic a ecuaiilor i a sistemelor de ecuaii difereniale ordinare. Funcia dsolve()
Sintax:
r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')

r = dsolve('eq1','eq2',...,'cond1','cond2',...,'v')
dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v') Conf.dr.ing. Ovidiu-Aurelian Detean Programare
si limbaje II Curs 5. Derivare, integrare, limite, ecuaii n MATLAB

8|Page

Descriere:
eq1, eq2,... reprezint ecuaiile difereniale ordinare.
cond1,cond2,... reprezint condiiile la limit i/sau iniiale.
v reprezint variabila independent.
Variabila independent implicit este t.
Litera D reprezint diferenierea n raport cu variabila independent (d/dx).
D2 este echivalent cu d2/dx2.
D3y reprezint derivata a treia a lui y(x) sau y(t).
Condiiile iniiale sunt specificate prin ecuaii de forma: y(a) = b sau Dy(a) = b, unde y este o
variabil dependent, iar a i b sunt constante. Dac numrul condiiilor iniiale este mai mic dect
numrul variabilelor dependente, soluiile determinate vor conine constante arbitrare.
Exemple:
>> dsolve('Dx = -a*x')
ans =
C2/exp(a*t)
>> dsolve('Df = f + sin(t)')
ans =
C4*exp(t) - sin(t)/2 - cos(t)/2
>> dsolve('(Dy)^2 + y^2 = 1','s')
ans =
-1
1
sin(C11 + s)
sin(C7 - s)
>> dsolve('Dy = a*y', 'y(0) = b')
ans =
b*exp(a*t)
>> dsolve('D2y = -a^2*y', 'y(0) = 1', 'Dy(pi/a) = 0')
ans =
cos(a*t)
>> z = dsolve('Dx = y', 'Dy = -x')
z =
y: [1x1 sym]
x: [1x1 sym]
>> z.x
ans =
(C20*i)/exp(i*t) - C19*i*exp(i*t)
>> z.y
ans =
C19*exp(i*t) + C20/exp(i*t)

1|Page
Programare si limbaje II
Anul I, AR+ITT
1 Recapitulare
Curs 5 + Laborator 9 + Laborator 10

1.1 Comenzi
1.2 Funcii
diff()
symbolic/diff()
findsym()
simplify()
symbolic/int()
limit()
solve()
dsolve()

1.3 Diverse Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 6. Interfee grafice utilizator n MATLAB
2|Page

Curs 6. Proiectarea interfeelor grafice utilizator (GUI) n MATLAB


6.1 Interfaa grafic utilizator (GUI)
O interfa grafic utilizator (GUI Graphical User Interface) reprezint o colecie de una sau mai multe
ferestre, coninnd controale, denumite componente, care permit interaciunea utilizatorului cu
calculatorul, n vederea realizrii anumitor sarcini.
Prin utilizarea GUI, utilizatorul:
- nu trebuie s creeze script-uri sau s introduc instruciuni n fereastra de comenzi;
- nu trebuie s cunoasc detalii despre modul n care sarcinile sunt ndeplinite.
Componentele GUI:
- meniuri (Menu);
- bare de instrumente (Toolbar);
- butoane cu apsare (Push Button);
- bare de derulare (Slider);
- butoane de selecie (Radio Button);
- casete de selectare (Check Box);
- casete de editare de text (Edit Text);
- text static sau etichete (Static Text);
- meniu de tip vertical (Pop-up Menu);
- casete de tip list (Listbox);
- butoane de comutare (Toggle Button);
- tabele (Table);
- sisteme de axe de coordonate (Axe);
- panouri (Panel);
- grupuri de butoane (Button Group);
- controale ActiveX (ActiveX Control).
Fig. 6.1. Exemplu de GUI (controlsuite) Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 6. Interfee
grafice utilizator n MATLAB

3|Page

Fig. 6.2. Exemplu de GUI (controlsuite) n etapa de proiectare folosind guide


6.2 Crearea unui GUI
Exist dou moduri de a crea o interfa grafic utilizator:
- folosind comanda guide (graphical use interface development environment);
- prin scrierea de cod surs.
Comanda guide ofer un mod facil de creare a interfeelor grafice utilizator, folosind instrumente grafice
pentru formatarea ferestrei grafice, stabilirea dimensiunilor i aspectului, respectiv popularea interfeei
cu controale. Pentru fiecare entitate care va fi introdus n GUI, exist posibilitatea de a stabili sau
modifica o mulime larg de proprieti (atribute), folosind componenta Property Inspector. n urma
utilizrii comenzii guide, vor rezulta dou fiiere:
- un fiier binar, cu extensia .fig, coninnd descrierea ferestrei interfeei grafice;
- un fiier text, cu extensia .m, care conine descrierea funciilor care vor asigura funcionalitatea
interfeei grafice.
Crearea interfeei grafice utilizator prin scrierea manual de cod surs presupune cunoaterea
temeinic a tuturor comenzilor, funciilor i proprietilor asociate controalelor, dar are avantajul
realizrii unui cod compact i perfect adaptat cerinelor viitorului utilizator. La lansarea n execuie a
fiierului M care conine descrierea proprietilor i comportamenului componentelor, este creat figura
interfeei, este populat cu componente i sunt tratate interaciunile dintre acestea i utilizator. Figura
interfeei nu este salvat separat, ea este generat la fiecare lansare n execuie a codului surs.
Cele dou moduri de abordare pot fi combinate, doar dac GUI-ul este creat cu guide i apoi modificat
prin editarea programului.
6.2.1 Crearea unui GUI folosind comanda guide
Sintax:
guide guide('filename.fig') Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 6. Interfee
grafice utilizator n MATLAB

4|Page

guide('fullpath') guide(HandleList)

Descriere:
guide pornete mediul de creare sau editare interactiv a GUI-urilor. La pornire se poate specifica
deschiderea unui GUI existent sau crearea unuia nou, pornind de la zero sau pe baza unui model
(template) existent.
guide('filename.fig') deschide fiierul .fig cu numele specificat, dac acesta se afl n directorul
curent.
guide('fullpath') deschide fiierul cu numele specificat, chiar dac acesta nu se afl n directorul
curent.
guide(HandleList) deschide coninutul fiecrui fiier din HandleList, n copii separate ale
mediului de proiectare GUIDE.
Descrierea uneltelor GUIDE
Fig. 6.3 Componentele mediului de proiectare GUIDE
Ex.1. Crearea unui GUI folosind GUIDE, n vederea reprezentrii grafice de suprafee.
Fig. 6.4 Componentele utilizate n aplicaia din Ex.1 Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II
Curs 6. Interfee grafice utilizator n MATLAB

5|Page

Pornirea GUIDE:
1.
>>guide

2. Start -> MATLAB -> GUIDE (GUI Builder)


3. File -> New -> GUI
4. Folosind pictograma GUIDE de pe toolbar.
Fig. 6.5 GUIDE Quick Start
Selectare: Blank GUI, Save new figure as: Ex_GUI.fig.
Fig. 6.6 Fereastra GUIDE implicit
File -> Preferences -> GUIDE -> Show names in component palette Conf.dr.ing. Ovidiu-Aurelian Detean
Programare si limbaje II Curs 6. Interfee grafice utilizator n MATLAB

6|Page

Fig. 6.7 Fereastra GUIDE implicit, cu nume n paleta componentelor


Tools -> Grid and Rulers -> Show rulers, Show grid, Show guides.
Fig. 6.8 Redimensionare la aproximativ 400x300 pixeli Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje
II Curs 6. Interfee grafice utilizator n MATLAB

7|Page

Fig. 6.9 Adugarea a trei butoane cu apsare


Fig. 6.10 Adugarea componentelor: Static Text, Pop-up Menu, Axes Conf.dr.ing. Ovidiu-Aurelian Detean
Programare si limbaje II Curs 6. Interfee grafice utilizator n MATLAB

8|Page

Fig. 6.11 Alinierea butoanelor


Fig. 6.12 Modificri suplimentare ale aspectului Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs
6. Interfee grafice utilizator n MATLAB

9|Page

Fig. 6.13 Adugarea de text pe butoane: Surf, Mesh, Contour


Fig. 6.14 Adugarea setului de date pe Pop-up menu: Peaks, Membrane, Sinc Conf.dr.ing. Ovidiu-Aurelian
Detean Programare si limbaje II Curs 6. Interfee grafice utilizator n MATLAB

10 | P a g e

Fig. 6.15 Modificarea etichetei: Select Data


Salvare: Buton Save Figure (Toolbar)
Activare GUI: Tools -> Run (Ctrl - T) sau Buton Run Figure (Toolbar)
Fig. 6.16 Activare GUI
Adugarea de cod n fiierul M
Generarea datelor pentru reprezentrile grafice Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs
6. Interfee grafice utilizator n MATLAB

11 | P a g e

Fig. 6.17 Editarea funciei Ex_GUIDE_Opening_Fcn()


Dup linia
% varargin...

din funcia Ex_GUIDE_Opening_Fcn() se introduce codul:


% Create the data to plot.
handles.peaks=peaks(35);
handles.membrane=membrane;
[x,y] = meshgrid(-8:.5:8);
r = sqrt(x.^2+y.^2) + eps;
sinc = sin(r)./r;
handles.sinc = sinc;
% Set the current data value.
handles.current_data = handles.peaks;
surf(handles.current_data)

Fig. 6.18 Aspectul ferestrei GUI dup introducerea codului Conf.dr.ing. Ovidiu-Aurelian Detean Programare si
limbaje II Curs 6. Interfee grafice utilizator n MATLAB

12 | P a g e

Programarea meniului Pop-up


Fig. 6.19 Selectarea callback-ului asociat meniului pop-up
n funcia
% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns popupmenu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu1

dup linia
% handles structure with handles and user data (see GUIDATA)

se introduce codul:
% Determine the selected data set.
str = get(hObject, 'String');
val = get(hObject,'Value');
% Set current data to the selected data set.
switch str{val};
case 'Peaks' % User selects peaks.
handles.current_data = handles.peaks;
case 'Membrane' % User selects membrane.
handles.current_data = handles.membrane;
case 'Sinc' % User selects sinc.
handles.current_data = handles.sinc;
end
% Save the handles structure.
guidata(hObject,handles)

Programarea butoanelor push


n funcia pushbutton1_Callback()
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

se introduce codul:
% Display surf plot of the currently selected data.
surf(handles.current_data); Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 6. Interfee
grafice utilizator n MATLAB

13 | P a g e

n funcia pushbutton2_Callback()
se introduce codul:
% Display mesh plot of the currently selected data.
mesh(handles.current_data);

n funcia pushbutton3_Callback()
se introduce codul:
% Display contour plot of the currently selected data.
contour(handles.current_data);

Salvare, lansare n execuie, testare:


Fig. 6.20 Testarea GUI-ului pentru diferite tipuri de date
6.2.2 Crearea unui GUI prin scrierea de cod surs
Ex.2. Urmtorul cod (pitagora.m) genereaz un GUI care permite citirea valorilor a dou catete i
calculeaz valoarea ipotenuzei unui triunghi dreptunghic, folosind teorema lui Pitagora:
function [] = pitagora()
% Arata cum se actualizeaza un control cu date din altele.
% Creeaza doua casete de text si un pushbutton. Cand se apasa pushbutton,
% se afiseaza ipotenuza generata pe baza valorilor catetelor
% introduse in casetele de text.
S.fh = figure('units','pixels',...
'position',[400 400 120 100],...
'menubar','none',...
'name','Pitagora',...
'numbertitle','off',...
'resize','on');
S.pb = uicontrol('style','push',...
'unit','pix',...
'position',[10 10 100 20],...
'string','Fara numar...',...
'tooltip','Apasa pentru calcul ipotenuza');
S.ed(1) = uicontrol('style','edit',...
'unit','pix',...
'position',[10 70 100 20],...
'string','cat e a?');
S.ed(2) = uicontrol('style','edit',...
'unit','pix',...
'position',[10 40 100 20],...
'string','dar b?'); Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 6. Interfee grafice utilizator n
MATLAB

14 | P a g e

set(S.pb,'callback',{@pb_call,S}); % Seteaza callback-ul, transmite parametri.


function [] = pb_call(varargin)
% Callback pentru pushbutton.
S = varargin{3}; % Citeste structura.
R = [get(S.ed(1),'string'), get(S.ed(2),'string')]; % Citeste valorile a si b.
% str = 'Fara numar.'; % Mesaj implicit.
str = ['Ipotenuza: ', num2str(sqrt(str2num(R(1))^2+str2num(R(2))^2))];
set(S.pb,'string',str)

Fig. 6.21 Etape n execuia GUI-ului Pitagora


Ex.3. Urmtorul cod (simple_gui2.m) genereaz un GUI similar celui din Ex.1, creat cu GUIDE:
function simple_gui2
% SIMPLE_GUI2 Select a data set from the pop-up menu, then
% click one of the plot-type push buttons. Clicking the button
% plots the selected data in the axes.
% Create and then hide the GUI as it is being constructed.
f = figure('Visible','off','Position',[360,500,450,285]);
% Construct the components.
hsurf = uicontrol('Style','pushbutton','String','Surf',...
'Position',[315,220,70,25],...
'Callback',{@surfbutton_Callback});
hmesh = uicontrol('Style','pushbutton','String','Mesh',...
'Position',[315,180,70,25],...
'Callback',{@meshbutton_Callback});
hcontour = uicontrol('Style','pushbutton',...
'String','Contour',...
'Position',[315,135,70,25],...
'Callback',{@contourbutton_Callback});
htext = uicontrol('Style','text','String','Select Data',...
'Position',[325,90,60,15]);
hpopup = uicontrol('Style','popupmenu',...
'String',{'Peaks','Membrane','Sinc'},...
'Position',[300,50,100,25],...
'Callback',{@popup_menu_Callback});
ha = axes('Units','Pixels','Position',[50,60,200,185]);
align([hsurf,hmesh,hcontour,htext,hpopup],'Center','None');
% Create the data to plot.
peaks_data = peaks(35);
membrane_data = membrane;
[x,y] = meshgrid(-8:.5:8);
r = sqrt(x.^2+y.^2) + eps;
sinc_data = sin(r)./r;
% Initialize the GUI.
% Change units to normalized so components resize
% automatically.
set([f,ha,hsurf,hmesh,hcontour,htext,hpopup],...
'Units','normalized');
%Create a plot in the axes.
current_data = peaks_data;
surf(current_data);
% Assign the GUI a name to appear in the window title.
set(f,'Name','Simple GUI') Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 6. Interfee grafice
utilizator n MATLAB

15 | P a g e

% Move the GUI to the center of the screen.


movegui(f,'center')
% Make the GUI visible.
set(f,'Visible','on');
% Callbacks for simple_gui. These callbacks automatically
% have access to component handles and initialized data
% because they are nested at a lower level.
% Pop-up menu callback. Read the pop-up menu Value property
% to determine which item is currently displayed and make it
% the current data.
function popup_menu_Callback(source,eventdata)
% Determine the selected data set.
str = get(source, 'String');
val = get(source,'Value');
% Set current data to the selected data set.
switch str{val};
case 'Peaks' % User selects Peaks.
current_data = peaks_data;
case 'Membrane' % User selects Membrane.
current_data = membrane_data;
case 'Sinc' % User selects Sinc.
current_data = sinc_data;
end
end
% Push button callbacks. Each callback plots current_data in
% the specified plot type.
function surfbutton_Callback(source,eventdata)
% Display surf plot of the currently selected data.
surf(current_data);
end
function meshbutton_Callback(source,eventdata)
% Display mesh plot of the currently selected data.
mesh(current_data);
end
function contourbutton_Callback(source,eventdata)
% Display contour plot of the currently selected data.
contour(current_data);
end
end

Fig. 6.22 Exemple de execuie a GUI-ului simple_gui2


6.3 Funcionarea unui GUI
Majoritatea interfeelor grafice utilizator ateapt o aciune din partea utilizatorului, pentru ca ele s
reacioneze ntr-un mod care a fost n prealabil studiat i programat. Fiecare control i GUI-ul n sine, au
asociate una sau mai multe rutine (cod MATLAB executabil) scrise de ctre programator, denumite
callbacks (funcii de apel invers). Conf.dr.ing. Ovidiu-Aurelian Detean Programare si limbaje II Curs 6. Interfee grafice
utilizator n MATLAB

16 | P a g e

Execuia fiecrui callback este declanat de aciunea utilizatorului, cum ar fi apsarea unui buton,
selectarea unei opiuni dintr-un meniu, introducerea unei valori ntr-o caset de editare, apsarea unui
buton de mouse sau trecerea cursorului peste un control. Prin funciile definite, GUI-ul rspunde la
aceste aa-numite evenimente.
Programare condus de evenimente
Execuie asincron a callback-ului declanat de evenimente externe software-ului.
Callback-urile pot fi programate n dou moduri:
- ca i funcii MATLAB, scrise n fiiere M (mai puternice i mai flexibile, din cauza accesului la
argumente);
- ca iruri de caractere coninnd expresii sau comenzi.