Sunteți pe pagina 1din 55

MATLAB – elemente

fundamentale de limbaj
Aplicații în inginerie
MATLAB - Prezentare generală

 Pachet software pentru aplicații de calcul numeric în domenii științfifice și inginerești


 Dezvoltat de MathWorks, versiunea curentă R2020a
 Pachetul conține un mediu de programare cu caracteristici specifice calculului numeric și numeroase
instrumente specializate pentru:
 Inginerie
 Economie
 Biologie, bio-informatică
 Procesare de imagini
 Statistică și învățare automată
 Inteligență artificială
 Reprezentări grafice complexe
 Procesare de semnale și analiză spectrală
MATLAB –Principalele capabilități

 Operații cu matrice:
 Operații aritmetice, transpunerea de matrici, matricea inversă, redimensionarea și remodelarea
matricilor, produsul Kronecker, matrici Hadamard, matrici Toeplitz
 Șiruri de caractere și operații cu acestea
 Reprezentări grafice 2D, 3D, reprezentări grafice specializate: statistică, econometrie, etc.
 Funcții integrate: funcții trigonometrice, exponent, logaritm, transofmata Fourier, soluții
numerice pentru ecuații diferențiale, etc.
 Optimizare matematică
 Dezvoltare de aplicații
MATLAB – Avantaje

 Limbajul MATLAB este interpretat (nu necesită compilare). Mediul de dezvoltare


integrată dispune de o interfață interactivă care permite evaluarea rapidă a unor expresii
sau a unor fragmente mici de cod.
 Editorul integrat este prevăzut cu un sistem complex de depanare care permite execuția
linie cu linie; definirea de expresii logice complexe pentru comutarea între execuția
normală și execuția în regim de depanare
 Independența față de platformă
 Funcții specializate integrate
MATLAB – Dezavantaje

 Faptul că MATLAB este interpretat (și nu compilat). Execuția codului este mai lentă în
comparație cu limbajele compilate. Un program MATLAB nu poate rula independent de
mediul de dezvoltare.
 Costul foarte mare, ceea ce îi reduce accesibilitatea
OCTAVE – alternativă open source la
MATLAB
 Software de tip “open-source”, poate fi descărcat și utilizat gratuit:
https://www.gnu.org/software/octave/
Versiunea curentă este 5.2.0
Sintaxa limbajului este identică cu Matlab
 Compatibil cu majoritatea platformelor: Windows, Unix, Mac
 Instrumente pentru algebră liniară, rezolvare de ecuații neliniare, sisteme de ecuații,
operații cu polinoame
 Integrare și derivare numerică, soluții numerice pentru ecuații diferențiale
 Community packages – colecții de programe specializate: procesare audio, automatizări,
baze de date, calcul simbolic, medicină, biologie, etc
Variabile

 Reguli pentru numele de variabile:


 Orice caracter alfanumeric plus caracterul _
 Numele variabilei nu poate să înceapă cu o cifră
 Interpretorul MATLAB/OCTAVE face distincția dintre majuscule și minuscule
 Nu pot fi utilizate ca nume de variabile cuvintele cheie ale limbajului sau funcții (integrate sau definite de
către utilizator). Se poate verifica dacă un nume de variabilă este sau nu un cuvânt cheie:
iskeyword(sir_de_caractere)
 Verificarea disponibilității unui nume de varaibilă se face prin comanda which
 Informații despre o variabilă:
 whos(sir_de_caractere)
 class(nume_variabila)

 Valori speciale: Inf, NaN, ans, date, clock, e, pi, i, (j, 1i, 1j), true, false
Tipuri de date numerice

 Clase numerice:
 Întreg (cu diferite subtipuri, cu sau fără semn)
 Dublă/simplă precizie (numere în virgulă mobilă)
Tipuri de date numerice

 Informații despre clasa variabilei:


 whos(‘sir_de_caractere’) sau whos nume_variabila
 class(nume_variabila)
 Informații despre structura variabilei: size, length
Tipuri de date “șir de caractere”

 Secvență de caractere delimitată de caracterele apostrof (‘)


 Exemplu: a = ‘abcdefghij01234_*-+’
 Șirul de caractere poate conține orice caracter
 Funcții caracteristice:
 Concatenarea de șiruri: strcat(sir1, sir2)
 Conversia la tipuri numerice: str2double(‘sir_numeric’)
 Conversia de la tipuri numerice la tipul șir de caractere: num2str(tip_numeric)
Operatori aritmetici

 Simboluri pentru operatorii aritmetici:  Modulo (restul împărțirii):


 Adunare: +  mod(a, b)
 Scădere: -  rem(a,b)
 Înmulțire: *
 Împărțire: /
 Incrementare/Decrementare: ++, --
 Ridicarea la putere: ^
 Precedența operatorilor aritmetici:
 Ridicarea la putere
 Înmulțirea/împărțirea
 Adunarea/scăderea
Funcții integrate

 Funcții trigonometrice:  Funcții trigonometrice inverse:


 Sinus: sin(tip_numeric)  Arcsinus: asin(tip_numeric)
 Cosinus: cos(tip_numeric)  Arccosinus: acos(tip_numeric)
 Tangenta: tan(tip_numeric)  Arctangenta: atan(tip_numeric)
 Cotangenta: cot(tip_numeric)  Arccotangenta: acot(tip_numeric)
 Secanta: sec(tip_numeric)  Arcsecanta: asec(tip_numeric)

 Funcții de conversie grade - radiani:  Conversie de coordonate:


 deg2rad(tip_numeric)  [theta, rho] = cart2pol(x, y)
 rad2deg(tip_numeric)  [x, y] = pol2cart(theta, rho)
Exponenți și logaritmi

 Funcția exponențială: exp(tip_numeric)


 Logaritm natural: log(tip_numeric)
 Logaritm în baza 10: log10(tip_numeric)
 Logaritm în baza 2: log2(tip_numeric)
 Rădăcină de ordinul N din x: nthroot(x, N)
Numere complexe
 Declararea și inițializarea unei variabile
complexe:
 z=a+j*b
 z=a+i*b
 z = a + 1j * b
 z = a + 1j * b

 a – partea reală a numărului complex


 b – partea imaginară a numărului complex

 Partea reală:
 real(z)   Reprezentarea în formă polară
 Partea imaginară:
 imag(z)
r – modulul: r=abs(z)
– argumentul: arg(z)
Operații cu numere complexe

 z = complex(partea_reala, partea_imaginara)
 Adunarea: z1 + z2
 Scăderea: z1 – z2
 Înmultțirea z1 * z2
 Impărțirea z1 / z2
 Conjugatul unui număr complex: conj(z)
Vectori

 Vectorul este o colecție de elemente de același tip, de regulă numeric


 Vectorii pot fi de două tipuri:
 Vectori linie, la care elementele sunt separate de caracterul spațiu sau virgulă:
vector_linie = [e1 e2 e3 … en]

 Vector_coloană, la care elementele sunt separate de caracterul punct și virgulă sau Enter:
vector_colana= [e1; e2; e3; … en]

 Lungimea vectorului se determină cu funcția:


length(vector)
Indexarea vectorilor

 MATLAB indexează elementele unui vector astfel:

Element Index
1 1 element_n = vector(n)
2 2
... ...
n n

 Argumentul dintre paranteze poate fi un alt vector:


[ei ej ek] = vector([i j k])
 Extragerea unei secvențe de elemente:
[e1 e2 … en] = vector(i:i+n)
Indexarea vectorilor și extragerea de elemente /
secvențe
 Combinații de secvențe:
 Se consideră vectorul: v = [1 2 3 4 5 6 7 8 9]
Se va construi un vector cu 6 elemente, astfel:
 Primele 3 elemente sunt elementele 7-9 ale vectorului v
 Următoarele (și ultimele) elemente sunt elementele 1-3 ale vectorului v
v([7:9 1:3])

Cuvântul cheie end


v(j:end)
Permite extragerea unei secvențe începând cu elementul j și terminând cu ultimul element al vectorului
Vectori – extragerea de secvențe

 Extragerea de secvențe discontinue cu pas constant:


v(index_element_inceput: pas: index_element_sfarsit)

 Extragerea de secvențe inverse:


v(index_element_inceput: pas: index_element_sfarsit)
Cu condițiile:
 index_element_inceput > index_element_sfarsit
 pas < 0
Vectori – actualizarea elementelor

 Actualizarea unui singur element:


 Actualizarea unui element izolat:
v(index_element) = valoare_noua

 Actualizarea unui grup de elemente:


v([i j k])=[val_element_i val_element_j val_element_k])
Matrici

 Sintaxa:
 Elementele matricii sunt delimitate de caracterele [ ]:
 Elementele de pe linie sunt separate prin virgulă sau prin caracterul spațiu “ ”
 Liniile sunt separate prin caracterul punct și virgulă “;”
A. [e11, e12, …, e1m; e21, e22, …, e2m; … en1, en2, …, enm]
B. [e11 e12 …e1m
e21 e22 …, e2m

en1 en2 …, enm]
Matrici – adresarea elementelor
Funcții
 Dimensiunea unei matrici se determină cu funcția: size(nume_matrice)
Funcția returnează o matrice, astfel:
[nr_linii, nr_coloane] = size(nume_matrice)
 Funcția length() în cazul matricilor returnează o singură valoare, respectiv cea mai mare dintre cele
două dimensiuni

 Adresarea unui element:


nume_matrice(i, j)
 i – indexul liniei pe care se află elementul
 j – indexul coloanei pe care se află elementul
Matrici – extragerea de linii sau coloane
complete
 Extragerea unei linii:
nume_matrice(index_linie, :)
 Extragerea unei coloane:
nume_matrice(:, index_colana)

Indexarea liniară a matricilor:


Dacă se utilizează un singur index pentru adresearea unui element al unei matrice, programul re-
aranjează toate elementele matricei sub forma unui vector de tip coloană și returnează elementul cu
indexul respectiv din vectorul coloană
Indexarea liniară a matricilor
a11 a12 a13 a14 a15 a16
Index: 1 Index: 7 Index: 13 Index: 19 Index: 25 Index: 31

a21 a22 a23 a24 a25 a26


Index: 2 Index: 8 Index: 14 Index: 20 Index: 26 Index: 32

a31 a32 a33 a34 a35 a36


Index: 3 Index: 9 Index: 15 Index: 21 Index: 27 Index: 33

a41 a42 a43 a44 a45 a46


Index: 4 Index: 10 Index: 16 Index: 22 Index: 28 Index: 34

a51 a52 a53 a54 a55 a56


Index: 5 Index: 11 Index: 17 Index: 23 Index: 29 Index: 35

a61 a62 a63 a64 a65 a66


Index: 6 Index: 12 Index: 18 Index: 24 Index: 30 Index: 36
Indexarea liniară a matricilor – indici multipli

 nume_matrice([i j k..])
Identificarea valorilor extreme

 Funcția max(a)
Argumentul funcției max() poate fi:
 un vector, caz în care funcția max returnează elementul cu cea mai mare valoare a vectorului
 o matrice, caz în care funcția max returnează un vector de tip linie conținând elementul cu cea mai
mare valoare de pe fiecare coloană

 Funcția min(a)
Argumentul funcției min() poate fi:
 un vector, caz în care funcția max returnează elementul cu cea mai mică valoare a vectorului
 o matrice, caz în care funcția max returnează un vector de tip linie conținând elementul cu cea mai
mică valoare de pe fiecare coloană
Operatori relaționali – partea 1

Valorile logice acceptate de MATLAB sunt:


 1 (true) pentru “adevărat”
 0 (false) pentru “fals”
 Operatori relaționali pentru testarea inegalităților:
 a > b returnează 1 (adevărat) dacă valoarea rezultată în urma evaluării expresiei a este mai mare
decât cea rezultată în urma evaluării expresiei b. În caz contrar, returnează 0.
 a < b returnează 1 (adevărat) dacă valoarea rezultată în urma evaluării expresiei a este mai mică
decât cea rezultată în urma evaluării expresiei b. În caz contrar, returnează 0.
 a >= b
 a <= b
Operatori relaționali – partea 2

 Operatorul relațional pentru testarea egalității:


 a == b returnează 1 dacă valoarea rezultată în urma evaluării expresiei a este egală cu cea
rezultată în urma evaluării expresiei b. În caz contrar, returnează 0.

 Operatorul relațional pentru testarea faptului că două valori sunt diferite:


 a ~= b returnează 1 dacă valoarea rezultată în urma evaluării expresiei a este diferită de cea
rezultată în urma evaluării expresiei b. În caz contrar, returnează 0.
Precedența operatorilor relaționali
Identificarea indexului

 Identificarea indexului unui element:


find(nume_vector op_relațional expresie)
 Se evaluează expresie
 Se caută elementul (elementele) pentru care operatorul relațional returnează valoarea 1 (adevărat)
 Funcția returnează un vector de tip linie conținând elementele vectorului preluat ca argument
pentru care operatorul relațional a returnat valoarea 1.
Căutarea unui element într-un vector

 Identificarea valorii indexului (index_element) unui element oarecare într-un vector:


index_element = find(nume_vector == element)
 Identificarea indexului elementului (elementelor) mai mare (mai mic) decât o valoare
dată:
index_element = find(nume_vector > valoare)
index_element = find(nume_vector < valoare)
 Identificarea indexului elementului cu valoarea maximă (minimă)
index_element = find(nume_vector == max(nume_vector))
index_element = find(nume_vector == min(nume_vector))
Operații cu matrici. Operatori

 Adunare, scădere. Utilizează operatorii standard + și - pentru adunarea/scăderea aritmetică:


A + B, A – B

Condiție: numărul de linii și de coloane să fie același pentru toți operanzii

 Înmulțirea utilizează operatorul standard pentru înmulțirea aritmeticăă:


A*B

Condiție: A[l, m] x B[m, n] (operația nu este comutativă)

 Inversa unei matrici:


inv(nume_matrice)
Operații cu matrici. Operatori

 Transpusa unei matrici. Operatorul pentru obținerea transpusei unei matrici este caracterul ‘
(apostrof simplu). Sintaxa operației:
matrice_transpusa = matrice’
Operatorul ‘ este aplicabil și vectorilor, transformând un vector de tip linie într-un vector de tip
coloană și reciproc

 Concatenarea matricilor
 Concatenarea orizontală a două matrici, A și B. Sintaxa operației:
 [A B]
 [A, B]

Condiție A(n, m1), B(n, m2)


Operații cu matrici. Operatori

 Concatenarea matricilor
 Concatenarea verticală a două matrici, A și B. Sintaxa operației:
1. [A; B]
2. [A
B]

Condiție A(n1, m), B(n2, m)


 Concatenarea liniară a elementelor unei matrici A:
A(:)
Concatenarea - exemple
Extragerea de sub-matrici

COLOANE

1 2 i i+1 i+2 i+k m-1 m

1 1,1 1,2 … 1,i 1, i+1 1, i+2 … 1,i+k … 1,m-1 1,m

2 2,1 2,2   2,i 2,i+1 2,i+2 … 2,i+k … 2,m-1 2,m


… … … … … … … … … … …

l l,1 l,2   l,i l,i+1 l,i+2 … l,i+k … l,m-1 l,m


LINII

l+1 l+1,1 l+1,2 … l+1,i l+1,i+1 l+1,i+2 … l+1,i+k … l+1,m-1 l+1,m


… … … … … … … … … … …

l+o l+o,1 l+o,2 … l+o,i l+o,i+1 l+o,i+2 … l+o,i+k … … …


… … … … … … … … … … …

n n,1 n,2 … n,i n,i+1 n,i+2 … n,i+k … n,m-1 n,m


Extragerea de sub-matrici

A(l:l+o, i:i+k)
l,i l,i+1 l,i+2 … l,i+k
l+1,i l+1,i+1 l+1,i+2 … l+1,i+k
… … … … …
l+o,i l+o,i+1 l+o,i+2 … l+o,i+k

n=6, m=6

l=3, o=2
i=2, k=2
Extragerea de sub-matrici

A(l:l+o, i:i+k)
 Dacă numărul de linii se înlocuiește cu caracterul ”:” sintaxa devine:
A(:, i:i+k) – returnează toate liniile și intervalul de coloane între i și i+k
A(:, i:end) – returnează toate liniile și intervalul de coloane între i și ultima coloană a matricii

 Dacă numărul de colane se înlocuiește cu caracterul ”:” sintaxa devine:


A(l:l+o, :) – returnează intervalul de linii între l și l+o și toate coloane matricii
A(l:end, :) – returnează intervalul de linii între l și ultima linie a matricii și toate coloanele
matricii
Extragerea de sub-matrici

 Intervalul de linii/coloane care se extrag sub formă de sub-matrice din matricea de bază nu
trebuie fie în mod necesar continuu. În acest caz, sintaxa este:
A([l1, l2, …, ln], interval_colane)
A(interval_linii, [col1, col2, …,coln])
Matrici speciale

 Matricea unitate de ordinal n:


eye(n)
În care n reprezintă numărul de linii/coloane al matricii unitate:

1 0 0 ... 0 0
0 1 0 ... 0 0
0 0 1 ... 0 0
... ... ... ... ... ...
0 0 0 ... 1 0
0 0 0 ... 0 1
Matrici speciale

 Matricea zero: 0 0 0 ... 0 0


0 0 0 ... 0 0
zeros(n_linii, n_coloane)
0 0 0 ... 0 0
... ... ... ... ... ...
0 0 0 0 0
0 0 0 0 0

 Matricea unu: 1 1 1 ... 1 1


ones(n_linii, n_colane) 1 1 1 ... 1 1
1 1 1 ... 1 1
... ... ... ... ... ...
1 1 1 1 1
1 1 1 1 1
Matrici speciale

 Matricea diagonală
Fie vectorul de tip linie A = [a1, a2, …, an]
Matricea diagonală corespunzătoare vectorului A este:
a1 0 0 ... 0 0
0 a2 0 ... 0 0
0 0 a3 ... 0 0
... ... ... ... ... ...
0 0 0 an-1 0
0 0 0 0 an

matrice_diagonal = diag(A)
Remodelarea matricilor

 Fie matricea A(n1, m1). Operația de remodelare are sintaxa:


reshape(A, n2, m2)
Condiția: n1 x m1 = n2 x m2
Operații cu matrici. Aplicații

 Rezolvarea unui sistem de ecuații liniare


Generarea automată de vectori pe baza unui
număr dat de elemente
 linspace(a, b) – returnează un vector de tip linie conținând 100 de elemente, cu primul element a și
ultimul element b. Valorile elementelor sunt uniform distribuite pe intervalul a...b:
x1=a
x2 = x1 + (b-a)/99
x3 = x2 + (b-a)/99
...
x100 = b

a și b pot fi expresii care trebuie să poată fi evaluate la valori de tip numeric

 Dacă este necesar alt număr de elemente decât cel prestabilit (100), sintaxa este:
linspace(a, b, N)
Funcția linspace() funcționează la fel și în cazul în care argumentele a și b sunt valori de tip complex
Generarea automată de vectori pe baza
distanței dintre elemente
 Dacă se precizează elementele de început și de sfârșit ale vectorului a respectiv b și
distanța dintre elemente d (repartizate uniform pe intervalul a...b) sintaxa de generare a
vectorului este:
x = a:d:b
Numărul de elemente al vectorului astfel creat este:
N=|(b-a)/d| + 1
în care |x| reprezintă partea întreagă a argumentului x, obținută prin
trunchierea la cel mai mic întreg
Vectorul astfel generat este de tip linie
Operatori logici
I. Valori logice
Valorile logice admise de program sunt:
1 (true) pentru valoarea logică Adevărat (1)
0 (false) pentru valoarea logică Fals (0)

Regula de evaluare a valorilor numerice la o valoare de tip logic:


Orice valoare numerică diferită de zero este evaluată la 1 logic
Valoarea 0 (indiferent de clasa acesteia) este evaluată la 0 logic.
O valoare numerică poate fi convertită la o valoare logică prin funcție de conversie de tip logical(A).
Argumentul funcției, A, poate fi orice valoare numerică. Excepții:
 șir de caractere
 valori complexe
 NaN
Operatori logici
I. Valori logice
 Unei variabile i se poate atribui o valoare logică în următoarele moduri:
 variabila_logica = logical(a)
În care a este o valoare sau o expresie care poate fi evaluată la o valoare de tip
numeric
Pentru a testa dacă o variabilă este de tip logic:
 islogical(a)
 whos a
Rezultatul operației de comparație a două valori (utilizând un operator
relațional) poate fi atribuită în mod direct unei variabile de tip logic.

Dacă unul sau ambii operanzi ai unei operații logice nu sunt de tip logic,
operandul (sau operanzii) sunt convertiți implicit la valorile logice
corespuzătoare conform regulii de conversie
Operatori logici
II. Operatorul &.Tabelul de adevăr
 Operator binar A B A&B
FALSE FALSE FALSE
 Operatorul logic ”ȘI” (AND)
TRUE FALSE FALSE
 Simbolul operatorului: & FALSE TRUE FALS
 Sintaxa: TRUE TRUE TRUE
 A& B
A B A&B
 and(A, B)
0 0 0
1 0 0
A și B pot fi valori sau expresii care trebuie să poată fi evaluate
0 1 0
la valori de tip logic
1 1 1
Operatori logici
II. Operatorul |.Tabelul de adevăr
 Operator binar A B A&B
FALSE FALSE FALSE
 Operatorul logic ”SAU” (OR)
TRUE FALSE TRUE
 Simbolul operatorului: |
FALSE TRUE TRUE
 Sintaxa: TRUE TRUE TRUE
 A|B
 or(A, B) A B A&B
0 0 0
A și B pot fi valori sau expresii care trebuie să poată fi 1 0 1
evaluate la valori de tip logic 0 1 1
1 1 1
Operatori logici
II. Operatorul ~.Tabelul de adevăr
 Operator unar A ~A
FALSE TRUE
 Operatorul logic de negare (NOT) TRUE FALSE
 Simbolul operatorului: ~
 Sintaxa: A ~A
 ~A 0 1
1 0
 not(A)

A este o valoare sau expresii care trebuie să poată fi


evaluată la o valoare de tip logic
Operatori logici
II. Operatorul xor.Tabelul de adevăr
 Operator binar A B xor(A,B)
FALSE FALSE FALSE
 Operatorul logic sau exclusiv(XOR) TRUE FALSE TRUE
FALSE TRUE TRUE
 Nu există un simbol special pentru xor TRUE TRUE FALSE
 Sintaxa:
 xor(A, B)
A B xor(A,B)
0 0 0
1 0 1
A și B pot fi valori sau expresii care trebuie să poată fi
evaluate la valori de tip logic 0 1 1
1 1 0
Scurtcircuitarea operatorilor logici.

 Operatorul & standard.


 Fie expresia logică:
 v = a1 & a2 & a3 & ... & an
Se evaluează fiecare expresie a1 ... an la o valoare logică. Expresia este apoi evaluată de la stânga la dreapta
(în absența parantezelor sau a altor reguli de precedență)

 Scurtcircuitarea operatorului & presupune utilizarea a două caractere & în loc de unul singur: &&
 Fie expresia logică:
 v = a1 && a2 && a3 && ... && an
Scurtcircuitarea operatorului & prin sintaxa alternativă && determină evaluarea (de la stânga la dreapta) pânâ
la momentul la care o expresie aj este evaluată la valoarea 0 logic. Restul operanzilor nu mai sunt evaluați și
rezultatul expresiei din membrul drept al operației de atribuire este evaluat la 0 logic.
Precedența operatorilor logici

1 2
Reprezentări grafice

 Reprezentări grafice 2D
plot(x, y)
x – vector (linie sau coloană) reprezentând setul de valori de pe abscisa graficului
y - vector (linie sau coloană) reprezentând setul de valori de pe ordonata graficului
Condiție:
length(x) == length(y)

x și y pot fi matrici, cu condiția


size(x)(1) = = size(y)(1)
În cazul în care x și y sunt matrici (și condiția de mai sus este 1 logic) programul va trasa un număr de curbe egal cu:
size(x)(2)
Dacă size(x)(2) > size(y)(2) funcția plot() va returna o eroare

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