Sunteți pe pagina 1din 12

Programare si limbaje I

Anul I, AR+ITT

Curs 7. Clasele MATLAB

7.1 Generalități privind clasele MATLAB

Tipuri de date = clase (în MATLAB).


Există 15 clase fundamentale, fiecare putând alcătui matrice sau tablouri.
Dimensiunea minimă: 0x0.
Dimensiunea maximă: tablouri n-dimensionale de orice mărime.
Clasele Matlab fundamentale:

Fig. 7.1 Clasele Matlab de bază

7.1.1 Clasa booleană (logical)

Clasa booleană (logică) este reprezentată printr-o stare true sau false folosind numerele 1, respectiv 0.
Anumite funcţii şi operatori MATLAB returnează valori logice true sau false pentru a indica dacă o anumită
condiţie a fost evaluată la o valoare adevărată sau nu. De exemplu, expresia 50>40 returnează o valoare logică
true.
MATLAB suportă şi tablouri de valori logice. De exemplu, următoarea instrucţiune returnează un vector de valori
logice:

>>[30 40 50 60 70] > 40


ans =
0 0 1 1 1

Următoarea instrucţiune returnează un tablou 4x4 cu valori logice:

>>x = magic(4) >= 9


x =
1 0 0 1
0 1 1 0
1 0 0 1
0 1 1 0

Funcţiile MATLAB ale căror nume încep cu is (de exemplu ischar, issparse), returnează valori sau tablouri
logice.

1|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 7. Clase Matlab
Funcţie de conversie: logical()

Acţiune: converteşte valorile numerice în valori logice.

Sintaxă:

K = logical(A)

Descriere:

K = logical(A) returnează un tablou care poate fi folosit pentru indexare logică sau teste logice.
A(B), unde B este un tablou logic de aceleaşi dimensiuni cu A, returnează valorile lui A situate la coordonatele în
care partea reală a lui B este diferită de zero.
A(B), unde B este un tablou logic de dimensiuni mai mici decât A, returnează valorile vectorului coloană A(:)
situate la coordonatele în care partea reală a vectorului coloană B(:) este diferită de zero.
Observaţii:
Majoritatea operaţiilor aritmetice elimină caracterul logic al unui tablou. De exemplu, adunarea unei constante
zero la un tablou logic îi elimină caracteristicile logice.
A = +A este cel mai simplu mod de a converti un tablou logic, A, la un tablou numeric în dublă precizie.
Tablourile logice sunt create, de asemenea, folosind operatorii relaţionali (==,<,>,~=, etc.) şi funcţii precum any,
all, isnan, isinf, sau isfinite.

Exemple:

Fiind dată matricea A = [1 2 3; 4 5 6; 7 8 9], instrucţiunea B = logical(eye(3)) returnează un


tablou logic
B =
1 0 0
0 1 0
0 0 1
care poate fi folosit în indexarea logică, returnând elementele de pe diagonala principală a lui A:
>>A(B)
ans =
1
5
9
Totuşi, încercarea de a indexa matricea A folosind tabloul numeric eye(3) produce următoarea eroare:
>>A(eye(3))
??? Subscript indices must either be real positive integers or
logicals.

7.1.2 Clasele numerice

7.1.2.1 Clasele numerice în virgulă flotantă

MATLAB reprezintă numerele reale în virgulă flotantă fie în formatul simplă precizie, fie în formatul dublă precizie.
Formatul implicit este în dublă precizie.

Simplă precizie (single)

Tab. 7.1 Standardul IEEE 754 pentru simplă precizie


Biţi Utilizare
31 Semn (0 = pozitiv, 1= negativ)
30-23 Exponent
22-0 Partea fracţionară f a numărului 1.f

Domeniul de reprezentare: -3.4 x 1038 până la 3.4 x 1038 .


Necesită mai puţină memorie decât formatul în dublă precizie.

Funcţie de conversie: single()


2|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 7. Clase Matlab

Acţiune: converteşte o valoare numerică spre formatul simplă precizie

Sintaxă:

B = single(A)

Descriere:

Converteşte matricea A spre simplă precizie, atribuind valoarea rezultată variabilei B.

Exemple:

>>a = magic(4);
>>b = single(a);
>>whos
Name Size Bytes Class

a 4x4 128 double array


b 4x4 64 single array

Dublă precizie (double)

Tab. 7.2 Standardul IEEE 754 pentru dublă precizie


Biţi Utilizare
63 Semn (0 = pozitiv, 1= negativ)
62-52 Exponent
51-0 Partea fracţionară f a numărului 1.f

Necesită mai multă memorie decât formatul în simplă precizie.

Funcţie de conversie: double()

Acţiune: converteşte o valoare numerică spre formatul dublă precizie

Sintaxă:

double(x)

Descriere:

Returnează valoarea în dublă precizie a lui x.

Funcţii de determinare a domeniului de reprezentare

v = realmin
v = realmin ('classname')

v = realmax
v = realmax('classname')

unde classname poate fi single sau double.

Exemple:

- determinarea limitelor minime pentru clasele în virgulă flotantă:

>> realmin('single')
ans =
1.1755e-038

3|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 7. Clase Matlab
echivalent cu 2^(-126)

>> realmin('double')
ans =
2.2251e-308

echivalent cu 2^(-1022).

- determinarea limitelor maxime pentru clasele în virgulă flotantă:

>> realmax('single')
ans =
3.4028e+038

echivalent cu 2^(127)

>> realmax('double')
ans =
1.7977e+308

echivalent cu 2^(1023).

7.1.2.2 Clasele numerice întregi

Clasele numerice întregi cu semn (signed)

int8

int16

int32

int64

Funcţii de conversie: int8(), int16(), int32(), int64()

Forma generală:
I = int8(X)
I = int16(X)
I = int32(X)
I = int64(X)

Efect: convertesc elementele tabloului X în întregi cu semn. X poate fi orice obiect de tip numeric.

Tab 7.3 Funcţii de conversie spre tipuri întregi cu semn


Funcţie Domeniu Tip Octeţi pe element Clasă
int8() -128 ÷127 Întreg cu semn, pe 8 biţi 1 int8
int16() -32,768 ÷32,767 Întreg cu semn, pe 16 biţi 2 int16
int32() -2,147,483,648 ÷2,147,483,647 Întreg cu semn, pe 32 biţi 4 int32
int64() -9,223,372,036,854,775,808 ÷ Întreg cu semn, pe 64 biţi 8 int64
9,223,372,036,854,775,807

Clasele numerice întregi fără semn (unsigned)

uint8

uint16

uint32

uint64

4|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 7. Clase Matlab

Funcţii de conversie: uint8(), uint16(), uint32(), uint64()

Forma generală:
I = uint8(X)
I = uint16(X)
I = uint32(X)
I = uint64(X)

Efect: convertesc elementele tabloului X în întregi fără semn. X poate fi orice obiect de tip numeric.

Tab 7.4 Funcţii de conversie spre tipuri întregi fără semn


Funcţie Domeniu Tip Octeţi pe element Clasă
uint8() 0 ÷ 255 Întreg fără semn, pe 8 biţi 1 uint8
uint16() 0 ÷ 65,535 Întreg fără semn, pe 16 biţi 2 uint16
uint32() 0 ÷ 4,294,967,295 Întreg fără semn, pe 32 biţi 4 uint32
uint64() 0 ÷ 18,446,744,073,709,551,615 Întreg fără semn, pe 64 biţi 8 uint64

Funcţii de determinare a domeniului de reprezentare

v = intmin
v = intmin('classname')

v = intmax
v = intmax('classname')

Exemple:

- determinarea limitelor minime pentru clasele întregi cu semn:

>> intmin('int8')
ans =
-128
>> intmin('int16')
ans =
-32768
>> intmin('int32')
ans =
-2147483648
>> intmin('int64')
ans =
-9223372036854775808

- determinarea limitelor minime pentru clasele întregi fără semn:

>> intmin('uint64')
ans =
0

Observație. Toate clasele uint* au valoarea minimă zero.

- determinarea limitelor maxime pentru clasele întregi cu semn:

>> intmax('int8')
ans =
127
>> intmax('int16')
ans =
32767
>> intmax('int32')
ans =
2147483647
>> intmax('int64')

5|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 7. Clase Matlab
ans =
9223372036854775807

- determinarea limitelor maxime pentru clasele întregi fără semn:

>> intmax('uint8')
ans =
255
>> intmax('uint16')
ans =
65535
>> intmax('uint32')
ans =
4294967295
>> intmax('uint64')
ans =
18446744073709551615

7.1.3 Clasa text (char)

Un caracter în MATLAB este reprezentat printr-un întreg convertit în caracterul Unicode echivalent.
Un șir de caractere: vector cu componente numerice, reprezentând caractere.
Caracterele sau șirurile de caractere aparțin clasei char.

7.1.3.1 Crearea unui singur caracter

>>hChar = 'h'
>>whos hChar
Name Size Bytes Class Attributes

hChar 1x1 2 char

Valoarea numerică a lui hChar este:

>>uint8(hChar)
ans =
104

7.1.3.2 Crearea unui șir de caractere

>>str = 'Hello';
>>whos str
Name Size Bytes Class Attributes

str 1x5 10 char

>>str_numeric = uint8(str)
str_numeric =
72 101 108 108 111
>> str_alpha = char([72 101 108 108 111])
str_alpha =
Hello

7.1.3.3 Crearea unui tablou de șiruri de caractere

Se folosește constructorul de tablouri ([]), liniile se delimitează prin (;), iar matricea trebuie să fie dreptunghiulară,
adică fiecare linie să conțină același număr de elemente. În cazul în care șirurile de caractere nu au aceeași
lungime, se vor adăuga spații la sfârșit.

Exemplu:

>> persoana=['Pop Ion ';...


'Asistent universitar';...
'UTCN ']
6|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 7. Clase Matlab
persoana =
Pop Ion
Asistent universitar
UTCN

O altă modalitate de creare a tablourilor de șiruri de caractere este utilizarea funcției char().

>> pers_char=char('Pop Ion','Asistent universitar','UTCN')


pers_char =
Pop Ion
Asistent universitar
UTCN

Crearea tablourilor de șiruri de caractere prin concatenare:

>> nume='Pop Ion '


nume =
Pop Ion
>> functie='Asistent universitar'
functie =
Asistent universitar
>> angajator='UTCN '
angajator =
UTCN

Concatenarea orizontală creează un șir de caractere format din șirurile inițiale, plus eventual unul sau mai mulți
separatori:

>> pers_horiz=[nume, ',', functie, ',', angajator]


pers_horiz =
Pop Ion ,Asistent universitar,UTCN
>> pers_horiz=['|', nume,'|', ',','|', functie,'|', ',', '|', angajator,'|']
pers_horiz =
|Pop Ion |,|Asistent universitar|,|UTCN |

Concatenarea verticală produce o matrice de caractere. În acest caz, șirurile de caractere inițiale trebuie să aibă
aceeași lungime:

>> pers_vert=[nume; functie; angajator]


pers_vert =
Pop Ion
Asistent universitar
UTCN

7.1.4 Clasa manipulator de funcţie (function_handle)

Manipulatorul de funcție este o asociere apelabilă, cu o funcție MATLAB.

7.1.4.1 Crearea unui manipulator de funcție

Sintaxă:

h = @numefunctie

unde h este variabila care va memora manipulatorul de funcție.

Exemplu:

>> media=@mean
media =
@mean
>> media([1 3 5 7 9 11.25])
ans =
7|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 7. Clase Matlab
6.0417

A fost creat astfel un „alias” al funcției mean(), care poate fi folosit în locul funcției „manipulate”.

7.1.4.2 Manipularea unei funcții anonime

Manipulatoarele de funcții pot servi și la apelarea funcțiilor anonime. De exemplu, instrucțiunea:

>> patrat = @(x) x^2


patrat =
@(x)x^2

creează o funcție anonimă care calculează pătratul valorii primite ca și parametru:

>> patrat(5)
ans =
25

7.1.4.3 Obținerea de informații despre un manipulator de funcție

Funcția functions() returnează informații despre un manipulator de funcție. În legătură cu manipulatoarele


definite anterior, se obțin următoarele informații:

>> functions(media)
ans =
function: 'mean'
type: 'simple'
file: 'C:\Program Files\MATLAB\R2008b\toolbox\matlab\datafun\mean.m'
>> functions(patrat)
ans =
function: '@(x)x^2'
type: 'anonymous'
file: ''
workspace: {[1x1 struct]}

7.1.5 Clasele container eterogen

7.1.5.1 Clasa container eterogen bazată pe nume (struct)

Structurile sunt tablouri MATLAB care conțin câmpuri. Aceste câmpuri pot conține date de orice tip. De exemplu,
o structura auto poate conține următoarele câmpuri:

auto --> marca


model
an_fabricatie
cap_cilindrica
culoare
putere

Crearea tablourilor de tip structură folosind instrucțiunea de atribuire:

>> auto.marca='Nissan';
>> auto.model='DeltaWing';
>> auto.an_fabricatie=2012;
>> auto.cap_cilindrica=1600;
>> auto.culoare='silver';
>> auto.putere=300
auto =
marca: 'Nissan'
model: 'DeltaWing'
an_fabricatie: 2012
cap_cilindrica: 1600
culoare: 'silver'
8|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 7. Clase Matlab
putere: 300

Dacă se dorește introducerea mai multor modele auto, se vor folosi indici după numele structurii:

>> auto(2).marca='Porsche';
>> auto(2).model='911 Turbo Cabrio';
>> auto(2).an_fabricatie=2010;
>> auto(2).cap_cilindrica=3800;
>> auto(2).culoare='alb';
>> auto(2).putere=480
auto =
1x2 struct array with fields:
marca
model
an_fabricatie
cap_cilindrica
culoare
putere

Dimensiunea tabloului de tip structură

>> size(auto)
ans =
1 2

Dacă se dorește afișarea caracteristicilor unui autoturism, numele structurii se va indexa cu numărul de ordine al
elementului din tabloul de structuri:

>> auto(1)
ans =
marca: 'Nissan'
model: 'DeltaWing'
an_fabricatie: 2012
cap_cilindrica: 1600
culoare: 'silver'
putere: 300
>> auto(2)
ans =
marca: 'Porsche'
model: '911 Turbo Cabrio'
an_fabricatie: 2010
cap_cilindrica: 3800
culoare: 'alb'
putere: 480

Accesarea câmpului putere corespunzător primului autoturism și a câmpului model corespunzător celui de al
doilea autoturism, se face astfel:

>> auto(1).putere
ans =
300
>> auto(2).model
ans =
911 Turbo Cabrio

Crearea tablourilor de tip structură folosind funcția struct(). Se folosește următoarea formă generală:

strArray = struct('field1',val1,'field2',val2, ...)

unde field1... reprezintă câmpurile, iar val1... valorile. Întotdeauna se folosesc perechi de câmpuri și valori.

Exemplu: crearea unei structuri similare celei precedente, având numele autoStr:

>> autoStr=struct('marca', 'Mercedes', 'model', 'SLR McLaren Roadster 722 S',...


'an_fabricatie', 2010, 'cap_cilindrica', 5439, 'culoare', 'gri', 'putere', 625 )
9|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 7. Clase Matlab
autoStr =
marca: 'Mercedes'
model: 'SLR McLaren Roadster 722 S'
an_fabricatie: 2010
cap_cilindrica: 5439
culoare: 'gri'
putere: 625

7.1.5.2 Clasa container eterogen indexată (cell)

Un tablou de celule reprezintă o formă de memorare a datelor de tipuri și dimensiuni diferite (eterogene), în
aceeași structură de tip tablou. Pentru accesarea elementelor se folosește același mod ca și în cazul tablourilor
obișnuite (omogene), cu diferența că în loc de paranteze pătrate se vor folosi acolade.

Tab 7.5 Operatorii utilizați la construcția, concatenarea și indexarea tablourilor de celule


Operaţie Sintaxă Descriere
Construcție C = {A B D E} Construiește tabloul de celule C care poate conține date eterogene, din
variabilele A, B, D, și E
Concatenare C3 = {C1 C2} Concatenează tablourile de celule C1 și C2 într-un tablou de celule cu 2
elemente, C3, astfel încât C3{1} = C1 și C3{2} = C2
C3 = [C1 C2] Concatenează conținutul tablourilor de celule C1 și C2
Indexare X = C(s) Returnează celulele tabloului C specificate prin indicii s
X = C{s} Returnează conținutul celulelor lui C care sunt specificate prin indicii s
X = C{s}(t) Referă unul sau mai multe elemente ale unui tablou aflat în interiorul
unei celule. Indicele s selectează celula, iar indicele t selectează
elementul (elementele) de tablou.

Exemplu de definire a unui tablou de celule:

>> Tablou_celule = {magic(3), 'Toyota Avalon'; 3+7i, -pi:pi/12:pi}


Tablou_celule =
[3x3 double] 'Toyota Avalon'
[3.0000 + 7.0000i] [1x25 double]

Conținutul celulelor poate fi accesat astfel:

>> Tablou_celule{1}
ans =
8 1 6
3 5 7
4 9 2
>> Tablou_celule{2}
ans =
3.0000 + 7.0000i
>> Tablou_celule{3}
ans =
Toyota Avalon
>> Tablou_celule{4}
ans =
Columns 1 through 8
-3.1416 -2.8798 -2.6180 -2.3562 -2.0944 -1.8326 -1.5708 -1.3090
Columns 9 through 16
-1.0472 -0.7854 -0.5236 -0.2618 0 0.2618 0.5236 0.7854
Columns 17 through 24
1.0472 1.3090 1.5708 1.8326 2.0944 2.3562 2.6180 2.8798
Column 25
3.1416
>> Tablou_celule{1}(3,2)
ans =
9
>> Tablou_celule{3}(3)
ans =
y
10 | P a g e
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 7. Clase Matlab

Afișarea structurii grafice a unui tablou de celule

>> cellplot(Tablou_celule,'legend')

Fig. 7.2 Afișarea structurii grafice a unui tablou de celule folosind funcţia cellplot()

7.2 Funcţii matematice predefinite

7.2.1 Funcţii 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
11 | P a g e
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 7. Clase Matlab
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 Rădăcină pătrată din suma pătratelor
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ă.

7.2.2 Funcţii exponenţiale

exp Exponenţială
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 Următoarea putere mare a lui 2
nthroot Rădăcină reală de ordinul n din numere reale
reallog Logaritm natural pentru tablouri de numere reale nenegative
realsqrt Rădăcină pătrată pentru tablouri de numere reale nenegative
sqrt Rădăcină pătrată.

12 | P a g e

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