Sunteți pe pagina 1din 51

SOFT MATEMATIC

Curs 5
Ana-Maria MOSNEAGU
Universitatea Al. I. Cuza Iasi
Facultatea de Matematica
26 noiembrie 2013
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 1 / 51
Operat ii n sens matriceal si n sens tablou
Inversa unei matrice patratice nesingulare se obt ine folosind funct ia inv,
iar determinantul unei matrice patratice cu funct ia det. De asemenea,
rangul unei matrice poate calculat cu funct ia rank.
>> A = [1 2; 3 4]; invA = inv(A), detA = det(A)
invA =
-2.0000 1.0000
1.5000 -0.5000
detA =
-2
>> I2 = A * invA
>> A = [0 0 2; 3 0 0; 9 0 0]; detA = det(A), rA = rank(A)
detA =
0
rA =
2
>> inv(A)
Warning: Matrix is singular to working precision.
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 2 / 51
Operat ii n sens matriceal si n sens tablou

In cazul ridicarii la putere ca si operat ie n sens matriceal, daca A este o


matrice patratica si p este un ntreg cu p > 1, atunci prin comanda B=A^p
se construieste matricea B prin nmult irea repetata (de p ori) a matricei A
cu ea nsasi. Daca p < 0 este un ntreg, atunci A^p este denit prin
inv(A)^(-p). Pentru alte valori ale lui p, A^p este evaluata utilizand
valorile proprii ale lui A; rezultatul poate incorect sau imprecis daca A nu
este diagonalizabila sau atunci cand A este prost condit ionata din punct de
vedere al valorilor proprii.
Daca a este un scalar si A este o matrice patratica, atunci a^A este
calculata folosind valorile proprii ale lui A.
Daca A si B sunt matrice, atunci evaluarea A^B va genera o eroare.
Ridicarea la putere ca si operat ie n sens tablou se specica plasand un
punct naintea operatorului de ridicare la putere si efectueaza ridicarea la
putere element cu element.
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 3 / 51
Operat ii n sens matriceal si n sens tablou
>> A = [1 2; 3 4]; A .^ 2
ans =
1 4
9 16
Operat ia . permite ca exponentul sa e un tablou cand dimensiunile
bazei si ale exponentului coincid, sau cand baza este un scalar.
>> A = [1 2; 3 4]; B = [3 4; 5 6]; A .^ B, 2 .^ A
ans =
1 16
243 4096
ans =
2 4
8 16
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 4 / 51
Operat ii n sens matriceal si n sens tablou
>> x = [1 2 3 4]; x .^ 3, 3 .^ x
ans =
1 8 27 64
ans =
3 9 27 81
Transpusa conjugata a matricei complexe A se obt ine folosind comanda
A. Daca A este o matrice reala, atunci A calculeaza transpusa obisnuita.
Transpusa fara conjugare se obt ine utilizand comanda A.. A se vedea si
funct iile ctranspose(A) si transpose(A).
>> A = [1+2*i 1; 2 3-3*i]; A, A.
ans =
1.0000 - 2.0000i 2.0000
1.0000 3.0000 + 3.0000i
ans =
1.0000 + 2.0000i 2.0000
1.0000 3.0000 - 3.0000i
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 5 / 51
Operat ii n sens matriceal si n sens tablou
Consideram cazul particular al vectorilor coloana x si y de aceeasi
dimensiune. Atunci, produsul scalar al acestora poate calculat folosind
funct ia dot sau folosind scrierea x*y. Produsul vectorial al doi vectori de
dimensiune 3 se poate obt ine folosind funct ia cross.
>> x = [1; 2; 3]; y = [-3; 4; -5]; x * y
ans =
-10
>> dot(x,y)
ans =
-10
>>cross(x,y)
ans =
-22
-4
10
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 6 / 51
Funct ii pentru analiza datelor
Funct iile de baza pentru analiza datelor sunt: max calculeaza maximul,
min calculeaza minimul, mean media, median mediana, std
deviat ia standard, var dispersia, sort sortare n ordine crescatoare,
sum suma elementelor, prod produsul elementelor, cumsum suma
cumulata, cumprod produsul cumulat, diff diferent a elementelor.
Acestea pot aplicate vectorilor linie sau coloana sau matricelor, caz n
care funct iile act ioneaza pe coloana.
>>x = randn(1, 100);
>>min(x), max(x)
>>sort(x), -sort(-x)
>>sum(x), prod(x)
>>cumsum(x), cumprod(x)
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 7 / 51
Funct ii pentru analiza datelor
Funct ia diff, aplicata unui vector x de lungime n, calculeaza diferent ele
elementelor vectorului. Astfel, va produce vectorul de lungime n 1 cu
elementele x(2) x(1), x(3) x(2), ..., x(n) x(n 1). Pentru vectorul
x denit mai sus, avem:
>>diff(x)
Pentru o matrice, funct ia max returneaza un vector ce cont ine elementul
maxim al ecarei coloane, iar funct ia min returneaza un vector ce cont ine
elementul minim al ecarei coloane. De exemplu,
>>A = [1 -3 3 4; 0 -3 4 8; -7 9 5 8], Mc = max(A), mc = min(A)
A =
1 -3 3 4
0 -3 4 8
-7 9 5 8
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 8 / 51
Funct ii pentru analiza datelor
Mc =
1 9 5 8
mc =
-7 -3 3 4
Pentru a determina elementul maxim, respectiv minim, al matricei A, se
aplica funct ia max, respectiv min, de doua ori succesiv:
>>M=max(max(A)), m=min(min(A))
M =
9
m =
-7
sau prin comenzile
>>M=max(A(:)), m=min(A(:))
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 9 / 51
Funct ii pentru analiza datelor
Funct iile max si min pot returna un al doilea argument care specica
indicele elementului maxim, respectiv minim. Daca exista mai multe
elemente maxime, respectiv minime ntr-o coloana, se returneaza indicele
primului element maxim, respectiv minim.
>> [Mc, i]=max(A), [mc, i]=min(A)
Mc =
1 9 5 8
i =
1 3 3 2
mc =
-7 -3 3 4
i =
3 1 1 1
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 10 / 51
Funct ii pentru analiza datelor
Funct iile max(X,Y) sau min(X,Y) returneaza un tablou de elemente ce
cont ine elementele maxime, respectiv minime preluate din X si Y. Cele
doua argumente trebuie sa aiba aceeasi dimensiune, cu except ia faptului
cand unul dintre argumente este un scalar.
>>max(A, 0)
ans =
1 0 3 4
0 0 4 8
0 9 5 8
>>B = -1 * ones(3, 4); min(A, B)
ans =
-1 -3 -1 -1
-1 -3 -1 -1
-7 -1 -1 -1
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 11 / 51
Funct ii pentru analiza datelor
Funct iile max(X,[],dim) si max(X,[],dim) opereaza de-a lungul
dimensiunii dim. Asadar, pentru a obt ine maximul si minimul pe linii, vom
scrie
>>min(A, [], 2), max(A, [], 2)
ans =
-3
-3
-7
ans =
4
8
9
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 12 / 51
Funct ii pentru analiza datelor
Sintaxa generala a funct iei sort este sort(X,mod,dim), unde X
reprezinta tabloul de sortat, mod poate ascend pentru sortare
crescatoare si descend pentru sortare descrescatoare, iar dim reprezinta
dimensiunea asupra careia opereaza funct ia. Implicit, aceasta funct ie
sorteaza crescator elementele ecarei coloane a matricei (implicit, dim=1,
mod=ascend), dar poate facuta sa act ioneze pe linii, setand argumentul
dim la 2. Funct ia sum, aplicata unei matrice, returneaza un vector ce
cont ine sumele elementelor ecarei coloane, dar poate sa act ioneze si
asupra liniilor.
>>sort(A), sort(A, descend), sort(A, 2)
>>sum(A), sum(A, 2)
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 13 / 51
Operatori relat ionali
Operatorii relat ionali n MATLAB sunt: == (egal), = (diferit), < (mai
mic), > (mai mare), <= (mai mic sau egal) si >= (mai mare sau egal).
Obeservat ie: Un singur egal, =, desemneaza o atribuire.
Rezultatul unei comparat ii ntre scalari este 1 daca relat ia este adevarata si
0, n caz contrar. Pentru a putea compara doua matrice, acestea trebuie
sa aiba aceeasi dimensiune. De asemenea, este posibila o comparat ie ntre
o matrice si un scalar.

In ambele cazuri, rezultatul este o matrice de 0 si 1
de aceeasi dimensiune cu matricea. La comparat ia matrice-matrice se
compara perechile corespunzatoare de elemente, iar la comparat ia
matrice-scalar se compara scalarul cu ecare element al matricei. De
exemplu:
>>A = [1 2; 3 4], B = eye(2), A == B
ans =
1 0
0 0
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 14 / 51
Operatori relat ionali
>>A <= 3
ans =
1 1
1 0
Exemple de funct ii logice oferite de MATLAB: ischar testeaza daca
argumentul este sir de caractere (string), isempty testeaza daca
argumentul este vid, isequal testeaza daca tablourile sunt identice,
isfinite testeaza daca elementele unui tablou sunt nite, isinf
testeaza daca elementele unui tablou sunt Inf, islogical testeaza daca
argumentul este un tablou logic, isprime testeaza daca argumentul este
numar prim, isnumeric testeaza daca argumentul este numeric, isreal
testeaza daca argumentul este tablou real.
>>isequal(A, B), isnumeric(A)
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 15 / 51
Operatori logici

In MATLAB operatorii logici sunt: & (si), | (sau), (not), xor (sau
exclusiv), la care se aduga funct iile all (aplicata unui vector, ntoarce 1
daca toate elementele vectorului sunt nenule) si any (aplicata unui vector,
ntoarce 1 daca cel put in un element al vectorului este nenul). Precedent a
operatorilor:
Nivel de precedent a Operator
1 (cea mai mare) ., .^, , ^
2 + (unar), - (unar),
3 .*, ./, .\, *, /, \
4 + (binar), - (binar)
5 :
6 <, <=, >, >=, ==, =
7 &
8 (cea mai mica) |
MATLAB evalueaza operatorii de precedent a egala de la stanga la
dreapta. Precedent a se poate modica cu ajutorul parantezelor.
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 16 / 51
Operatori logici
Pentru o matrice, all opereaza pe coloane, returnand un vector linie ce
cont ine rezultatul aplicarii lui all ecarei coloane. Aceasta funct ie poate
facuta sa opereze pe linii, specicand argumentul 2, dupa numele
matricei. Funct ia any lucreaza similar.
>>x = [0 1 2]; y = [-1 0 1]; x <= 0 & y+1 >= 0
ans =
1 0 0
>> xor(x, y)
ans =
1 1 0
>> all(y)
ans =
0
>> any(y)
ans =
1
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 17 / 51
Operatori logici
>> A = [1 0 3; 4 5 6]; all(A)
ans =
1 0 1
>> all(A, 2)
ans =
0
1
>> B = [1 -2; 3 4; -5 6]; any(B, 2)
ans =
1
1
1
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 18 / 51
Operatori logici
Funct ia find, aplicata unui vector, returneaza indicii elementelor nenule
ale vectorului. De exemplu,
>>y = [-1 0 1]; find(y)
ans =
1 3
De asemenea, poate determina indicii elementelor unui vector care
ndeplinesc o anumita condit ie logica. De exemplu, urmatoarea secvent a
>>y = 1:100, x = find(isprime(y))
determina primele 25 de numerele prime.
Atunci cand funct ia find este aplicata unei matrice, vectorul de indici
returnat corespunde matricei privita ca un vector coloana obt inut din
asezarea succesiva a coloanelor, ncepand cu prima. Astfel, urmatoarea
secvent a
>>A = [-1 0 2; 3 -4 -5; 9 -1 -3]; A(find(A<0)) = 0
seteaza elementele negative ale matricei A la 0.
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 19 / 51
Programarea n MATLAB
Pentru executarea unui program scris ntr-un limbaj oarecare, exista, n
principiu, doua abordari: compilare sau interpretare. La compilare,
compilatorul transforma programul sursa n totalitatea sa ntr-un program
echivalent scris n limbaj masina, care apoi este executat. La interpretare,
interpretorul ia prima instruct iune din programul sursa, o transforma n
limbaj masina si o executa; apoi trece la instruct iunea a doua si repeta
aceleasi act iuni s.a.m.d.
MATLAB este un limbaj de programare de nivel nalt ce poate opera atat
n regim de linie de comanda, prin execut ia imediata a comenzii introduse
de utilizator, cat si de interpretor, prin execut ia unui program sursa.
Asadar, MATLAB -ul citeste, interpreteaza si executa linie cu linie
programele. Acest lucru poate lua un timp relativ lung de calcul, dar este
foarte convenabil pentru detectarea erorilor. Alte limbaje de programare,
de exemplu C, sunt limbaje compilate. Viteza de execut ie poate mai
mare, dar erorile pot detectate uneori mai greu.
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 20 / 51
Fisiere M
Fisierele M din MATLAB sunt echivalentele programelor, funct iilor,
subrutinelor si procedurilor din alte limbaje de programare. Un sier M
este un sier text cu extensia .m ce cont ine comenzi MATLAB. Fisierele
M sunt de doua tipuri:
siere M de tip script. Acestea sunt siere care nu au nici un
argument de intrare sau iesire si opereaza asupra variabilelor din
spat iul de lucru. Un sier script permite memorarea unei secvent e de
comenzi care sunt utilizate apoi n mod repetat sau care vor
necesare ulterior.
siere M de tip funct ie. Aceste sunt siere ce cont in o linie de
denit ie care ncepe cu cuvantul cheie function si care pot accepta
parametri de intrare si returna parametri de iesire. Variabilele interne
ale unei funct ii sunt locale (cu except ia cazului cand sunt declarate
global).
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 21 / 51
Fisiere M
Pentru a crea un sier M nou, din meniul File, se alege opt iunea New si
apoi M-File sau se foloset e comanda
>>edit
n fereastra de comanda. Se deschide fereastra editorului de text al
MATLAB -ului, n care este introdus corpul programului sau al funct iei.
Salvarea sierului se realizeaza alegand opt iunea Save sau Save as, din
meniul File al editorului. Pentru a deschide un sier M pentru vizualizare
sau editare, din meniul File al ferestrei principale a aplicat iei, se alege
opt iunea Open sau se tasteaza n fereastra de comanda:
>>open nume_fisier
sau
>>edit nume_fisier
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 22 / 51
Fisiere M
Construim un sier M script pentru a realiza diverse operat ii pe vectori:
% PrimulScript.m
% Operatii pe vectori
% Utilizarea functiei MATLAB norm, pentru a calcula
% norma unui vector:
% norm(v, p) = sum(abs(v).^p)^(1/p)
% norm(v) = norm(v,2)
% norm(v, inf) = max(abs(v))
% norm(v, -inf) = min(abs(v))
n = 10;
% generam doi vector de dimensiune 4n+1
v = -n : .5 : n;
w = 0 : .5 : 2*n;
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 23 / 51
Fisiere M
% inmultirea in sens tablou, element cu element
y = v .* w
% produsul scalar
ps = v * w
% norme ale lui v
n1 = sqrt(sum(v.^2))
n2 = norm(v, 1)
n3 = norm(v)
n4 = norm(v, inf)
n5 = norm(v, -inf)
Salvam sierul script cu numele PrimulScript.
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 24 / 51
Fisiere M
Primele opt linii ale acestui sier script ncep cu simbolul % si deci sunt
linii de comentariu. Ori de cate ori MATLAB ntalneste un simbolul % va
ignora restul liniei.

Incepand cu versiunea 7 se admit blocuri de comentarii,
adica comentarii care se ntind pe mai multe linii. Ele sunt delimitate prin
%{ si %}. Acestea trebuie sa e singure pe linie, ca n exemplul:
%{
Comentariu bloc
pe doua linii
%}
Pentru a pune n execut ie sierul script, tastam numele sau n fereastra de
comanda. Directorul curent asat pe bara de instrumente a ferestrei
principale a MATLAB -ului trebuie sa coincida cu directorul n care a fost
salvat sierul.
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 25 / 51
Fisiere M
>> PrimulScript
Acesta este executat, iar MATLAB -ul aseaza rezultatele n fereastra de
comanda.
Prin execut ia comenzii
>> help PrimulScript
toate liniile, de la prima linie de comentariu pana la prima linie care nu
este de comentariu sunt asate pe ecran. Deci, aceste linii ar trebui sa
cont ina o scurta descriere a scriptului.
Sintaxa generala prin care se deneste o funct ie de catre utilizator este:
function [param_de_iesire] = nume_functie(param_de_intrare)
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 26 / 51
Fisiere M
Parametrii de intrare sunt parametri formali. Daca o funct ie nu are
parametri de intrare, atunci parantezele () lipsesc. Daca o funct ie nu are
parametri de iesire, atunci parantezele [] si = lipsesc. Daca o funct ie are
doar un parametru de iesire, atunci parantezele [] pot lipsi. Fisierul funct ie
va salvat cu numele nume functie si extensia .m.
function z = F(x,y)
%{
F.m
F(x,y) = x^2 + y^2
argumentele functiei pot fi scalari sau vectori
%}
z = x.^2 + y.^2;
O comanda de tipul
>>help F
va asa blocul de comentarii de la nceputul funct iei.
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 27 / 51
Fisiere M
Funct ia astfel denita va putea apelata la fel ca orice funct ie MATLAB,
n fereastra de comanda a aplicat iei, ntr-un script sau ntr-o alta funct ie.
>> F(2,3)
ans =
13
>> F([1 2 3],[3 4 5])
ans =
10 20 34
>> F([1 -2 3.5],5)
ans =
26.0000 29.0000 37.2500
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 28 / 51
Funct ii inline
Putem deni si funct ii inline astfel:
>> f = inline(1 / (1 + x^2))
f =
Inline function:
f(x) = 1 / (1 + x^2)
>> f(2.2)
ans =
0.1712
Este uneori necesar sa se vectorizeze o funct ie inline, adica sa se
converteasca toate operat iile n operat ii n sens tablou, astfel ca funct ia sa
poata apelata cu argumente de tip tablou. Acest lucru se poate realiza
cu funct ia vectorize:
>> g = vectorize(f)
g =
Inline function:
g(x) = 1 ./ (1 + x.^2)
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 29 / 51
Funct ii inline
MATLAB determina si ordoneaza argumentele unei funct ii inline. Daca
acest lucru nu este satisfacator, argumentele se pot deni si ordona
explicit, astfel:
>> f = inline(a*exp(x) / (b + y^2))
f =
Inline function:
f(a,b,x,y) = a*exp(x) / (b + y^2)
>> f = inline(a*exp(x) / (b + y^2),x,y,a,b)
f =
Inline function:
f(x,y,a,b) = a*exp(x) / (b + y^2)
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 30 / 51
Funct ii anonime

Incepand cu versiunea 7, MATLAB permite denirea de funct ii anonime.


Ele pot denite n linia de comanda, n siere de tip funct ie sau script.
Sintaxa pentru crearea unei funct ii anonime este
>> nume_functie = @(lista_arg) expresie
De exemplu, denim o funct ie sqr care va returna patratul argumentului
sau.
>> sqr = @(x) x.^2;
>> sqr([2 4 7])
ans =
4 16 49
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 31 / 51
Argumente funct ie
Exista situat ii n care este nevoie ca o funct ie care a fost deja scrisa sa e
transmisa ca argument unei alte funct ii. Pentru exemplicare, vom folosi
funct ia MATLAB ezplot, care reprezinta grac funct ia transmisa ca
argument, pe domeniul implicit [2, 2]. O prima modalitate de a
transmite o funct ie ca argument funct iei ezplot este printr-o construct ie
numita function handle. Acesta este un tip de date MATLAB care
cont ine toate informat iile necesare pentru a evalua o funct ie. Un function
handle poate creat punand caracterul @n fat a numelui funct iei. Numele
unei funct ii poate transmis, de asemenea, ca un sir de caractere.
Function handle a fost introdus ncepand cu MATLAB 6 si este de
preferat utilizarii sirurilor de caractere, ind mai ecient. Totusi, exista
funct ii care accepta argumente de tip funct ie doar sub forma de sir de
caractere (nu este cazul celor 2 exemple ce urmeaza).
>> ezplot(@cos)
>> ezplot(sqrt)
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 32 / 51
Argumente funct ie
Mai exista doua modalitat i de a transmite o funct ie ca argument lui
ezplot: ca expresie ntre apostrofuri, sau ca obiect inline
>> ezplot(x / (1 + x^2))
>> f = inline(1 / (1 + x^2));
>> ezplot(f)
Pentru a evalua n corpul unei funct ii o funct ie transmisa ca parametru se
utilizeaza functi a feval. Sintaxa acesteia este feval(fun, x1, x2,...,
xn), unde fun este numele funct iei, iar x1, x2,..., xn sunt
argumentele sale.
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 33 / 51
Argumente funct ie
Implementam funct ia fderiv care va aproxima derivata funct iei (data ca
prim argument al funct iei fderiv) n punctul x cu ajutorul diferent ei
divizate
f

(x) =
f (x + h) f (x)
h
function y = fderiv(f,x,h)
%{
fderiv.m
Aproximarea derivatei lui f in punctul x
folosind diferenta divizata
fderiv(f, x, h) este diferenta divizata [x, x+h] a lui f;
valoare implicita a lui h este sqrt(eps)
%}
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 34 / 51
Argumente funct ie
if nargin < 3
h = sqrt(eps);
end
y = (feval(f, x+h) - feval(f, x)) / h;
Funct ia nargin returneaza numarul de argumente de intrare cu care
funct ia a fost apelata. Astfel se pot atribui valori implicite argumentelor
nespecicate la apel. Numarul de argumente de iesire este returnat de
funct ia nargout.
Apelam funct ia fderiv
>> fderiv(@exp, 1.2)
ans =
3.3201
>> f=inline(x/(1+x^2));
>> fderiv(f, 2.4)
ans =
-0.1042
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 35 / 51
Argumente funct ie
Pentru a face ca funct ia denita de utilizator, fderiv, sa accepte expresii
de tip sir de caractere se va adauga la nceputul funct iei
f=fcnchk(f);
Acum vom putea apela fderiv si astfel:
>> fderiv(x/(1+x^2), 2.4)
MATLAB 7 a simplicat modul de apel al argumentelor de tip funct ie.
Astfel, pentru a evalua n corpul unei funct ii o funct ie transmisa ca
parametru se utilizeaza sintaxa de apel obisnuita. Deci, n funct ia fderiv
funct ia f se apeleaza n mod normal:
y = (f(x+h) - f(x))/h;
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 36 / 51
Variabile globale
Variabilele declarate n interiorul unei funct ii sunt locale spat iului de lucru
al acelei funct ii. Pentru ca o variabila sa existe n mai multe spat ii de
lucru, eventual chiar cel principal se poate folosi instruct iunea global.

In
interiorul unei funct ii, o variabila globala trebuie sa apara la nceputul
funct iei, naintea primei sale utilizari. Vericarea faptului ca o variabila X
este globala se face prin apelarea funct iei isglobal(X), care returneaza 1,
daca X este de tip global si 0, altfel.
function y = g(x)
% g.m
% g(x) = x^2 + T
global T
y = x.^2 + T;
% sfarsitul functiei g
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 37 / 51
Variabile globale
% exemplu.m
clear;
global T
T = input(T: );
x = 1 : 10;
g(x)
% sfarsitul scriptului exemplu
>> exemplu
T: 3
ans =
4 7 12 19 28 39 52 67 84 103
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 38 / 51
Instruct iuni de I/O
Comanda input permite utilizatorului sa introduca de la tastatura o
anumita data de intrare ce va atribuita unei variabile. Astfel urmatoarea
secvent a
>> R = input(Raza= );
aseaza dupa prompter stringul Raza= si apoi asteapta un input de la
tastatura. Data de intrare poate orice expresie MATLAB, care va
evaluata utilizand variabilele din spat iul de lucru curent, iar rezultatul va
ntors n R.

In cazul n care utilizatorul apasa tasta ENTER, fara a tasta
nimic, input returneaza o matrice vida.
Urmatoarea secvent a
>> Nume = input(Numele: ,s);
aseaza stringul Numele: si asteapta un input sir de caractere care va
asignat variabilei Nume.
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 39 / 51
Instruct iuni de I/O
Pentru a asa valoarea unei variabile, putem folosi comanda reprezentata
de numele variabilei.

In acelasi scop putem utiliza instruct iunea disp,
asarea putand avea un aspect mai elegant. Folosind acesta instruct iune,
numele variabilei nu mai este asat. Un exemplu:
>> R = input(Raza= );
Raza= 4
>> R
R =
4
>> disp(R)
4
Scriind ntr-un script urmatoarele linii de program
% Salut.m
Nume = input(Numele: ,s);
s = [Salut , Nume, !];
disp(s)
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 40 / 51
Instruct iuni de I/O
si punandu-l n execut ie obt inem:
>> salut
Numele: XYZ
Salut XYZ!
Pentru a plasa o valoare numerica ntr-un tablou de siruri de caractere,
trebuie sa folosim funct ia num2str. De exemplu, scriem un script care
calculeaza aria unui cerc de raza R.
% Aria_cerc.m
R = input(Raza: );
a = pi * R^2;
x = [Aria= , num2str(a)];
disp(x)
sau asam direct,
disp([Aria= , num2str(a)]);
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 41 / 51
Instruct iunea if
MATLAB are patru structuri de control: instruct iunea if, instruct iunile
de ciclare for si while si instruct iunea switch.
Forma generala a instruct iunii if este
if expresie
instructiuni1
elseif expresie
instructiuni2
else
instructiuni3
end
unde secvent a de instructiuni1 este executata daca expresie este
evaluata la valoarea 1. Part ile elseif si else sunt opt ionale. Cea mai
simpla forma a instruct iunii if este
if expresie
instructiuni
end
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 42 / 51
Instruct iunea if
Secvent a urmatoare genereaza un numar aleator x din mult imea
{1, 2, 3, . . . , 10} si, daca numarul generat este par, atunci variabilei y i se
atribuie valoarea x/2:
clear;
x = fix(10 * rand) + 1
if mod(x, 2) == 0
y = x / 2
end
Doua variante ale deciziei se implementeaza cu else, ca n exemplul
clear;
x = fix(10 * rand) + 1
if mod(x, 2) == 0
y = x / 2
else
y = 0
end
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 43 / 51
Instruct iunea if
Pentru teste suplimentare folosim elseif, ca n exemplul
clear;
x = fix(10 * rand) + 1
if mod(x, 2) == 0
y = x / 2
elseif isprime(x)
y = x
elseif x^2 <= 25
y = x^2
else
y = 0
end
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 44 / 51
Instruct iunea for
Sintaxa generala a instruct iunii for este
for variabila = expresie
instructiuni
end
De obicei, expresie este un vector de forma i : h : j . Secvent a de
instructiuni este executata pentru variabila egala cu ecare element
al lui expresie n parte. Un alt mod de a deni expresie este utilizarea
modului de a construi un vector folosind notat ia cu paranteze patrate.
Ciclurile for pot imbricate.
Codul urmator construieste o matrice patratica de ordin 10, cu elementele
de pe diagonala principala egale cu 2, iar elementele de sub si de deasupra
diagonalei principale egale cu -1.
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 45 / 51
Instruct iunea for
clear;
N = 10;
for i = 1 : N
for j = 1 : N
if i == j
A(i,j) = 2;
elseif abs(i-j) == 1
A(i,j) = -1;
else
A(i,j) = 0;
end
end
end
A
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 46 / 51
Instruct iunea while
Forma generala a instruct iunii while este
while expresie
instructiuni
end
unde secvent a de instructiuni se executa atat timp cat expresie este
adevarata.

In exemplul urmator aproximam epsilon-ul masinii (cel mai mare numar u


cu proprietatea ca 1 + u nu poate distins de 1), care nu este altceva
decat valoare variabilei interne MATLAB eps.
clear;
u = 1;
while 1 + u > 1
ueps = u;
u = u / 2;
end
ueps
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 47 / 51
Instruct iunea switch
Instruct iunea switch are urmatoarea sintaxa generala:
switch expresie_switch
case expresie_case1
instructiuni
case {expresie_case2, expresie_case3,...}
instructiuni
...
otherwise
instructiuni
end
Daca expresie switch se potriveste cu expresie case1, atunci se
executa blocul de instruct iuni de dupa primul case. Altfel, se testeaza
expresie case a urmatorului case, pana se gaseste o potrivire. Daca o
expresie case este formata din mai multe expresii, atunci daca macar
una dintre acestea se potriveste cu expresie switch, se va executa
blocul de instruct iuni de dupa case-ul corespunzator.
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 48 / 51
Instruct iunea switch
Daca nicio expresie case nu se potriveste cu expresie switch, atunci
se va executa blocul de instruct iuni de dupa otherwise (daca exista).
Doar un singur case sau otherwise este executat, execut ia continuand
cu instruct iunea de dupa end. Astfel, instruct iunea switch din MATLAB
se comporta diferit de cea din C sau C++ : odata ce MATLAB a selectat
un case si blocul sau de instruct iuni a fost executat, se da controlul primei
instruct iuni de dupa switch, fara a nevoie de instruct iunea break.
expresie switch poate un scalar sau un string.

In exemplul ce urmeaza, calculam si asam norma p a vectorului v, pentru


4 valori posibile ale lui p.
clear;
n = input(n= );
v = -n : .5 : n;
p = input(Introduceti p (1, 2, inf, -inf): );
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 49 / 51
Instruct iunea switch
switch p
case 1
norma = norm(v, 1);
disp([Norma 1 a vectorului este: , num2str(norma)]);
case 2
norma = norm(v);
disp([Norma 2 a vectorului este: , num2str(norma)]);
case inf
norma = norm(v, inf);
disp([Norma inf a vectorului este: , num2str(norma)]);
case -inf
norma = norm(v, -inf);
disp([Norma -inf a vectorului este: , num2str(norma)]);
otherwise
disp(Ati introdus o valoare diferita de cea ceruta!);
end
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 50 / 51
Instruct iunile break si continue
Instruct iunea break termina execut ia unei bucle for sau while.

Intr-un
ciclu imbricat un break iese n ciclul de pe nivelul anterior. Instruct iunea
break nu este denita n afara unei bucle for sau while.

In acest scop se
poate folosi instruct iunea return.
for i = 1 : 10
if i > 5, break; end
disp(i)
end

Intr-o bucla for sau while, instruct iunea continue fort eaza trecerea
controlului la execut ia urmatoarei iterat ii, sarind instruct iunile ramase din
bucla.
for i = 1 : 10
if i <= 5, continue; end
disp(i)
end
Ana-Maria MOSNEAGU (Matematica) SOFT MATEMATIC 26 noiembrie 2013 51 / 51