Sunteți pe pagina 1din 11

Informatica aplicată 2 - MATLAB 1

CURS 8

TABLOURI MULTIDIMENSIONALE

MATLAB-ul permite utilizarea tablourilor cu mai mult de 2 indici. Ele pot fi create și apelând funcțiile
specifice matricelor (zeros, ones, rand, randn etc.) cu mai mult de două argumente de intrare.
Exemplul 1: Crearea unui tablou cu dimensiunea 3 × 4 × 5 (60 de elemente), având toate
elementele egale cu 1.
U=ones(3,4,5)
U(:,:,1) =
1 1 1 1
1 1 1 1
1 1 1 1
U(:,:,2) =
1 1 1 1
1 1 1 1
1 1 1 1
U(:,:,3) =
1 1 1 1
1 1 1 1
1 1 1 1
U(:,:,4) =
1 1 1 1
1 1 1 1
1 1 1 1
U(:,:,5) =
1 1 1 1
1 1 1 1
1 1 1 1
Informatica aplicată 2 - MATLAB 2

Exemplul 2: În figura 1 se dă reprezentarea grafică a tabloului B de dimensiune 3 × 3 × 6.

Fig.1 Tablou tridimensional


B(:,:,1)=[3 2 1;6 5 4;9 8 7]
B(:,:,2)=[3 1 2;6 4 5;9 7 8]
B(:,:,3)=[2 3 1;5 6 4;8 9 7]
B(:,:,4)=[2 1 3;5 4 6;8 7 9]
B(:,:,5)=[1 2 3;4 5 6;7 8 9]
B(:,:,6)=[1 3 2;4 6 5;7 9 8]

B(:,:,1) =
3 2 1
6 5 4
9 8 7

B(:,:,2) =
3 1 2
6 4 5
9 7 8

B(:,:,3) =
2 3 1
5 6 4
8 9 7
Informatica aplicată 2 - MATLAB 3

B(:,:,4) =
2 1 3
5 4 6
8 7 9

B(:,:,5) =
1 2 3
4 5 6
7 8 9

B(:,:,6) =
1 3 2
4 6 5
7 9 8

Dimensiunea tabloului B returnată de MATLAB este:


size(B)
ans =
3 3 6

Referirea unui element individual al tabloului B se face prin 3 indici reprezentând dimensiunile 1,
2 și 3:
B(2,3,3) %linia 2, coloana 3, matricea 3
ans =
4

Linia a 2-a a matricei 3:


B(2,:,3)
ans =
5 6 4

A 5-a matrice:
B(:,:,5)
ans =
1 2 3
4 5 6
7 8 9
Informatica aplicată 2 - MATLAB 4

ȘIRURI DE CARACTERE

Șirurile de caractere (string-uri) se introduc în MATLAB încadrate între apostrofuri.


Exemplu:
a='Centrul Universitar Nord din Baia Mare'
a =
Centrul Universitar Nord din Baia Mare

Rezultatul este un tablou 1 × 38


size(a)
ans =
1 38

Intern, caracterele sunt memorate ca numere.


Funcția double convertește șirul de caractere într-un vector numeric care conține reprezentările
flotante ale codurilor ASCII ale fiecărui caracter:
b=double(a)
b =
Columns 1 through 13
67 101 110 116 114 117 108 32 85 110 105 118 101
Columns 14 through 26
114 115 105 116 97 114 32 78 111 114 100 32 100
Columns 27 through 38
105 110 32 66 97 105 97 32 77 97 114 101

Funcția char realizează conversia inversă (din cod ASCII în caracter):


c=char(b)
c =
Centrul Universitar Nord din Baia Mare

Caracterele ASCII imprimabile au codurile 32:127. Valorile mai mici decât 32 sunt coduri de
caractere de control neimprimabile.
Concatenarea șirurilor de caractere se realizează prin încadrarea lor între paranteze pătrate [].
Instrucțiunea următoare concatenează șirurile pe orizontală (se folosesc parantezele []):
d=['Forta∙','de∙','reactiune'] %sau d=['Forta∙' 'de∙' 'reactiune']
d =
Forta de reactiune

Rezultatul este un tablou 1 × 18.


Informatica aplicată 2 - MATLAB 5

Pentru a putea trata un text format din linii cu lungimi diferite, există trei posibilități:
1. Completarea cu blancuri: instrucțiunea următoare concatenează șirurile pe verticală:
e=['Forta∙∙∙∙';'de∙∙∙∙∙∙∙';'reactiune']
e =
Forta∙∙∙∙
de∙∙∙∙∙∙∙
reactiune

Rezultatul este un tablou 3 × 9. Dezavantajul este reprezentat de faptul că trebuie introduse


spații în primul și al doilea șir, pentru ca acestea să aibă aceeași lungime cu cel de-al treilea. Nu
folosiți această posibilitate!!!
2. Funcția char acceptă la intrare orice număr de linii, adaugă spații dacă este nevoie pentru a
face liniile de aceeași lungime și formează un tablou de caractere având fiecare linie pe un rând:
f=char('Forta','este','egala','cu','masa','inmultita','cu','acceleratia.')
f =
Forta∙∙∙∙∙∙∙
este∙∙∙∙∙∙∙∙
egala∙∙∙∙∙∙∙
cu∙∙∙∙∙∙∙∙∙∙
masa∙∙∙∙∙∙∙∙
inmultita∙∙∙
cu∙∙∙∙∙∙∙∙∙∙
acceleratia.

Rezultatul este un tablou de 8 × 12.


3. Textul mai poate fi memorat într-un tablou de celule 8 × 1 folosind acoladele {}:
g={'Forta';'este';'egala';'cu';'masa';'inmultita';'cu';'accelaratia.'}
g =
'Forta'
'este'
'egala'
'cu'
'masa'
'inmultita'
'cu'
'accelaratia.'
Informatica aplicată 2 - MATLAB 6

TABLOURI DE CELULE

Un tablou de celule în MATLAB este un tablou multidimensional ale cărui elemente sunt copii ale
altor tablouri. Crearea unui tablou de celule și indexarea elementelor se realizează folosind acolade
{} în loc de paranteze [], respectiv ().

Un tablou de celule poate conține elemente de diverse tipuri (scalari, vectori, matrice, șiruri de
caractere (string-uri)).
Exemplu: Tablou de celule unidimensional 1 × 3:
A=ones(4); %matrice 4 × 4
C={A,A(:,2),A(2,3)} %A(:,2) este un vector coloana, A(2,3) este un scalar
C =
[4x4 double] [4x1 double] [1]

produce un tablou de celule 1 × 3. Cele trei celule conțin o matrice, un vector coloană și un scalar.
Afișarea de tipul [4x4 double] [4x1 double] [1] se datorează lipsei de spațiu; ori de
câte ori apare această situație MATLAB dă un sumar al structurilor și componentelor.
Trebuie reținute două aspecte importante:
➢ utilizarea acoladelor în cazul indexurilor:
C{1} %se cere elementul 1 al structurii, adica matricea A
ans =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

desemnează matricea unitate 4 x 4,


C{2} %se cere elementul 2 al structurii, adica vectorul coloană A(:,2)
ans =
1
1
1
1

reprezintă coloana a 2-a a matricei unitate,


C{3} %se cere elementul 3 al structurii, adica scalarul A(2,3)
ans =
1

este elementul A(2,3) al matricei unitate


Informatica aplicată 2 - MATLAB 7

➢ Celulele conțin copii ale tablourilor, nu pointeri pe tablouri. Astfel, dacă se modifică matricea
A, tabloul C nu se modifică.

Pot fi create și tablouri de celule multidimensionale (având linii și coloane).


Exemplu:
D={'psi',9,eye(2);'miu',2-3i,pi}
D =
'psi' [ 9] [2x2 double]
'miu' [2.0000 - 3.0000i] [ 3.1416]

creează un tablou de celule 2 × 3.


A treia celulă din prima linie se obține astfel:
D{1,3}
ans =
1 0
0 1

STRUCTURI

1. Crearea structurilor
Structurile sunt tablouri de celule multidimensionale (eterogene), ale căror elemente pot fi
desemnate prin nume de câmpuri.
Exemplu: structură care conține informații despre produsele dintr-o magazie: denumire, furnizor, preț
și numărul de bucăți
MAG(1).denumire='surub cap hexagonal M8';
MAG(1).furnizor='S.C. SERV S.R.L.';
MAG(1).pret=0.2;
MAG(1).bucati=214;

creează o structură numită MAG, cu patru câmpuri: denumire, furnizor, pret, bucati
MAG
MAG =
struct with fields:
denumire: 'surub cap hexagonal M8'
furnizor: 'S.C. SERV S.R.L.'
pret: 0.2000
bucati: 214
Informatica aplicată 2 - MATLAB 8

Structurile sunt tablouri care permit inserarea unor elemente adiționale prin două metode:
a) câmpurile pot fi adăugate unul câte unul
MAG(2).denumire='surub cap hexagonal M10';
MAG(2).furnizor='S.C. SERV S.R.L.';
MAG(2).pret=0.22;
MAG(2).bucati=143;

b) cu ajutorul funcției struct


MAG(3)=struct('denumire','piulita autoblocanta M8','furnizor',...
'S.C. MAGNA IMPEX S.R.L.','pret',0.1,'bucati',203);

Deoarece structura a devenit destul de mare, la apelare se va afișa numai un sumar al ei:
MAG
MAG =
1x3 struct array with fields:
denumire
furnizor
pret
bucati

2. Interogarea structurilor
Există mai multe moduri de a interoga structurile:
a) Dacă se tastează
MAG.pret
ans =
0.2000
ans =
0.2200
ans =
0.1000

este ca și cum s-ar tasta pe rând:


MAG(1).pret
ans =
0.2000

MAG(2).pret
ans =
0.2200
Informatica aplicată 2 - MATLAB 9

MAG(3).pret
ans =
0.1000

Forma aceasta nu este foarte utilă, deoarece ia separat fiecare pret, îl atribuie variabilei
implicite ans și afișează rezultatul fiecărei atribuiri.
b) Dacă se încadrează între paranteze pătrate [] devine un vector linie
[MAG.pret]
ans =
0.2000 0.2200 0.1000

efectul este ca și cum s-ar tasta:


[MAG(1).pret, MAG(2).pret, MAG(3).pret]
ans =
0.2000 0.2200 0.1000

care are ca rezultat vectorul linie numeric al prețurilor.


Pentru a obține lista furnizor se folosesc acolade {}
{MAG.furnizor}
ans =
'S.C. SERV S.R.L.' 'S.C. SERV S.R.L.' 'S.C. MAGNA IMPEX S.R.L.'

rezultatul fiind în acest caz un tablou de celule.


c) Utilizând funcția char se creează un tablou de caractere
char(MAG.furnizor)
ans =
S.C. SERV S.R.L.
S.C. SERV S.R.L.
S.C. MAGNA IMPEX S.R.L.

d) Utilizarea funcției de concatenare cat care este utilă pentru crearea și gestionarea tablourilor
și structurilor de date avansate
C=cat(dim,A1,A2,A3,A4,...)

concatenează tablourile de intrare A1,A2,A3,... după dimensiunea dim.


Exemplu: concatenarea a două matrice:
A=[1,2;3,4];
B=[5,6;7,8];
cat(1,A,B) %concatenare dupa dimensiunea 1 (linie)
ans =
1 2
3 4
Informatica aplicată 2 - MATLAB 10

5 6
7 8

este echivalent cu: [A;B]


cat(2,A,B) %concatenare dupa dimensiunea 2 (coloana)
ans =
1 2 5 6
3 4 7 8

este echivalent cu: [A,B]

Sintaxele cu liste separate prin virgulă de forma:


cat(dim,C.field)

se pot utiliza pentru a concatena un tablou de structuri care conține câmpuri numerice într-o singură
matrice.
Exemplu:
cat(3,MAG.pret) %produce un tablou tridimensional 1 × 1 × 3
ans(:,:,1) =
0.2000
ans(:,:,2) =
0.2200
ans(:,:,3) =
0.1000

cat(2,MAG.pret) %produce un vector linie 1 × 3


ans =
0.2000 0.2200 0.1000

cat(1,MAG.pret) %produce un vector coloana 3 × 1


ans =
0.2000
0.2200
0.1000
Informatica aplicată 2 - MATLAB 11

Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA

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