Sunteți pe pagina 1din 16

3.

MATRICI ÎN MATLAB
3.1 Matrici și elementele lor

Ca și ȋn cazul vectorilor, elementele matricilor pot fi numere


reale sau complexe, expresii recunoscute de MATLAB sau pot fi
generate folosind diverse funcții. Operațiile și comenzile ȋn
MATLAB sunt asemǎnǎtoare modului de calcul obișnuit.

9 8 7
Exemplu: matricea A  6 5 4 se introduce astfel ȋn MATLAB:
3 2 1

>> A=[9 8 7;6 5 4;3 2 1]


A=
9 8 7
6 5 4
3 2 1

Dimensiunea unei matrici, respective numǎrul de linii și de coloane,


se obține folosind comanda “size”:

>> size(A)
ans =
3 3

De asemnea, size(A,1) va da numǎrul de linii (primul element al lui A)


și size(A,2) va da numǎrul de coloane (al doilea element al lui A).
Indexarea elementelor matricilor ȋn MATLAB este similarǎ cu cea a
vectorilor. De aceastǎ datǎ avem nevoie de doi indici, primul
acceseazǎ linia, al doilea coloana:

>> A(2,3)
ans =
4

46
Pentru a accesa o linie ȋntreagǎ folosim operatorul coloanǎ. Comanda
A(2,:) ȋnseamnǎ “linia a doua fiecare coloanǎ”a matricii A:

>> A(2,:)
ans =
6 5 4

În mod similar putem accesa orice coloanǎ a matricii A. Notația


A(:,2) ȋnseamnǎ “fiecare linie coloana a doua”.

>> A(:,2)
ans =
8
5
2

Putem sǎ extragem o submatrice din matricea A folosind indexarea.


Sǎ extragem liniile 1 și 3 și coloanele 2 și 3:

>> A([1,3],[2,3])
ans =
8 7
2 1
Putem modifica valoarea oricǎrui element al matricii A:

>> A(3,3)=10
A=
9 8 7
6 5 4
3 2 10

Se poate modifica complet o linie sau o coloanǎ. De exemplu,


modificǎm linia 1 și cerem ca noile valori sǎ fie valori consecutive
ȋntre 15 și 17:

>> A(1,:)=15:17

47
A=
15 16 17
6 5 4
3 2 10

Dacǎ partea dreaptǎ a expresiei de mai sus conține un singur numǎr,


atunci ȋntreaga linie (sau coloanǎ) va avea elementele egale cu noua
valoare:

>> A(:,2)=20
A=
15 20 17
6 20 4
3 20 10

Dacǎ vom da o valoare unui element al cǎrui indice depǎșește


dimensiunile matricii, MATLAB nu va genera un mesaj de eroare, ci
va adǎuga elementul ȋn poziția corespunzǎtoare, mǎrind astfel
dimensiunea matricii și completȃnd cu zero elementele care lipsesc:

>> A(5,5)=100
A=
15 20 17 0 0
6 20 4 0 0
3 20 10 0 0
0 0 0 0 0
0 0 0 0 100
>> size(A)
ans =
5 5

S-a obținut practice o matrice nouǎ, cu 5 linii și 5 coloane. Pentru a


șterge acum liniile și coloanele 4 și 5 (revenim la o matrice cu 3 linii
și 3 coloane), folosim operatorul “[ ]” (matricea zero):

>> A(:,4:5)=[] % sterge coloanele 4 si 5

48
A=
15 20 17
6 20 4
3 20 10
0 0 0
0 0 0
>> A(4:5,:)=[] % sterge liniile 4 si 5
A=
15 20 17
6 20 4
3 20 10

3.2 Operații cu matrici

Matricile definite ȋn MATLAB pot fi apelate ȋn diverse


operații aritmetice ȋn algebra liniarǎ, calculele efectuȃndu-se dupǎ
regulile calculului matricial. Printre acestea se numǎrǎ:
 adunarea și scǎderea matricilor
 ȋnmulțirea matricilor
 ridicarea la putere a matricilor
 ȋmpǎrțirea la dreapta, respectiv la stȃnga
 transpunerea matricilor
 inversarea matricilor.

MATLAB oferǎ o varietate de funcții pentru lucrul cu matrici. Lista


completǎ a acestora se poate accesa folosind comanda “help elmat”.
Funcțiile folosite pentru generarea matricilor elementare sunt date ȋn
tabelul urmǎtor:

zeros(n) genereazǎ o matrice pǎtratǎ (n x n) cu toate


elementele nule
zeros(m,n) genereazǎ o matrice de ordinul (m x n) cu toate
elementele nule
ones(n) genereazǎ o matrice pǎtratǎ (n x n) cu toate
elementele egale cu 1
ones(m,n) genereazǎ o matrice de ordinul (m x n) cu toate
elementele egale cu 1

49
eye(n) genereazǎ matricea identitate, ale cǎrei elemente de
pe diagonala principalǎ sunt egale cu 1, restul fiind 0
rand(n) genereazǎ o matrice pǎtratǎ (n x n) sau de ordinul
rand(m,n) (m x n) cu elemente cu valori aleatoare, cu
distribuție uniformǎ ȋn intervalul (0,1)
randn(n) genereazǎ o matrice pǎtratǎ (n x n) sau de ordinul
randn(m,n) (m x n) cu elemente cu valori aleatoare, cu
distribuție normalǎ (gaussianǎ) ȋn intervalul (0,1)
A.’ transpusa matricii A
A’ transpusa conjugatǎ a matricii A

Cȃteva matrici speciale definite ȋn MATLAB prin urmǎtoarele funcții:


diag matricea diagonalǎ
magic(n) pǎtratul magic
pascal(n) matricea Pascal de ordinul n
toeplitz matricea Toeplitz
vander matricea Vandermonde
hankel matricea Hankel
hilbert matricea Hilbert
wilkinson matricea Wilkinson
hilb matricea Hilbert

Funcțiile principale definite pentru lucrul cu matrici sunt date ȋn


tabelul urmǎtor:
triu(A) extrage matricea superior triunghiularǎ din A
tril(A) extrage matricea inferior triunghiularǎ din A
fliplr(A) ȋntoarce matricea A de la stȃnga la dreapta, practic
inverseazǎ coloanele
flipud(A) ȋntoarce matricea A de sus ȋn jos, practic inverseazǎ
liniile
rot 90(A) rotește matricea A la 90º, ȋn sens trigonometric
(linia 1 devine coloana 1; linia 2 devine coloana 2;
etc)
rot 90(A,k) rotește matricea A cu un unghi de k x 90º
reshape(A) schimbǎ mǎrimea și/sau dimensiunea matricii A
[] matricea nulǎ; este utilǎ și la ștergerea liniilor sau
coloanelor din matrici sau elementele unor vectori

50
3.3 Operații aritmetice simple

Adunarea și scǎderea matricilor

Dacǎ A și b sunt douǎ matrici de ordinul (m x n), atunci


operația de adunare

>>C=A+B

ȋnseamnǎ (cij) = (aij) + (bij) = (aij + bij) (adunare element-cu-element).

În cazul operației de scǎdere:

>>C=A-B

ȋnseamnǎ (cij) = (aij) – (bij) = (aij – bij) (scǎdere element-cu-element).

Adunarea și scǎderea matricilor sunt operații asociative. De exemplu,


pentru trei matrici M, N și P de aceleași dimensiuni, putem scrie:

M+N+P=M+(N+P)=(M+N)+P

M-N+P=(M-N)+P=(M+P)-N

Adunarea sau scǎderea unui scalar dintr-o matrice nu are sens


matematic; MATLAB va efectua operația și va aduna sau scǎdea din
fiecare element al matricii valoarea scalarului.

Înmulțirea unei matrici cu un scalar ȋnseamnǎ cǎ toate elementele


matricii A se ȋnmulțesc cu valoarea scalarului respectiv:

>>c*A

adicǎ c·A = c·(aij) = (c·aij); c fiind scalarul.


Exemple:
1 1 1  9 8 7  6 9 12 
Fie matricile: A  2 2 2 , B  6 5
  4 , C  15 18 21 ,

3 3 3 3 2 1 24 27 30

51
 5 10 15 
D  și scalarii f = 1 și g = 0.2.
20 25 30

Efectuȃnd urmǎtoarele calcule ȋn MATLAB:


a). A+B
b). A+B+C
c). A+B-C
d). A+f
e). B*g
f). C-D
se obțin rezultatele:

>> A=[1 1 1; 2 2 2;3 3 3], B=[9 8 7;6 5 4;3 2 1]


A=
1 1 1
2 2 2
3 3 3
B=
9 8 7
6 5 4
3 2 1
>> C=[6 9 12;15 18 21;24 27 30], D=[5 10 15;20 25 30]
C=
6 9 12
15 18 21
24 27 30
D=
5 10 15
20 25 30
>> f=1, g=0.2
f=
1
g=
0.2000
>> A+B
ans =

52
10 9 8
8 7 6
6 5 4
>> A+B+C
ans =
16 18 20
23 25 27
30 32 34
>> A+B-C
ans =
4 0 -4
-7 -11 -15
-18 -22 -26
>> A+f
ans =
2 2 2
3 3 3
4 4 4
>> B*g
ans =
1.8000 1.6000 1.4000
1.2000 1.0000 0.8000
0.6000 0.4000 0.2000
>> C-D
??? Error using ==> minus
Matrix dimensions must agree.

Mesajul de eroare generat de ultimul calcul este datoritǎ


faptului cǎ matricea C are dimensiunea (3 x 3) iar matricea D are
dimensiunea (2 x 3) și deci calculul nu poate fi efectuat, lucru la care
ne așteptam.

Înmulțirea matricilor

O matrice A de dimensiuni (m x n) poate fi ȋnmulțitǎ la dreapta cu un


vector x de dimensiune (n x 1) (vector coloanǎ), rezultȃnd un vector
de dimensiune (m x 1).

53
Înmulțirea la stȃnga a matricii A se poate efectua numai cu un vector
y de dimensiune (1 x m) (vector linie).
Înmulțirea a douǎ matrici A și B se poate face numai ȋn cazul ȋn care
A are dimensiunea (m x n) iar B are dimensiunea (n x p), rezultȃnd o
matrice de dimensiunea (m x p). În oricare altǎ situație se va obține un
mesaj de eroare.
Exemplu: fie vectorii x = [1;2;3] și y = [4 5 6]. Efectuǎm urmǎtoarele
calcule ȋn MATLAB:
a). A*x
b). y*B
c). A*B
d). A*B*C
e). A*y
f). x*B

>> x=[1;2;3], y=[4 5 6]


x=
1
2
3
y=
4 5 6
>> A*x
ans =
6
12
18
>> y*B
ans =
84 69 54
>> A*B
ans =
18 15 12
36 30 24
54 45 36
>> A*B*C
ans =

54
621 756 891
1242 1512 1782
1863 2268 2673
>> A*y
??? Error using ==> mtimes
Inner matrix dimensions must agree.
>> x*B
??? Error using ==> mtimes
Inner matrix dimensions must agree.

Ultimele douǎ calcule nu se pot efectua. Totuși, ȋnmulțirea este


posibilǎ dacǎ vom folosi vectorii transpuși, și anume xT și yT:

>> A*y.’
Ans =
15
30
45
>> x.’*B
ans =
30 24 18

Ca și reguli generale ȋn operațiile matriciale, pentru matrici de


aceleași dimensiuni și valori scalare, urmǎtoarele operații pot fi
efectuate (cu m și n scalari):

A · (B + C) = A · B + A · C
(A + B) · C = A · C + B · C
(A · B) · C = A · (B · C)
(m + n) · A = m · A + n · A
m· (A + B) = m · A + m · B
m · (n · A) = (m · n) · A
(m · A) · B = m · (A · B) = A · (m · B)

55
Înmulțirea matricilor nu este asociativǎ; adicǎ A·B ≠ B·A, nici ȋn
cazul matricilor pǎtrate. Posibilele excepții sunt cazuri extrem de rar
ȋntȃlnite ȋn practicǎ.

Ridicarea la putere a unei matrici

Aceastǎ operație se poate efectua doar pentru o matrice pǎtratǎ: M^p,


unde p este un scalar pozitiv, ȋntreg.
Exemplu: matricea M ridicatǎ la puterea a treia:

>> M=[5 3 2;-1 7 9;4 8 6]; p=3;


>> M1=M^3
M1 =
294 846 822
462 1818 1800
528 1848 1812

Rezultatul acestei operații este echivalent cu M*M*M. Dacǎ


exponentul este ȋntreg negativ, ridicarea la putere a matricii ȋnseamnǎ
calculul inversei acesteia (ȋn ipoteza cǎ determinantul matricii M este
diferit de zero) și apoi se ȋnmulțesc inversele. MATLAB afișeazǎ doar
rezultatul final.
Exemplu: matricea M ridicatǎ la puterea -3:

>> p1=-3;
>> M2=M^p1
M2 =
0.0364 0.0157 -0.0321
-0.1280 -0.1116 0.1689
0.1200 0.1092 -0.1624
>> % verificarea rezultatului
>> M3=inv(M)*inv(M)*inv(M)
M3 =
0.0364 0.0157 -0.0321
-0.1280 -0.1116 0.1689
0.1200 0.1092 -0.1624

56
Tablourile sunt tot vectori sau matrici, definite ȋn același mod, cu
singura deosebire cǎ operațiile aritmetice sunt efectuate element-cu-
element. Adunarea și scǎderea sunt similare pentru matrici și tablouri,
dar operațiile muliplicative sunt diferite (cu mențiunea cǎ se pot
realiza doar ȋntre tablouri de aceleași dimensiuni).
Lista operatorilor pentru tablouri include un punct ȋnaintea operației
respective (punctul zecimal, „dot”), astfel:

+ adunarea (ca la vectori și matrici)


- scǎderea (ca la vectori și matrici)
.* ȋnmulțirea element-cu-element
./ ȋmpǎrțirea la dreapta, element-cu-element
.\ ȋmpǎrțirea la stȃnga, element-cu-element
.^ ridicarea la putere, element-cu-element
.’ transpunerea neconjugatǎ a tabloului

Împǎrțirea la dreapta

În cazul matricilor, operația de ȋmpǎrțire la dreapta reprezintǎ o nouǎ


matrice, obținutǎ de fapt prin ȋnmulțirea primei matrice cu inversa
celei de a doua:

R = A / B ≡ A * B-1

Pentru a fi posibilǎ, matricile trebuie sǎ respecte regula de ȋnmulțire


prezentatǎ anterior.
Exemplu: pentru matricile A și B ce iau valorile urmǎtoare sǎ
calculǎm rezultatul ȋmpǎrtirii la dreapta:

>> A=[1 3;5 7], B=[3 5; 7 9]


A=
1 3
5 7
B=
3 5
7 9
>> R=A/B
R=

57
1.5000 -0.5000
0.5000 0.5000
>> % verificare
>> R1=A*B^-1
R1 =
1.5000 -0.5000
0.5000 0.5000
Dacǎ vom considera A și B ca tablouri (au aceleași dimensiuni),
atunci ȋmpǎrțirea la dreapta va conduce la un tablou ale cǎrui
elemente sunt elementele tabloului A ȋmpǎrțite la elementele tabloului
B. Pentru o vizualizare mai bunǎ a rezultatului vom folosi formatul
rațional:

>> format rat


>> R2=A./B
R2 =
1/3 3/5
5/7 7/9

Împǎrțirea la stȃnga

Esste similarǎ ȋmpǎrțirii la dreapta, cu precizarea cǎ de aceastǎ datǎ se


ȋnmulțește inversa primei matrice cu cea de-a doua matrice:

L = A \ B ≡ A-1 * B

Pentru matricile A și B din exemplul anterior:

>> L=A\B
L=
0 -1
1 2
>> % verificare
>> L1=A^-1*B
L1 =
0 -1
1 2

58
Din nou, dacǎ A și B sunt tablouri rezultǎ un tablou ce conține fiecare
element al tabloului B ȋmpǎrțit la fiecare element al tabloului A:

>> L2=A.\B
L2 =
3 5/3
7/5 9/7
Bazat pe același raționament putem ȋnmulți sau ȋmpǎrți tablouri
unidimensionale sau putem ȋmpǎrți un scalar la un tablou.
Exemplu: fie tabloul unidimensional x = [1 2 3] și scalarul s = 5. Prin
ȋmpǎrțire la dreapta scalarul se ȋmparte la fiecare element al lui x, ȋn
timp ce prin ȋmpǎrțire la stȃnga fiecare element al lui x se ȋmparte la
scalar:

>> x=[1 2 3]; s=5;


>> s./x
ans =
5 5/2 5/3
>> s.\x
ans =
1/5 2/5 3/5

Ridicarea la putere a unui tablou

Înseamnǎ ridicarea fiecǎrui element al tabloului la puterea respectivǎ.


Se poate aplica tablourilor uni și bidimensionale:

>> A.^2 % ridicarea la patrat


ans =
1 9
25 49
>> A.^3 % ridicarea la puterea a treia
ans =
1 27
125 343

Acest lucru diferǎ semnificativ de ridicarea la putere a matricii A:

59
>> A^2
ans =
16 24
40 64

Similar, un tablou unidimensional:

>> x.^2
ans =
1 4 9
>> x.^3
ans =
1 8 27

Transpusa unei matrici

Se calculeazǎ analog transpusului unui vector linie sau coloanǎ. Dacǎ


matricea conține și numere complexe, transpusa matricii va permuta
liniile cu coloane fǎrǎ a modifica valorile elementelor. Dacǎ se face o
traspunere conjugatǎ, elementele cu valori complexe se vor ȋnlocui cu
valoarea lor complex-conjugatǎ: a+bi→a-bi.
1 2 3  i
Exemplu: pentru matricea A   sǎ se determine
5 2  i 7 
transpusa și transpusa conjugatǎ:

>> A=[1 2 3+i;5 2-i 7]


A=
1 2 3 + 1i
5 2 - 1i 7
>> % tranpusa
>> At=A.’
At =
1 5
2 2 - 1i
3 + 1i 7

60
>> % transpusa conjugata
>> Atc=A’
Atc =
1 5
2 2 + 1i
3 - 1i 7

61

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