Documente Academic
Documente Profesional
Documente Cultură
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 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
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